Consultando um contexto de cliente
Os aplicativos podem chamar a função AuthzGetInformationFromContext para consultar informações sobre um contexto de cliente existente.
O parâmetro InfoClass da função AuthzGetInformationFromContext usa um valor da enumeração AUTHZ_CONTEXT_INFORMATION_CLASS que especifica qual tipo de informação a função consulta.
As variáveis de atributo de segurança devem estar presentes no contexto do cliente se referenciadas em uma expressão condicional; caso contrário, o termo de expressão condicional referenciando-os será avaliado como desconhecido. Para obter mais informações sobre expressões condicionais, consulte o tópico Linguagem de definição do descritor de segurança para ACEs condicionais .
Exemplo
O exemplo a seguir consulta o contexto do cliente criado no exemplo de Inicializando um contexto de cliente para recuperar a lista de SIDs de grupos associados a esse contexto de cliente.
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;
}
Tópicos relacionados