2011-08-08 9 views
0

CreateFileを使用して、DACLにACEを追加するファイルへのハンドルを取得しています。 問題は、ファイルにアクセス権がない場合、関数CreateFileを呼び出すとアクセス拒否エラーが発生します。私はファイルと管理者の所有者です。 エクスプローラを使用している場合は、アクセス許可を追加できます。空のDACL(セキュリティ記述子)でファイルを開くWin32 API CreateFile

私はOpenFileやSet security descriptorなどの他の機能には興味がありません。私はそのようなファイルを開くための適切な組み合わせに興味があります。私は特定のアクセス権を使用する必要があり、私はMSDNに読んだ

は、私が試してみた:

のCreateFile(lpFileName、READ_CONTROL | WRITE_DAC、 0、NULL、OPEN_EXISTING、 FILE_FLAG_BACKUP_SEMANTICS)。

CreateFile(lpFileName、READ_CONTROL | WRITE_DAC、 0、NULL、OPEN_EXISTING、 ACCESS_SYSTEM_SEURITY);

両方が拒否されました。 アイデア所有者は、常に暗黙的にREAD_CONTROLとWRITE_DACを付与されているが、私は私のマシンで同じ動作を検証するよう

おかげで、 ガビ

+0

些細な点ではあるが所有者は、必然的にアクセス許可を暗示していません。 – Deanna

+0

しかし、所有者が、許可なしのファイルであっても、 – GLev

答えて

0

は、これは動作するはずです。私はProcess Monitorを走らせて、ちょっと奇妙なものを見つけました。エクスプローラがセキュリティ情報を読み取るためにファイルを開くと、NtOpenFile(READ_CONTROL)を通過します。 CreateFile()を呼び出すテストプログラムがファイルを開いているとき、NtCreateFile(READ_CONTROL | SYNCLAND)を通過します。明らかに、SYNCHRONIZEアクセスを許可するACEがないので、これは失敗するでしょう。私はこの余分なアクセスフラグがどこから来ているか分かりません。私が考えることができるのは、WOW64(これは64ビットマシン上で管理者として実行されている32ビットのテストプログラム)と関係しているかもしれませんが、それ以上調査する意欲はありませんでした。

+0

もOK、ありがとうございます。それが理由であるかどうかを確認するために、別のVMでテストします。 – GLev

+0

さて、私はこれを32ビットXPで試したが、同じ動作を見た。何を作るのか分からない。 – Luke

+0

これは私が見つけることができるこの動作の唯一の参考資料です(http://reflector.webtropy.com/default.aspx/DotNET/DotNET/[email protected]/untmp/whidbey/REDBITS/ndp/clr/src/BCL/System/Security/AccessControl/FileSecurity @ cs/1/FileSecurity @ cs)を参照してください。いずれにしても、GetNamedSecurityInfo()およびSetNamedSecurityInfo()はこの制限を回避します。 – Luke

関連する問題