Partager via


Interrogation d’un contexte client

Les applications peuvent appeler la fonction AuthzGetInformationFromContext pour interroger des informations sur un contexte client existant.

Le paramètre InfoClass de la fonction AuthzGetInformationFromContext prend une valeur de l’énumération AUTHZ_CONTEXT_INFORMATION_CLASS qui spécifie le type d’informations que la fonction interroge.

Les variables d’attribut de sécurité doivent être présentes dans le contexte client si elles sont mentionnées dans une expression conditionnelle ; sinon, le terme d’expression conditionnelle qui les référence sera évalué comme inconnu. Pour plus d’informations sur les expressions conditionnelles, consultez la rubrique Security Descriptor Definition Language for Conditional ACEs .

Exemple

L’exemple suivant interroge le contexte client créé dans l’exemple d’Initialisation d’un contexte client pour récupérer la liste des SID de groupes associés à ce contexte client.

BOOL GetGroupsFromContext(AUTHZ_CLIENT_CONTEXT_HANDLE hClientContext)
{

    DWORD                cbSize = 0;
    PTOKEN_GROUPS        pTokenGroups=NULL;
    LPTSTR                StringSid = NULL;
    BOOL                bResult = FALSE;
    int i = 0;

    //Call the AuthzGetInformationFromContext function with a NULL output buffer to get the required buffer size.
    AuthzGetInformationFromContext(hClientContext, AuthzContextInfoGroupsSids, 0, &cbSize, NULL);
    
        
    

    //Allocate the buffer for the TOKEN_GROUPS structure.
    pTokenGroups = (PTOKEN_GROUPS)malloc(cbSize);
    if (!pTokenGroups)
        return FALSE;

    //Get the SIDs of groups associated with the client context. 
    if(!AuthzGetInformationFromContext(hClientContext, AuthzContextInfoGroupsSids, cbSize, &cbSize, pTokenGroups))
    {    
        printf_s("AuthzGetInformationFromContext failed with %d\n", GetLastError);
        free(pTokenGroups);
        return FALSE;
    }

    //Enumerate and display the group SIDs.
    for (i=pTokenGroups->GroupCount-1; i >= 0; --i)
    {
        //Convert a SID to a string.
        if(!ConvertSidToStringSid(
            pTokenGroups->Groups[i].Sid,
            &StringSid
            ))
        {
            LocalFree(StringSid);
            return FALSE;
        }


        wprintf_s(L"%s \n", StringSid);
        
    }

    free(pTokenGroups);

    return TRUE;
}

Ajout de SID à un contexte client

Mise en cache des vérifications d’accès

Vérification de l’accès avec l’API Authz

Fonctionnement d’AccessCheck

Initialisation d’un contexte client

Langage de définition de descripteur de sécurité pour les aces conditionnels