强制严格验证对 CreateProcess 或 ShellExecute 调用中使用的参数。
Syntax
SHSTDAPI SHEvaluateSystemCommandTemplate(
[in] PCWSTR pszCmdTemplate,
[out] PWSTR *ppszApplication,
[out, optional] PWSTR *ppszCommandLine,
[out, optional] PWSTR *ppszParameters
);
参数
[in] pszCmdTemplate
类型:PCWSTR
命令行,其中可能包含或可能不包含参数。 如果参数是替换参数,则应在替换参数之前调用 SHEvaluateSystemCommandTemplate 。
[out] ppszApplication
类型: PWSTR*
指向应用程序已验证路径的指针。 此值应作为对 CreateProcess 的调用中的 lpApplication 参数传递,或作为对 ShellExecute 的调用中的 lpFile 参数传递。 此资源是使用 CoTaskMemAlloc 分配的,当调用 CoTaskMemFree 不再需要资源时,调用方负责释放资源。
[out, optional] ppszCommandLine
类型: PWSTR*
指向在对 CreateProcess 的调用中使用的命令行字符串模板的指针。 应基于此模板指定命令行参数,然后将其作为 lpCommandLine 参数传递给 CreateProcess。 它保证为 PathGetArgs 始终可以正确读取的窗体。 此资源是使用 CoTaskMemAlloc 分配的,当调用 CoTaskMemFree 不再需要资源时,调用方负责释放资源。
如果此函数未与对 CreateProcess 的调用相关联,则此参数可以为 NULL。
[out, optional] ppszParameters
类型: PWSTR*
指向在调用 ShellExecute 时使用的命令行字符串模板的指针。 应基于此模板指定命令行参数,然后将其作为 lpParameters 参数传递给 ShellExecute。 此参数与调用 PathGetArgs 相同。 此资源是使用 CoTaskMemAlloc 分配的,当调用 CoTaskMemFree 不再需要资源时,调用方负责释放资源。
如果此函数未与对 CreateProcess 的调用相关联,则此参数可以为 NULL。
返回值
类型:HRESULT
如果此函数成功,它将返回 S_OK。 否则,它将返回 HRESULT 错误代码。
注解
无论执行上下文如何,调用进程都需要命令模板中的确定性行为时,将使用此函数。 它忽略当前进程状态,例如 %PATH%GetCurrentDirectory 和父进程目录。
当命令硬编码时,将使用此函数。
处理来自HKEY_CLASSES_ROOT的文件关联时 ,ShellExecute 使用此函数。 此函数的目的是减少 CreateProcess 命令行攻击。 它不用于处理用户输入,如果用于该目的可能会产生意外故障。
要求
| Requirement | 价值 |
|---|---|
| 最低支持的客户端 | Windows Vista [仅限桌面应用] |
| 支持的最低服务器 | Windows Server 2008 [仅限桌面应用] |
| 目标平台 | Windows操作系统 |
| Header | shellapi.h |
| Library | OneCore.Lib |
| DLL | Shell32.dll |
| API 集 | ext-ms-win-shell-shell32-l1-2-2 (在 Windows 10 版本 10.0.14393 中引入) |