Инициализация контекста клиента
Приложение должно создать контекст клиента, прежде чем он сможет использовать API Authz для выполнения проверок доступа или аудита.
Приложение должно вызвать функцию AuthzInitializeResourceManager, чтобы инициализировать диспетчер ресурсов. Затем приложение может вызвать одну из нескольких функций, чтобы создать контекст клиента. Кроме того, при удаленном выполнении проверок доступа или аудита необходимо использовать функцию AuthzInitializeRemoteResourceManager.
Чтобы создать контекст клиента на основе существующего контекста клиента, вызовите функцию AuthzInitializeContextFromAuthzContext.
Функция AuthzInitializeContextFromToken создает новый контекст клиента, используя информацию из токена входа. Функция AuthzInitializeContextFromSid создает новый контекст клиента, используя заданный SID.
По возможности вызовите функцию 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;
}
Связанные разделы
-
язык определения дескриптора безопасности для условных