Interrogation d’un contexte client

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

Le paramètre InfoClass de la fonction AuthzGetInformationFromContext accepte une valeur de l’énumération de _ _ _ classe d’informations de contexte auth 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 référencées dans une expression conditionnelle ; dans le cas contraire, le terme des expressions conditionnelles qui les référencera sera évalué comme inconnu. Pour plus d’informations sur les expressions conditionnelles, consultez la rubrique langage de définition du descripteur de sécurité pour les ACE conditionnel .

Exemple

L’exemple suivant interroge le contexte client créé dans l’exemple à partir de l' initialisation d’un contexte client pour récupérer la liste des sid des 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 contrôles d’accès

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

Fonctionnement de AccessCheck

Initialisation d’un contexte client

Langage de définition du descripteur de sécurité pour les ACE conditionnelles