ファイルのアクセス権の取得
こんにちは。いつもお世話になっております。
ファイルのアクセス権を取得する処理を記述していて行き詰まってしまいました。
今、指定ファイルに対してアクセス許可、アクセス拒否が設定されているか取得する関数を作成しています。
-------------------------------------------------
//AceType --> ACE種別(1:アクセス許可 2:アクセス拒否)
psd = GlobalAlloc(GMEM_FIXED, 1000);
//ファイルのセキュリティ情報取得
GetFileSecurity(DirPath, DACL_SECURITY_INFORMATION, psd, 1000, &sdsize);
GetSecurityDescriptorDacl(psd, &DaclPresent, &pacl, &DaclDefaulted);
if(!DaclPresent){
//随意ACLがない
GlobalFree(psd);
return 0;
}
else{
GetAclInformation(pacl, &AclSize, sizeof(AclSize), AclSizeInformation);
AceCount = AclSize.AceCount;
for(i = 0; i < AceCount; i++){
//ACE取得
GetAce(pacl, i, (LPVOID *)&pace);
if(AceType == 1 && pace->Header.AceType == ACCESS_ALLOWED_ACE_TYPE){
//アクセス許可
break;
}
if(AceType == 2 && pace->Header.AceType == ACCESS_DENIED_ACE_TYPE){
//アクセス拒否
break;
}
}
GlobalFree(psd);
return 1;
}
-------------------------------------------------
通常のファイルについてはうまく取得できているようですが、FD内のファイルについてアクセスするとエラーとなってしまいます。
どうやら「GetFileSecurity」で「SecurityDesc」にTRUEが返ってきているようなのです。
しかし、当然「pacl」には何も返ってこないため、「GetAclInformation」でエラーとなります。
なぜ、「SecurityDesc」にTRUEが返ってきてしまうのでしょうか?
どうかご教示下さい。
<環境>
Windows 2000, Visual C++ 6.0
お礼
サンプルプログラムも有り、これで大丈夫かと思いきや ある関数の戻り値が期待通りに値が戻らずサンプルプログラムも途中で止まってしまいました。 でも、方法は分かりましたので大変助かりました。ありがとうございました。
補足
ありがとうございます。この方のページが参考になりそうです。結果をまたお知らせします。