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 标志调用 SeQueryInformationToken。 SeFilterToken 忽略在现有令牌中未找到的数组中的任何 SID。
SeFilterToken 忽略SID_AND_ATTRIBUTES结构 属性。
此参数是可选的,可以是 NULL。
[in, optional] PrivilegesToDelete
指向包含LUID_AND_ATTRIBUTES结构的数组的TOKEN_PRIVILEGES结构的指针,该数组指定要在受限令牌中删除的权限。
若要获取现有令牌持有的权限,请使用 TokenPrivileges 标志调用 SeQueryInformationToken。 SeFilterToken 忽略现有令牌未持有的数组中的任何特权。
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 的列表。 仅当两个访问检查都允许请求的访问权限时,才授予访问权限。
受限令牌可与 SeCreateClientSecurity 和 SeImpersonateClientEx 一起使用,以创建具有受限访问权限和权限的进程。
有关安全和访问控制的详细信息,请参阅适用于驱动程序开发人员 Windows 安全模型,以及有关 Windows SDK 中这些主题的文档。
不再需要在 NewToken 中返回的令牌时,请通过调用 ObDereferenceObject来释放它。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP |
目标平台 | 普遍 |
标头 | ntifs.h (include Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | < DISPATCH_LEVEL |