Inicializando um contexto de cliente
Um aplicativo deve criar um contexto de cliente antes de poder usar a API Authz para executar verificações de acesso ou auditoria.
Um aplicativo deve chamar a função AuthzInitializeResourceManager para inicializar o gerenciador de recursos. Em seguida, o aplicativo pode chamar uma das várias funções para criar um contexto de cliente. Além disso, se você estiver executando verificações de acesso ou auditoria remotamente, deverá usar a função AuthzInitializeRemoteResourceManager .
Para criar um contexto de cliente com base em um contexto de cliente existente, chame a função AuthzInitializeContextFromAuthzContext .
A função AuthzInitializeContextFromToken cria um novo contexto de cliente usando informações em um token de logon. A função AuthzInitializeContextFromSid cria um novo contexto de cliente usando o SID especificado.
Se possível, chame a função AuthzInitializeContextFromToken em vez de AuthzInitializeContextFromSid. AuthzInitializeContextFromSid tenta recuperar as informações disponíveis em um token de logon em que o cliente realmente fez logon. Um token de logon real fornece mais informações, como o tipo de logon e as propriedades de logon, e reflete o comportamento do pacote de autenticação usado para o logon. O contexto do cliente criado por AuthzInitializeContextFromToken usa um token de logon e o contexto do cliente resultante é mais completo e preciso do que um contexto de cliente criado por AuthzInitializeContextFromSid.
Observação
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 de descritor de segurança para ACEs condicionais .
Exemplo
O exemplo a seguir inicializa o gerenciador de recursos do Authz e chama a função AuthzInitializeContextFromToken para criar um contexto de cliente do token de logon associado ao processo atual.
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;
}
Tópicos relacionados