AccessCheck 関数 (securitybaseapi.h)

AccessCheck 関数は、セキュリティ記述子が、アクセス トークンによって識別されるクライアントに対して、指定されたアクセス権のセットを付与するかどうかを決定します。 通常、サーバー アプリケーションはこの関数を使用して、プライベート オブジェクトへのアクセスをチェックします。

構文

BOOL AccessCheck(
  [in]            PSECURITY_DESCRIPTOR pSecurityDescriptor,
  [in]            HANDLE               ClientToken,
  [in]            DWORD                DesiredAccess,
  [in]            PGENERIC_MAPPING     GenericMapping,
  [out, optional] PPRIVILEGE_SET       PrivilegeSet,
  [in, out]       LPDWORD              PrivilegeSetLength,
  [out]           LPDWORD              GrantedAccess,
  [out]           LPBOOL               AccessStatus
);

パラメーター

[in] pSecurityDescriptor

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

[in] ClientToken

アクセスを取得しようとしているクライアントを表す 偽装トークン へのハンドル。 ハンドルには、トークンへのTOKEN_QUERYアクセス権が必要です。それ以外の場合、関数は ERROR_ACCESS_DENIED で失敗します。

[in] DesiredAccess

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

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

[in] GenericMapping

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

[out, optional] PrivilegeSet

アクセス 検証の実行 に使用される 特権 を受け取るPRIVILEGE_SET構造体へのポインター。 特権が使用されなかった場合、この関数は PrivilegeCount メンバーを 0 に設定します。

[in, out] PrivilegeSetLength

PrivilegeSet パラメーターが指すバッファーのサイズをバイト単位で指定します。

[out] GrantedAccess

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

[out] AccessStatus

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

戻り値

関数が成功すると、戻り値は 0 以外になります。

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

解説

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

AccessCheck 関数は、指定したセキュリティ記述子と指定したアクセス トークンを比較し、AccessStatus パラメーターでアクセスが許可されるか拒否されるかを示します。 アクセスが許可されている場合、要求された アクセス マスク はオブジェクトに付与されたアクセス マスクになります。

セキュリティ記述子の DACL が NULL の場合、 AccessStatus パラメーターは TRUE を返します。これは、クライアントが要求されたアクセス権を持っていることを示します。

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

AccessCheck 関数は監査を生成しません。 アプリケーションでアクセス チェックの監査が必要な場合は、AccessCheck ではなく AccessCheckAndAuditAlarmAccessCheckByTypeAndAuditAlarmAccessCheckByTypeResultListAndAuditAlarmAccessCheckByTypeResultListAndAuditAlarmByHandle などの関数を使用します。

この関数を使用する例については、「 ACL を使用したクライアント アクセスの検証」を参照してください。

要件

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

こちらもご覧ください

AccessCheckAndAuditAlarm

AreAllAccessesGranted

AreAnyAccessesGranted

クライアント/サーバー Access Control

クライアント/サーバー Access Control関数

GENERIC_MAPPING

AccessCheck のしくみ

MakeAbsoluteSD

MapGenericMask

PRIVILEGE_SET

PrivilegeCheck

SECURITY_DESCRIPTOR