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结构的 Attributes 成员。

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

[in, optional] PrivilegesToDelete

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

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

SeFilterToken 忽略LUID_AND_ATTRIBUTES结构的 Attributes 成员。

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

[in, optional] RestrictedSids

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

SID_AND_ATTRIBUTES结构的 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 (包括 Ntifs.h)
Library 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