checkTokenMembership 函式 (securitybaseapi.h)
CheckTokenMembership函式會判斷存取權杖中是否啟用指定的安全識別碼 (SID) 。 如果您想要判斷應用程式容器權杖的群組成員資格,您必須使用 CheckTokenMembershipEx 函 式。
語法
BOOL CheckTokenMembership(
[in, optional] HANDLE TokenHandle,
[in] PSID SidToCheck,
[out] PBOOL IsMember
);
參數
[in, optional] TokenHandle
存取權杖的控制碼。 控制碼必須具有權杖TOKEN_QUERY存取權。 權杖必須是 模擬權杖。
如果 TokenHandle 為 Null, CheckTokenMembership 會使用呼叫執行緒的模擬權杖。 如果執行緒未模擬,函式會複製執行緒 的主要權杖 ,以建立 模擬權杖。
[in] SidToCheck
SID結構的指標。 CheckTokenMembership函式會檢查存取權杖的使用者和群組 SID 中是否有此 SID。
[out] IsMember
接收檢查結果之變數的指標。 如果 SID 存在且具有 SE_GROUP_ENABLED 屬性, IsMember 會 傳回 TRUE;否則會傳回 FALSE。
傳回值
如果函式成功,則傳回非零的值。
如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
CheckTokenMembership函式可簡化判斷 SID 是否存在並啟用存取權杖的程式。
即使權杖中有 SID,系統可能不會在存取檢查中使用 SID。 SID 可能會停用或具有 SE_GROUP_USE_FOR_DENY_ONLY 屬性。 系統只會使用已啟用的 SID 在執行存取檢查時授與存取權。 如需詳細資訊,請參閱 存取權杖中的 SID 屬性。
如果 TokenHandle 是受限制的權杖,或者 如果 TokenHandle 是 Null ,而且呼叫執行緒的目前有效權杖是受限制的權杖, CheckTokenMembership 也會檢查 SID 是否存在於限制 SID 清單中。
範例
下列範例顯示檢查系統管理員本機群組中成員資格的權杖。
BOOL IsUserAdmin(VOID)
/*++
Routine Description: This routine returns TRUE if the caller's
process is a member of the Administrators local group. Caller is NOT
expected to be impersonating anyone and is expected to be able to
open its own process and process token.
Arguments: None.
Return Value:
TRUE - Caller has Administrators local group.
FALSE - Caller does not have Administrators local group. --
*/
{
BOOL b;
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdministratorsGroup;
b = AllocateAndInitializeSid(
&NtAuthority,
2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
&AdministratorsGroup );
if(b)
{
if (!CheckTokenMembership( NULL, AdministratorsGroup, &b))
{
b = FALSE;
}
FreeSid(AdministratorsGroup);
}
return(b);
}
需求
最低支援的用戶端 | Windows XP [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | securitybaseapi.h (包含 Windows.h) |
程式庫 | Advapi32.lib |
Dll | Advapi32.dll |