SHEvaluateSystemCommandTemplate 函数 (shellapi.h)
强制对 调用 CreateProcess 或 ShellExecute 中使用的参数进行严格验证。
语法
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 和父进程目录。
在对命令进行硬编码时使用此函数。
ShellExecute 在处理来自 HKEY_CLASSES_ROOT 的文件关联时使用此函数。 此函数的用途是减少 CreateProcess 命令行攻击。 它不用于处理用户输入,如果用于该目的,可能会生成意外的故障。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
目标平台 | Windows |
标头 | shellapi.h |
DLL | Shell32.dll |
API 集 | ext-ms-win-shell-shell32-l1-2-2 (在 Windows 10 版本 10.0.14393 中引入) |