SaferComputeTokenFromLevel 函数 (winsafer.h)

SaferComputeTokenFromLevel 函数使用SAFER_LEVEL_HANDLE指定的限制来限制令牌。

语法

BOOL SaferComputeTokenFromLevel(
  [in]                SAFER_LEVEL_HANDLE LevelHandle,
  [in, optional]      HANDLE             InAccessToken,
  [out]               PHANDLE            OutAccessToken,
  [in]                DWORD              dwFlags,
  [in, out, optional] LPVOID             lpReserved
);

参数

[in] LevelHandle

包含 要对输入令牌施加的限制的SAFER_LEVEL_HANDLE。 不要将 LevelId 为 SAFER_LEVELID_FULLYTRUSTEDSAFER_LEVELID_DISALLOWED 的句柄传递给此函数。 这是因为 SAFER_LEVELID_FULLYTRUSTED 不受限制, SAFER_LEVELID_DISALLOWED 不包含令牌。

[in, optional] InAccessToken

要限制的令牌。 如果此参数为 NULL,将使用当前线程的标记。 如果当前线程不包含令牌,则使用当前进程的标记。

[out] OutAccessToken

生成的受限令牌。

[in] dwFlags

指定方法的行为。 该值可以是 NULL ,或者通过使用按位 OR 运算组合的以下一个或多个值。

含义
SAFER_TOKEN_NULL_IF_EQUAL
1 (0x1)
如果 OutAccessToken 参数没有比 InAccessToken 参数更严格, 则 OutAccessToken 参数返回 NULL
SAFER_TOKEN_COMPARE_ONLY
2 (0x2)
InAccessToken 参数指定的标记与应用 LevelHandle 参数指定的限制时创建的标记进行比较。 未实际创建受限令牌。

输出时, lpReserved 参数的值指定比较结果。

SAFER_TOKEN_MAKE_INERT
4 (0x4)
如果设置了此标志,则系统不会检查 AppLocker 规则或应用软件限制策略。 对于 AppLocker,此标志禁用所有四个规则集合的检查:可执行文件、Windows Installer、脚本和 DLL。

在创建安装程序时设置此标志,该程序必须在安装过程中运行提取的 DLL。

可以使用 GetTokenInformation 查询令牌是否存在此标志。

Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支持 AppLocker。

SAFER_TOKEN_WANT_FLAGS
8 (0x8)
输出时, lpReserved 参数的值指定用于创建受限令牌的标志集。

[in, out, optional] lpReserved

如果设置了 SAFER_TOKEN_COMPARE_ONLY 标志,则此参数在输出时指定令牌比较的结果。 输出值为 LPDWORD。 值为 –1 表示生成的令牌的特权将低于 InAccessToken 参数指定的令牌。

如果设置了 SAFER_TOKEN_WANT_FLAGS 标志,并且未设置 SAFER_TOKEN_COMPARE_ONLY 标志,则此参数是一个 LPDWORD 值,该值指定用于创建受限令牌的标志。

返回值

如果函数成功,则为 TRUE;否则为 FALSE。 有关扩展的信息,请调用 GetLastError

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 winsafer.h
Library Advapi32.lib
DLL Advapi32.dll
API 集 在 Windows 8) 中引入 ext-ms-win-advapi32-safer-l1-1-0 (