AccessCheck 関数は、GenericMapping パラメーターを取得します。このパラメーターは何に使用されますか? 以前に MapGenericMask を DesiredAccess に適用する必要があるため、DesiredAccess パラメーターには使用されません。
これを行うCプログラムを使用して発見したため、SecurityDescriptorに含まれるDACLにも適用されません。
- 現在のスレッド トークンを開く
- トークンから所有者とデフォルト グループを使用してセキュリティ記述子を作成し、所有者に GENERIC_ALL を付与する DACL を作成する "D:(A;;GA;;;ownerSID)"
- GENERIC_MAPPING をセットアップします。これは、(とりわけ) GenericAll を私の OWN_READ | にマップします。OWN_WRITE (0x0001 および 0x0002 として定義)
- 上記で作成したセキュリティ記述子、スレッド トークン、DesiredAccess としての OWN_READ、記述された GENERIC_MAPPING を使用して AccessCheck を呼び出します。
ただし、これはアクセス拒否エラーで失敗します。セキュリティ記述子を「D:(A;;0x0001;;;ownerSID)」に変更すると、アクセスが許可されます。これは、AccessCheck が GenericMapping パラメーターを使用して、DACL の汎用アクセス フラグ (GA/GW/GR/GX) を特定のアクセス権に変換していないことを示しています。なんで?私は何か間違ったことをしていますか?
https://msdn.microsoft.com/de-de/library/windows/desktop/aa374815(v=vs.85).aspxは、セキュリティ記述子の設定方法に関するヒントを提供しません。