次の方法で共有


クライアント コンテキストの初期化

Authz API を使用してアクセス チェックまたは監査を実行するには、アプリケーションでクライアント コンテキストを作成する必要があります。

アプリケーションは、リソース マネージャーを初期化するために AuthzInitializeResourceManager 関数を呼び出す必要があります。 その後、アプリケーションは複数の関数のいずれかを呼び出して、クライアント コンテキストを作成できます。 また、アクセス チェックまたは監査をリモートで実行する場合は、 AuthzInitializeRemoteResourceManager 関数を使用する必要があります。

既存のクライアント コンテキストに基づいてクライアント コンテキストを作成するには、 AuthzInitializeContextFromAuthzContext 関数を呼び出します。

AuthzInitializeContextFromToken 関数は、ログオン トークン内の情報を使用して新しいクライアント コンテキストを作成します。 AuthzInitializeContextFromSid 関数は、指定された SID を使用して新しいクライアント コンテキストを作成します。

可能であれば、 AuthzInitializeContextFromSid の代わりに AuthzInitializeContextFromToken 関数を呼び出 しますAuthzInitializeContextFromSid は、クライアントが実際にログオンしていたログオン トークンで使用可能な情報を取得しようとします。 実際のログオン トークンは、ログオンの種類やログオン プロパティなどの詳細情報を提供し、ログオンに使用される認証パッケージの動作を反映します。 AuthzInitializeContextFromToken によって作成されたクライアント コンテキストはログオン トークンを使用し、結果のクライアント コンテキストは AuthzInitializeContextFromSid によって作成されたクライアント コンテキストよりも完全で正確です。

Note

条件付き式で を参照する場合、セキュリティ属性変数はクライアント コンテキストに存在する必要があります。それ以外の場合、それらを参照する条件式用語は不明として評価されます。 条件式の詳細については、「 条件付き ACE のセキュリティ記述子定義言語」トピックを 参照してください。

 

次の例では、Authz リソース マネージャーを初期化し、 AuthzInitializeContextFromToken 関数を呼び出して、現在のプロセスに関連付けられているログオン トークンからクライアント コンテキストを作成します。

BOOL AuthzInitFromToken(AUTHZ_CLIENT_CONTEXT_HANDLE *phClientContext)
{

    HANDLE                            hToken = NULL;
    LUID                            Luid = {0, 0};

    
    ULONG                            uFlags = 0;


    //Initialize Resource Manager
    if(!AuthzInitializeResourceManager(
        AUTHZ_RM_FLAG_NO_AUDIT,
        NULL,
        NULL,
        NULL,
        L"My Resource Manager",
        &g_hResourceManager
        ))
    {
        printf_s("AuthzInitializeResourceManager failed with %d\n", GetLastError);
        return FALSE;
    }
    

    //Get the current token.

    if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken))
    {
        printf_s("OpenProcessToken failed with %d\n", GetLastError);
        return FALSE;
    }


    //Initialize the client context

    if(!AuthzInitializeContextFromToken(
        0,
        hToken,
        g_hResourceManager,
        NULL,
        Luid,
        NULL,
        phClientContext
        ))
    {    
        printf_s("AuthzInitializeContextFromToken failed with %d\n", GetLastError);
        return FALSE;
    }

    
    printf_s("Initialized client context. \n");
    return TRUE;

}

クライアント コンテキストへの SID の追加

アクセス チェックのキャッシュ

Authz API を使用したアクセスの確認

AccessCheck のしくみ

クライアント コンテキストのクエリ

条件付き ACE のセキュリティ記述子定義言語

AuthzInitializeRemoteResourceManager

AuthzInitializeResourceManager