Condividi tramite


Esecuzione di query su un contesto client

Le applicazioni possono chiamare la funzione AuthzGetInformationFromContext per eseguire query su informazioni su un contesto client esistente.

Il parametro InfoClass della funzione AuthzGetInformationFromContext accetta un valore dall'enumerazione AUTHZ_CONTEXT_INFORMATION_CLASS che specifica il tipo di informazioni sulle query della funzione.

Le variabili dell'attributo di sicurezza devono essere presenti nel contesto client se si fa riferimento a in un'espressione condizionale; in caso contrario, il termine dell'espressione condizionale che li fa riferimento verrà valutato come sconosciuto. Per altre informazioni sulle espressioni condizionali, vedere l'argomento Security Descriptor Definition Language for Conditional ACEs .

Esempio

Nell'esempio seguente viene eseguita una query sul contesto client creato nell'esempio dall'inizializzazione di un contesto client per recuperare l'elenco di SID dei gruppi associati al contesto 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;
}

Aggiunta di SID a un contesto client

Memorizzazione nella cache dei controlli di accesso

Controllo dell'accesso con l'API Authz

Funzionamento di AccessCheck

Inizializzazione di un contesto client

Linguaggio di definizione del descrittore di sicurezza per gli ACL condizionali