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