AccessCheckByTypeResultListAndAuditAlarmByHandleW

AccessCheckByTypeResultListAndAuditAlarmByHandleW (Unicode) 関数 (securitybaseapi.h) は、セキュリティ記述子が呼び出し元スレッドが偽装しているクライアントに対してアクセス権を許可するかどうかを判定する。

AccessCheckByTypeResultListAndAuditAlarmByHandleW SubsystemName, HandleId, ClientToken, ObjectTypeName, ObjectName, SecurityDescriptor, PrincipalSelfSid, DesiredAccess, AuditType, Flags, ObjectTypeList, ObjectTypeListLength, GenericMapping, ObjectCreation, GrantedAccessList, AccessStatusList, pfGenerateOnClose

SubsystemName : [wstr] 関数を呼び出しているサブシステムの名前を指定する、null 終端文字列へのポインタ。この文字列は関数が生成する監査メッセージに表示される。
HandleId : [intptr] クライアントのオブジェクトに対するハンドルを表す一意な値へのポインタ。アクセスが拒否された場合、システムはこの値を無視する。
ClientToken : [intptr] 操作を要求したクライアントを表すトークンオブジェクトへのハンドル。このハンドルは、セキュリティポリシー違反を防ぐために、ローカル名前付きパイプなどの通信セッション層を介して取得しなければならない。呼び出し元は、指定されたトークンに対して TOKEN_QUERY アクセス権を持っている必要がある。
ObjectTypeName : [wstr] 作成中またはアクセス中のオブジェクトの種類を指定する、null 終端文字列へのポインタ。この文字列は関数が生成する監査メッセージに表示される。
ObjectName : [wstr] 作成中またはアクセス中のオブジェクトの名前を指定する、null 終端文字列へのポインタ。この文字列は関数が生成する監査メッセージに表示される。
SecurityDescriptor : [int] アクセスチェック対象の SECURITY_DESCRIPTOR 構造体へのポインタ。
PrincipalSelfSid : [int] SID へのポインタ。セキュリティ記述子がプリンシパルを表すオブジェクト(ユーザーオブジェクトなど)に関連付けられている場合、PrincipalSelfSid パラメータにはそのオブジェクトの SID を指定する。アクセス評価時には、この SID は周知 SID PRINCIPAL_SELF (S-1-5-10) を含む任意の ACE 内の SID を論理的に置き換える。周知 SID の詳細は「Well-known SIDs」を参照のこと。保護対象オブジェクトがプリンシパルを表さない場合、このパラメータは NULL に設定する。
DesiredAccess : [int] チェックするアクセス権を指定するアクセスマスク。このマスクは、汎用アクセス権を含まないように MapGenericMask 関数によってマッピング済みでなければならない。このパラメータが MAXIMUM_ALLOWED の場合、関数はセキュリティ記述子がクライアントに対して許可する最大のアクセス権を示すように GrantedAccess のアクセスマスクを設定する。
AuditType : [int] 生成する監査の種類。AUDIT_EVENT_TYPE 列挙型の値のいずれかを指定する。
Flags : [int] 呼び出し元プロセスが SE_AUDIT_NAME 特権を有効にしていない場合の関数の挙動を制御するフラグ。AUDIT_ALLOW_NO_PRIVILEGE フラグがセットされている場合、特権が有効になっていないときに関数は監査メッセージを生成せずにアクセスチェックを実行する。このパラメータが 0 の場合、特権が有効になっていないと関数は失敗する。
ObjectTypeList : [var] アクセスをチェックするオブジェクト型の階層を識別する OBJECT_TYPE_LIST 構造体の配列へのポインタ。配列の各要素には、オブジェクト型を識別する GUID と、オブジェクト型階層におけるレベルを示す値を指定する。配列内に同じ GUID を持つ要素が 2 つ存在してはならない。配列には少なくとも 1 つの要素が必要である。配列の最初の要素はレベル 0 でなければならず、オブジェクト自体を識別する。配列にはレベル 0 の要素を 1 つだけ含めることができる。2 番目の要素はサブオブジェクト(プロパティセットなど)であり、レベル 1 となる。各レベル 1 のエントリの後には、レベル 2 から 4 のサブオブジェクトに対する下位エントリが続く。したがって、配列要素のレベルは例えば {0, 1, 2, 2, 1, 2, 3} のようになる。オブジェクト型リストの順序が不正な場合、AccessCheckByTypeResultListAndAuditAlarmByHandle は失敗し、GetLastError は ERROR_INVALID_PARAMETER を返す。
ObjectTypeListLength : [int] ObjectTypeList 配列の要素数。
GenericMapping : [var] アクセスチェック対象のオブジェクトに関連付けられた GENERIC_MAPPING 構造体へのポインタ。
ObjectCreation : [int] アクセスが許可されたときに呼び出し側アプリケーションが新しいオブジェクトを作成するかどうかを決定するフラグ。TRUE はアプリケーションが新しいオブジェクトを作成することを示し、FALSE はアプリケーションが既存のオブジェクトを開くことを示す。
GrantedAccessList : [var] 
AccessStatusList : [var] オブジェクト型リストの各要素に対応するステータスコードの配列へのポインタ。関数は、アクセスチェックの成功を示す場合に要素を 0 に、特定のエラーを示す場合に 0 以外の値に設定する。関数が失敗した場合、配列の要素は一切設定されない。
pfGenerateOnClose : [var] 関数の復帰時に監査生成ルーチンがセットするフラグへのポインタ。オブジェクトハンドルを閉じるときに ObjectCloseAuditAlarm 関数にこのフラグを渡す。

