Compartir a través de


Adición de SID a un contexto de cliente

Una aplicación puede agregar identificadores de seguridad (SID) a un contexto de cliente existente llamando a la función AuthzAddSidsToContext . La función AuthzAddSidsToContext permite a una aplicación especificar una lista de SID y una lista de SID que restringen los SID al contexto de cliente especificado.

El sistema usa la lista de restricciones de SID cuando comprueba el acceso del token a un objeto protegible. Cuando un proceso o subproceso restringido intenta acceder a un objeto protegible, el sistema realiza dos comprobaciones de acceso: una mediante los SID habilitados del token y otra con la lista de restricciones de SID. Solo se concede acceso si ambas comprobaciones de acceso permiten los derechos de acceso solicitados.

Las variables de atributo deben estar en forma de expresión cuando se usan con operadores lógicos; de lo contrario, se evalúan como desconocidos.

Ejemplo

En el ejemplo siguiente se agrega un SID y un SID de restricción al contexto de cliente creado por el ejemplo en Inicialización de un 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;

}

Comprobaciones de acceso de almacenamiento en caché

Comprobación del acceso con authz API

Inicialización de un contexto de cliente

Consulta de un contexto de cliente