查询客户端上下文

应用程序可以调用 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;
}

将 SID 添加到客户端上下文

缓存访问检查

使用 Authz API 检查访问

AccessCheck 的工作原理

初始化客户端上下文

条件 ACE 的安全描述符定义语言