SHEvaluateSystemCommandTemplate 函数 (shellapi.h)

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

语法

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