0

CreateFile を使用してファイルのハンドルを取得し、ACE をその DACL に追加しています。問題は、ファイルにアクセス許可がない場合、関数 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);

どちらもアクセスが拒否されます。何か案は?

ありがとう、ガビ

4

1 に答える 1

0

所有者には常に暗黙的に READ_CONTROL と WRITE_DAC が付与されているため、これは機能するはずですが、私のマシンでも同じ動作を確認しました。好奇心から Process Monitor を実行したところ、少し奇妙なことがわかりました。エクスプローラーがファイルを開いてセキュリティ情報を読み取る場合、NtOpenFile(READ_CONTROL) を経由します。CreateFile() を呼び出すテスト プログラムがファイルを開くと、 NtCreateFile(READ_CONTROL | SYNCHRONIZE ) を通過します。SYNCHRONIZE アクセスを許可する ACE がないため、明らかにこれは失敗します。ただし、この余分なアクセス フラグがどこから来ているのかはわかりません。私が考えることができる唯一のことは、WOW64 (これは 64 ビット マシンで管理者として実行される 32 ビット テスト プログラムです) と関係があるということですが、それをさらに調査するほどの動機はありませんでした。

于 2011-08-10T17:00:41.360 に答える