dポイントプレゼントキャンペーン実施中!

こんにちは。いつもお世話になっております。
ファイルのアクセス権を取得する処理を記述していて行き詰まってしまいました。
今、指定ファイルに対してアクセス許可、アクセス拒否が設定されているか取得する関数を作成しています。

-------------------------------------------------

//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

A 回答 (1件)

ファイルのアクセス権の対象となるのは、NTFSのディスクシステムです。


フロッピーは対象でないですね。

Win32サブルーチンズ - Windows NTでファイルにアクセス権を設定する方法
http://www7a.biglobe.ne.jp/~tsuneoka/win32tech/1 …

| ファイルシステムがNTFS(NT File System)でフォーマットされたディスクのみが利用できます.

--
> なぜ、「SecurityDesc」にTRUEが返ってきてしまうのでしょうか?

「GetFileSecurity」関数の実行結果を確認してください。
処理自体が失敗している場合、「SecurityDesc」変数の内容は保証されません。
    • good
    • 0
この回答へのお礼

neKo_deuxさん、回答ありがとうございます。

>ファイルシステムがNTFS(NT File System)でフォーマットされたディスクのみが利用できます。
なるほど。そういうことだったのですね。

ただ、「GetFileSecurity」関数の実行結果を確認したところTRUEが返ってきているようでした。
(ちなみに「GetSecurityDescriptorDacl」関数もTRUEを返しました)
他に原因があるのでしょうか?

お礼日時:2006/08/13 19:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています