Запрос контекста клиента
Приложения могут вызывать функцию AuthzGetInformationFromContext для запроса сведений о существующем контексте клиента.
Параметр InfoClass функции AuthzGetInformationFromContext принимает значение из перечисления AUTHZ_CONTEXT_INFORMATION_CLASS , указывающее тип информации, запрашиваемой функцией.
Переменные атрибута безопасности должны присутствовать в контексте клиента, если они ссылаются в условном выражении; В противном случае термин условного выражения, ссылающийся на них, будет оцениваться как неизвестный. Дополнительные сведения об условных выражениях см. в разделе Язык определения дескриптора безопасности для условных ACE .
Пример
В следующем примере выполняется запрос к контексту клиента, созданному в примере из раздела Инициализация контекста клиента , чтобы получить список идентификаторов безопасности групп, связанных с этим контекстом клиента.
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;
}
Связанные темы