次の方法で共有


AccessCheckByTypeAndAuditAlarmW 関数 (securitybaseapi.h)

AccessCheckByTypeAndAuditAlarm 関数は、セキュリティ記述子が、呼び出し元スレッドによって偽装されているクライアントに対して、指定されたアクセス権のセットを許可するかどうかを決定します。 関数は、オブジェクト、そのプロパティ セット、プロパティなどのオブジェクトの階層に対するクライアントのアクセスをチェックできます。 関数は、階層全体へのアクセスを許可または拒否します。 セキュリティ記述子に、クライアントに適用されるアクセス制御エントリ (ACE) を含むシステム アクセス制御リスト (SACL) がある場合、この関数は必要な監査メッセージをセキュリティ イベント ログに生成します。

アラームは現在サポートされていません。

構文

BOOL AccessCheckByTypeAndAuditAlarmW(
  [in]                LPCWSTR              SubsystemName,
  [in]                LPVOID               HandleId,
  [in]                LPCWSTR              ObjectTypeName,
  [in, optional]      LPCWSTR              ObjectName,
  [in]                PSECURITY_DESCRIPTOR SecurityDescriptor,
  [in, optional]      PSID                 PrincipalSelfSid,
  [in]                DWORD                DesiredAccess,
  [in]                AUDIT_EVENT_TYPE     AuditType,
  [in]                DWORD                Flags,
  [in, out, optional] POBJECT_TYPE_LIST    ObjectTypeList,
  [in]                DWORD                ObjectTypeListLength,
  [in]                PGENERIC_MAPPING     GenericMapping,
  [in]                BOOL                 ObjectCreation,
  [out]               LPDWORD              GrantedAccess,
  [out]               LPBOOL               AccessStatus,
  [out]               LPBOOL               pfGenerateOnClose
);

パラメーター

[in] SubsystemName

関数を呼び出すサブシステムの名前を指定する null で終わる文字列へのポインター。 この文字列は、関数が生成するすべての監査メッセージに表示されます。

[in] HandleId

オブジェクトへのクライアントのハンドルを表す一意の値へのポインター。 アクセスが拒否された場合、システムはこの値を無視します。

[in] ObjectTypeName

作成またはアクセスされるオブジェクトの種類を指定する null で終わる文字列へのポインター。 この文字列は、関数が生成するすべての監査メッセージに表示されます。

[in, optional] ObjectName

作成またはアクセスされるオブジェクトの名前を指定する null で終わる文字列へのポインター。 この文字列は、関数が生成するすべての監査メッセージに表示されます。

[in] SecurityDescriptor

アクセスがチェックされる SECURITY_DESCRIPTOR 構造体へのポインター。

[in, optional] PrincipalSelfSid

セキュリティ識別子 (SID) へのポインター。 セキュリティ記述子がプリンシパル (ユーザー オブジェクトなど) を表すオブジェクトに関連付けられている場合、 PrincipalSelfSid パラメーターはオブジェクトの SID である必要があります。 アクセスを評価するときに、この SID は、既知のPRINCIPAL_SELF SID (S-1-5-10) を含む ACE 内の SID を論理的に置き換えます。 既知の SID の詳細については、「 既知の SID」を参照してください。

保護されたオブジェクトがプリンシパルを表していない場合は、このパラメーターを NULL に設定 します

[in] DesiredAccess

チェックへのアクセス権を指定するアクセス マスク。 このマスクは、汎用アクセス権を含まない MapGenericMask 関数によってマップされている必要があります。

このパラメーターがMAXIMUM_ALLOWED場合、この関数は、セキュリティ記述子がクライアントに許可する最大アクセス権を示す GrantedAccess アクセス マスクを設定します。

[in] AuditType

生成する監査の種類。 これは、 AUDIT_EVENT_TYPE 列挙型の値のいずれかになります。

[in] Flags

呼び出し 元プロセス でSE_AUDIT_NAME特権が有効になっていない場合に、関数の動作を制御するフラグ。 AUDIT_ALLOW_NO_PRIVILEGE フラグが設定されている場合、特権が有効になっていない場合、この関数は監査メッセージを生成せずにアクセス チェックを実行します。 このパラメーターが 0 の場合、特権が有効になっていない場合、関数は失敗します。

[in, out, optional] ObjectTypeList

アクセスをチェックするオブジェクト型の階層を識別するOBJECT_TYPE_LIST構造体の配列へのポインター。 配列内の各要素は、オブジェクトの種類を識別する GUID と、オブジェクト型の階層内のオブジェクト型のレベルを示す値を指定します。 配列には、同じ GUID を持つ 2 つの要素を含めてはいけません。

