次の方法で共有


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

アプリケーションは、AuthzAddSidsToContext 関数を呼び出すことによって、既存のクライアント コンテキストにセキュリティ識別子 (SID) を追加できます。 AuthzAddSidsToContext 関数を使用すると、アプリケーションは SID のリストと、指定されたクライアント コンテキストに SID を制限するリストの両方を指定できます。

システムは、セキュリティ保護可能なオブジェクトへのトークンのアクセスをチェックするときに、制限 SID の一覧を使用します。 制限付きプロセスまたはスレッドがセキュリティ保護可能なオブジェクトにアクセスしようとすると、システムは 2 つのアクセス チェックを実行します。1 つはトークンの有効な SID を使用し、もう 1 つは制限 SID の一覧を使用します。 アクセスは、両方のアクセス チェックで要求されたアクセス権が許可されている場合にのみ付与されます。

論理演算子と共に使用する場合、属性変数は式の形式である必要があります。それ以外の場合は、不明として評価されます。

次の例では、「クライアント コンテキストの初期化」の例で作成したクライアント コンテキストに SID と制限 SID を追加します

BOOL AddSidsToContext(AUTHZ_CLIENT_CONTEXT_HANDLE *phClientContext)
{
    AUTHZ_CLIENT_CONTEXT_HANDLE        NewContext = NULL;
    PSID                            pEveryoneSid = NULL;
    PSID                            pLocalSid = NULL;
    SID_AND_ATTRIBUTES                Sids;
    SID_AND_ATTRIBUTES                RestrictedSids;
    DWORD                            SidCount = 0;
    DWORD                            RestrictedSidCount = 0;

    //Create a PSID from the "Everyone" well-known SID.
    if(!ConvertStringSidToSid(L"S-1-1-0", &pEveryoneSid))
    {
        printf_s("ConvertStringSidToSid failed with %d\n", GetLastError());
        return FALSE;
    }

    //Create a PSID from the "Local" well-known SID.
    if(!ConvertStringSidToSid(L"S-1-2-0", &pLocalSid))
    {
        printf_s("ConvertStringSidToSid failed with %d\n", GetLastError);
        return FALSE;
    }

    //Set the members of the SID_AND_ATTRIBUTES structure to be added.
    Sids.Sid = pEveryoneSid;
    Sids.Attributes = SE_GROUP_ENABLED;

    //Set the members of the SID_AND_ATTRIBUTES structure for the restricting SID.
    RestrictedSids.Sid = pLocalSid;
    RestrictedSids.Attributes = SE_GROUP_ENABLED;

    

    //Create a new context with the new "Everyone" SID and "Local" restricting SID.
    if(!AuthzAddSidsToContext(
        *phClientContext,
        &Sids,
        1,
        &RestrictedSids,
        1,
        &NewContext))
    {
        printf_s("AuthzAddSidsToContext failed with %d\n", GetLastError());
        if(pEveryoneSid)
        {
            FreeSid(pEveryoneSid);
        }
        if(pLocalSid)
        {
            FreeSid(pLocalSid);
        }
        return FALSE;
    }

    if(pEveryoneSid)
        {
            FreeSid(pEveryoneSid);
        }
        if(pLocalSid)
        {
            FreeSid(pLocalSid);
        }
        
        AuthzFreeContext(*phClientContext);
        *phClientContext = NewContext;

    return TRUE;

}

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

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

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

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