Compartilhar via


Adicionando SIDs a um contexto de cliente

Um aplicativo pode adicionar SIDs ( identificadores de segurança ) a um contexto de cliente existente chamando a função AuthzAddSidsToContext . A função AuthzAddSidsToContext permite que um aplicativo especifique uma lista de SIDs e uma lista de SIDs restritos ao contexto do cliente especificado.

O sistema usa a lista de SIDs restritos quando verifica o acesso do token a um objeto protegível. Quando um processo ou thread restrito tenta acessar um objeto protegível, o sistema executa duas verificações de acesso: uma usando SIDs habilitados para o token e outra usando a lista de SIDs de restrição. O acesso será concedido somente se ambas as verificações de acesso permitirem os direitos de acesso solicitados.

As variáveis de atributo devem estar na forma de uma expressão quando usadas com operadores lógicos; caso contrário, eles são avaliados como desconhecidos.

Exemplo

O exemplo a seguir adiciona um SID e um SID restrinjante ao contexto do cliente criado pelo exemplo em Inicializar um contexto de cliente.

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;

}

Verificações de acesso de cache

Verificando o acesso com a API do Authz

Inicializando um contexto de cliente

Consultando um contexto de cliente