應用程式必須先建立用戶端內容,才能使用 Authz API 來執行存取檢查或稽核。
應用程式必須呼叫 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;
}
相關主題