(プラグイン / モジュール : advapi32.dll)

解説

AccessCheckByTypeResultListAndAuditAlarmByHandleW (Unicode) 関数
(securitybaseapi.h)
は、セキュリティ記述子が呼び出し元スレッドが偽装しているクライアントに対してアクセス権を許可するかどうかを判定する。

[戻り値]
関数が成功した場合、戻り値は 0 以外となる。関数が失敗した場合、戻り値は 0 となる。拡張エラー情報を取得するには
GetLastError を呼び出す。

[備考]
詳細は「How AccessCheck
Works」概説を参照のこと。AccessCheckByTypeResultListAndAuditAlarm
と同様に、AccessCheckByTypeResultListAndAuditAlarmByHandle 関数は
AccessCheckByTypeResultList と AccessCheckAndAuditAlarm
関数を組み合わせたものである。ただし、AccessCheckByTypeResultListAndAuditAlarmByHandle
はクライアントのセキュリティ情報を提供するためにクライアントトークンハンドルも必要とする。ObjectTypeList
配列は必ずしも定義済みオブジェクト全体を表すものではなく、アクセスをチェックしたいオブジェクトのサブセットを表す。たとえば、プロパティセット内の
2 つのプロパティへのアクセスをチェックするには、レベル 0 にオブジェクト自体、レベル 1 にプロパティセット、レベル 2 に 2
つのプロパティという 4
要素のオブジェクト型リストを指定する。AccessCheckByTypeResultListAndAuditAlarmByHandle
関数は、オブジェクト自体に適用される ACE と、ObjectTypeList 配列に列挙されたオブジェクト型に対するオブジェクト固有の
ACE を評価する。配列に列挙されていないオブジェクト型に対するオブジェクト固有の ACE は無視される。ACE
の階層がオブジェクトおよびそのサブオブジェクトへのアクセスをどのように制御するかの詳細は「ACEs to Control Access
to an Object's
Properties」を参照のこと。セキュリティイベントログに監査メッセージを生成するには、呼び出し元プロセスが
SE_AUDIT_NAME
特権を有効にしている必要がある。システムはこの特権を、スレッドの偽装トークンではなく呼び出し元プロセスのプライマリトークンに対して確認する。Flags
パラメータに AUDIT_ALLOW_NO_PRIVILEGE
フラグが含まれている場合、特権が有効になっていないときに関数は監査メッセージを生成せずにアクセスチェックを実行する。呼び出し元スレッドがクライアントを偽装していない場合、AccessCheckByTypeResultListAndAuditAlarmByHandle
関数は失敗する。セキュリティ記述子が所有者 SID とグループ SID
を含まない場合、AccessCheckByTypeResultListAndAuditAlarmByHandle は
ERROR_INVALID_SECURITY_DESCR で失敗する。

情報

プラグイン / モジュールadvapi32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の advapi32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_advapi32_gen2.hs