查询客户端上下文
应用程序可以调用 AuthzGetInformationFromContext 函数来查询有关现有客户端上下文的信息。
AuthzGetInformationFromContext 函数的 InfoClass 参数从 AUTHZ_CONTEXT_INFORMATION_CLASS 枚举中获取一个值,该值指定函数查询的信息类型。
如果在条件表达式中引用安全属性变量,则必须在客户端上下文中存在;否则,引用它们的条件表达式术语将计算为未知。 有关条件表达式的详细信息,请参阅 条件 ACE 的安全描述符定义语言 主题。
示例
以下示例查询在初始化客户端上下文示例中创建的 客户端上下文 ,以检索与该客户端上下文关联的组的 SID 列表。
BOOL GetGroupsFromContext(AUTHZ_CLIENT_CONTEXT_HANDLE hClientContext)
{
DWORD cbSize = 0;
PTOKEN_GROUPS pTokenGroups=NULL;
LPTSTR StringSid = NULL;
BOOL bResult = FALSE;
int i = 0;
//Call the AuthzGetInformationFromContext function with a NULL output buffer to get the required buffer size.
AuthzGetInformationFromContext(hClientContext, AuthzContextInfoGroupsSids, 0, &cbSize, NULL);
//Allocate the buffer for the TOKEN_GROUPS structure.
pTokenGroups = (PTOKEN_GROUPS)malloc(cbSize);
if (!pTokenGroups)
return FALSE;
//Get the SIDs of groups associated with the client context.
if(!AuthzGetInformationFromContext(hClientContext, AuthzContextInfoGroupsSids, cbSize, &cbSize, pTokenGroups))
{
printf_s("AuthzGetInformationFromContext failed with %d\n", GetLastError);
free(pTokenGroups);
return FALSE;
}
//Enumerate and display the group SIDs.
for (i=pTokenGroups->GroupCount-1; i >= 0; --i)
{
//Convert a SID to a string.
if(!ConvertSidToStringSid(
pTokenGroups->Groups[i].Sid,
&StringSid
))
{
LocalFree(StringSid);
return FALSE;
}
wprintf_s(L"%s \n", StringSid);
}
free(pTokenGroups);
return TRUE;
}
相关主题