SHEvaluateSystemCommandTemplate 函数 (shellapi.h)

强制严格验证对 CreateProcessShellExecute 调用中使用的参数。

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 中引入)