ファイルのアクセス権の取得
こんにちは。いつもお世話になっております。
ファイルのアクセス権を取得する処理を記述していて行き詰まってしまいました。
今、指定ファイルに対してアクセス許可、アクセス拒否が設定されているか取得する関数を作成しています。
-------------------------------------------------
//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
お礼
ありがとうございます。 Niwatori-Sanpoさんの紹介してくださったツールを使うことで削除できました。 以降も似たような状況で使わせていただきます。 ありがとうございました。