SeFilterToken 函数 (ntifs.h)

SeFilterToken 例程创建一个新的访问令牌,该令牌是现有访问令牌的受限版本。

语法

NTSTATUS SeFilterToken(
  [in]           PACCESS_TOKEN     ExistingToken,
  [in]           ULONG             Flags,
  [in, optional] PTOKEN_GROUPS     SidsToDisable,
  [in, optional] PTOKEN_PRIVILEGES PrivilegesToDelete,
  [in, optional] PTOKEN_GROUPS     RestrictedSids,
                 PACCESS_TOKEN     *FilteredToken
);

参数

[in] ExistingToken

指向主令牌或模拟令牌的指针。 令牌也可以是受限令牌。 此令牌必须已打开才能TOKEN_DUPLICATE访问。 可以通过调用 ObReferenceObjectByHandle从现有令牌句柄获取此指针,并将TOKEN_DUPLICATE指定为 DesiredAccess 类型。

[in] Flags

指定其他特权选项。 此参数可以是零,也可以是以下值的组合。

价值 意义
DISABLE_MAX_PRIVILEGE 禁用新令牌中的所有特权,SE_CHANGE_NOTIFY_PRIVILEGE除外。 如果指定了此值,则忽略 PrivilegesToDelete 参数。
SANDBOX_INERT 将TOKEN_SANDBOX_INERT标志存储在令牌中。

[in, optional] SidsToDisable

指向TOKEN_GROUPS结构的指针,该结构包含一组SID_AND_ATTRIBUTES结构,这些结构指定受限令牌中的仅拒绝 SID。 系统使用仅拒绝 SID 拒绝访问安全对象。 缺少仅拒绝 SID 不允许访问。

禁用 SID 会打开 SE_GROUP_USE_FOR_DENY_ONLY,关闭 SE_GROUP_ENABLED 和SE_GROUP_ENABLED_BY_DEFAULT。 将忽略所有其他属性。

仅拒绝属性适用于现有令牌的 SID 的任何组合,包括具有SE_GROUP_MANDATORY属性的用户 SID 和组 SID。 若要获取与现有令牌关联的 SID,请使用 TokenUser 和 TokenGroups 标志调用 SeQueryInformationTokenSeFilterToken 忽略在现有令牌中未找到的数组中的任何 SID。

SeFilterToken 忽略SID_AND_ATTRIBUTES结构 属性。

此参数是可选的,可以是 NULL。

[in, optional] PrivilegesToDelete

指向包含LUID_AND_ATTRIBUTES结构的数组的TOKEN_PRIVILEGES结构的指针,该数组指定要在受限令牌中删除的权限。

若要获取现有令牌持有的权限,请使用 TokenPrivileges 标志调用 SeQueryInformationTokenSeFilterToken 忽略现有令牌未持有的数组中的任何特权。

SeFilterToken 忽略LUID_AND_ATTRIBUTES结构 属性。

此参数是可选的,可以是 NULL。

[in, optional] RestrictedSids

指向TOKEN_GROUPS结构的指针,该结构包含一组SID_AND_ATTRIBUTES结构,这些结构指定了限制新令牌的 SID 的列表。 如果现有令牌是受限令牌,则限制新令牌的 SID 列表是此数组的交集,以及限制现有令牌的 SID 的列表。

属性 SID_AND_ATTRIBUTES结构的成员必须为零。 始终启用限制 SID 进行访问检查。

此参数是可选的,可以是 NULL。

FilteredToken

指向接收新受限令牌地址的调用方分配的变量的指针。 新令牌与现有令牌的类型、主令牌或模拟类型相同。

返回值

如果一个或多个参数值无效,SeFilterToken 返回STATUS_INVALID_PARAMETER。 (如果目标令牌不是模拟令牌,则返回此值。否则,SeFilterToken 返回STATUS_SUCCESS。

言论

SeFilterToken 可以通过以下方式限制令牌:

  • 将“仅拒绝”属性应用于令牌中的 SID,以便它们不能用于访问受保护的对象。 有关仅拒绝属性的详细信息,请参阅 Microsoft Windows SDK 文档中的访问令牌中的 SID 属性。

  • 从令牌中删除特权。

  • 指定限制 SID 的列表,系统在检查令牌对安全对象的访问权限时使用。 系统执行两次访问检查:一个使用令牌已启用的 SID,另一个使用限制 SID 的列表。 仅当两个访问检查都允许请求的访问权限时,才授予访问权限。

受限令牌可与 SeCreateClientSecuritySeImpersonateClientEx 一起使用,以创建具有受限访问权限和权限的进程。

有关安全和访问控制的详细信息,请参阅适用于驱动程序开发人员 Windows 安全模型,以及有关 Windows SDK 中这些主题的文档。

不再需要在 NewToken 中返回的令牌时,请通过调用 ObDereferenceObject来释放它。

要求

要求 价值
最低支持的客户端 Windows XP
目标平台 普遍
标头 ntifs.h (include Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < DISPATCH_LEVEL

另请参阅

LUID_AND_ATTRIBUTES

ObDereferenceObject

ObReferenceObjectByHandle

SID

SID_AND_ATTRIBUTES

SeCreateClientSecurity

SeImpersonateClientEx

SeQueryInformationToken

SeTokenIsRestricted

TOKEN_GROUPS

TOKEN_PRIVILEGES