Инициализация контекста клиента
Приложение должно создать контекст клиента, прежде чем использовать API Authz для выполнения проверок доступа или аудита.
Для инициализации диспетчера ресурсов приложение должно вызвать функцию AuthzInitializeResourceManager . Затем приложение может вызвать одну из нескольких функций для создания контекста клиента. Кроме того, при удаленном выполнении проверок доступа или аудита необходимо использовать функцию AuthzInitializeRemoteResourceManager .
Чтобы создать контекст клиента на основе существующего контекста клиента, вызовите функцию AuthzInitializeContextFromAuthzContext .
Функция AuthzInitializeContextFromToken создает новый контекст клиента, используя сведения в маркере входа. Функция AuthzInitializeContextFromSid создает новый контекст клиента с помощью указанного идентификатора безопасности.
По возможности вызовите функцию AuthzInitializeContextFromToken вместо AuthzInitializeContextFromSid. AuthzInitializeContextFromSid пытается получить сведения, доступные в маркере входа, если клиент фактически вошел в систему. Фактический маркер входа предоставляет дополнительные сведения, такие как тип входа и свойства входа, а также отражает поведение пакета проверки подлинности, используемого для входа. Контекст клиента, созданный AuthzInitializeContextFromToken , использует маркер входа, а полученный контекст клиента является более полным и точным, чем контекст клиента, созданный AuthzInitializeContextFromSid.
Примечание
Переменные атрибута безопасности должны присутствовать в контексте клиента, если они ссылаются в условном выражении; В противном случае термин условного выражения, ссылающийся на них, будет оцениваться как неизвестный. Дополнительные сведения об условных выражениях см. в разделе Язык определения дескриптора безопасности для условных ACE .
Пример
В следующем примере инициализируется диспетчер ресурсов Authz и вызывается функция AuthzInitializeContextFromToken для создания контекста клиента из маркера входа, связанного с текущим процессом.
BOOL AuthzInitFromToken(AUTHZ_CLIENT_CONTEXT_HANDLE *phClientContext)
{
HANDLE hToken = NULL;
LUID Luid = {0, 0};
ULONG uFlags = 0;
//Initialize Resource Manager
if(!AuthzInitializeResourceManager(
AUTHZ_RM_FLAG_NO_AUDIT,
NULL,
NULL,
NULL,
L"My Resource Manager",
&g_hResourceManager
))
{
printf_s("AuthzInitializeResourceManager failed with %d\n", GetLastError);
return FALSE;
}
//Get the current token.
if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken))
{
printf_s("OpenProcessToken failed with %d\n", GetLastError);
return FALSE;
}
//Initialize the client context
if(!AuthzInitializeContextFromToken(
0,
hToken,
g_hResourceManager,
NULL,
Luid,
NULL,
phClientContext
))
{
printf_s("AuthzInitializeContextFromToken failed with %d\n", GetLastError);
return FALSE;
}
printf_s("Initialized client context. \n");
return TRUE;
}
Связанные темы