Initialisieren eines Clientkontexts
Eine Anwendung muss einen Clientkontext erstellen, bevor sie die Authz-API verwenden kann, um Zugriffsprüfungen oder -überwachungen durchzuführen.
Eine Anwendung muss die AuthzInitializeResourceManager-Funktion aufrufen, um den Ressourcen-Manager zu initialisieren. Die Anwendung kann dann eine von mehreren Funktionen aufrufen, um einen Clientkontext zu erstellen. Wenn Sie Zugriffsprüfungen oder Remoteüberwachungen durchführen, müssen Sie außerdem die Funktion AuthzInitializeRemoteResourceManager verwenden.
Um einen Clientkontext basierend auf einem vorhandenen Clientkontext zu erstellen, rufen Sie die AuthzInitializeContextFromAuthzContext-Funktion auf.
Die AuthzInitializeContextFromToken-Funktion erstellt mithilfe von Informationen in einem Anmeldetoken einen neuen Clientkontext. Die AuthzInitializeContextFromSid-Funktion erstellt mithilfe der angegebenen SID einen neuen Clientkontext.
Rufen Sie nach Möglichkeit die AuthzInitializeContextFromToken-Funktion anstelle von AuthzInitializeContextFromSid auf. AuthzInitializeContextFromSid versucht, die in einem Anmeldetoken verfügbaren Informationen abzurufen, wenn der Client tatsächlich angemeldet war. Ein tatsächliches Anmeldetoken bietet weitere Informationen, z. B. Anmeldetyp und Anmeldeeigenschaften, und spiegelt das Verhalten des für die Anmeldung verwendeten Authentifizierungspakets wider. Der von AuthzInitializeContextFromToken erstellte Clientkontext verwendet ein Anmeldetoken, und der resultierende Clientkontext ist vollständiger und genauer als ein von AuthzInitializeContextFromSid erstellter Clientkontext.
Hinweis
Sicherheitsattributevariablen müssen im Clientkontext vorhanden sein, wenn sie in einem bedingten Ausdruck erwähnt werden. Andernfalls wird der bedingte Ausdruck, der auf sie verweist, als unbekannt ausgewertet. Weitere Informationen zu bedingten Ausdrücken finden Sie im Thema Security Descriptor Definition Language for Conditional ACEs .
Beispiel
Im folgenden Beispiel wird der Authz-Ressourcen-Manager initialisiert und die AuthzInitializeContextFromToken-Funktion aufgerufen, um einen Clientkontext aus dem Anmeldetoken zu erstellen, das dem aktuellen Prozess zugeordnet ist.
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;
}
Zugehörige Themen