配列には少なくとも 1 つの要素が必要です。 配列の最初の要素はレベル 0 で、オブジェクト自体を識別する必要があります。 配列には、レベル 0 要素を 1 つだけ含めることができます。 2 番目の要素は、レベル 1 のプロパティ セットなどのサブオブジェクトです。 各レベル 1 エントリの後には、レベル 2 から 4 のサブオブジェクトの下位エントリがあります。 したがって、配列内の要素のレベルは{0、1、2、2、1、2、3}になります。 オブジェクトの種類の一覧が順不同の場合、 AccessCheckByTypeAndAuditAlarm は失敗し、 GetLastError は ERROR_INVALID_PARAMETERを返します。

[in] ObjectTypeListLength

ObjectTypeList 配列内の要素の数。

[in] GenericMapping

アクセスがチェックされているオブジェクトに関連付けられている GENERIC_MAPPING 構造体へのポインター。

[in] ObjectCreation

アクセスが許可されたときに、呼び出し元のアプリケーションが新しいオブジェクトを作成するかどうかを決定するフラグ。 TRUE の値は、アプリケーションが新しいオブジェクトを作成することを示します。 FALSE の値は、アプリケーションが既存のオブジェクトを開くのを示します。

[out] GrantedAccess

付与されたアクセス権を受け取るアクセス マスクへのポインター。 AccessStatusFALSE に設定されている場合、関数はアクセス マスクを 0 に設定します。 関数が失敗した場合、アクセス マスクは設定されません。

[out] AccessStatus

アクセス チェックの結果を受け取る変数へのポインター。 セキュリティ記述子でクライアントに対する要求されたアクセス権が許可されている場合、 AccessStatusTRUE に設定されます。 それ以外の場合、 AccessStatusFALSE に設定され、 GetLastError を 呼び出して拡張エラー情報を取得できます。

[out] pfGenerateOnClose

関数が戻るときに監査生成ルーチンによって設定されたフラグへのポインター。 オブジェクト ハンドルが閉じられると、このフラグを ObjectCloseAuditAlarm 関数に渡します。

戻り値

関数が成功した場合、関数は 0 以外の値を返します。

関数が失敗すると、0 が返されます。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

詳細については、「 AccessCheck のしくみ の概要」を参照してください。

PrincipalSelfSid パラメーターと ObjectTypeList パラメーターが NULL の場合、AuditType パラメーターは AuditEventObjectAccessFlags パラメーターは 0、AccessCheckByTypeAndAuditAlarmAccessCheckAndAuditAlarm 関数と同じ方法で実行します。

ObjectTypeList 配列は、定義されたオブジェクト全体を必ずしも表すわけではありません。 代わりに、アクセスをチェックするオブジェクトのサブセットを表します。 たとえば、プロパティ セット内の 2 つのプロパティへのアクセスをチェックするには、レベル 0 のオブジェクト自体、レベル 1 のプロパティ セット、レベル 2 の 2 つのプロパティの 4 つの要素を含むオブジェクト型リストを指定します。

AccessCheckByTypeAndAuditAlarm 関数は、オブジェクト自体に適用される ACE と ObjectTypeList 配列にリストされているオブジェクト型のオブジェクト固有 ACE を評価します。 この関数は、 ObjectTypeList 配列にリストされていないオブジェクト型のオブジェクト固有の ACE を無視します。 したがって、 AccessStatus パラメーターで返される結果は、オブジェクト全体ではなく、 ObjectTypeList パラメーターによって定義されたオブジェクトのサブセットへのアクセスが許可されていることを示します。

ACE の階層がオブジェクトとそのサブオブジェクトへのアクセスを制御する方法の詳細については、「オブジェクトの プロパティへのアクセスを制御する ACE」を参照してください。

セキュリティ イベント ログに監査メッセージを生成するには、呼び出し元のプロセスでSE_AUDIT_NAME特権が有効になっている必要があります。 システムは、スレッドの偽装 トークン ではなく、呼び出し元プロセスのプライマリ トークン でこの特権をチェックします。 Flags パラメーターに AUDIT_ALLOW_NO_PRIVILEGE フラグが含まれている場合、特権が有効になっていない場合、この関数は監査メッセージを生成せずにアクセス チェックを実行します。

呼び出し元のスレッドがクライアントを偽装していない場合、 AccessCheckByTypeAndAuditAlarm 関数は失敗します。

セキュリティ記述子に所有者 SID とグループ SID が含まれていない場合、 AccessCheckByTypeAndAuditAlarm はERROR_INVALID_SECURITY_DESCRで失敗します。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー securitybaseapi.h (Windows.h を含む)
Library Advapi32.lib
[DLL] Advapi32.dll

こちらもご覧ください

AUDIT_EVENT_TYPE
AccessCheck
AccessCheckAndAuditAlarm
AccessCheckByType
AccessCheckByTypeResultList
AccessCheckByTypeResultListAndAuditAlarm
クライアント/サーバー Access Control
クライアント/サーバー Access Control関数
GENERIC_MAPPING
AccessCheck のしくみ
MakeAbsoluteSD
MapGenericMask
OBJECT_TYPE_LIST
ObjectCloseAuditAlarm
PRIVILEGE_SET
SECURITY_DESCRIPTOR