澄清使用c++用命令行参数调用CreateProcessAsUser

Clarification on calling CreateProcessAsUser with command line parameters using C++

本文关键字:参数 调用 CreateProcessAsUser 命令行 c++      更新时间:2023-10-16

我对用命令行参数调用CreateProcessAsUser的正确方法有些困惑。所以在不详细填写其他参数的情况下,有人能确认一下应该这样做吗?(换句话说,我应该把exe文件路径作为第一个命令行参数,还是将其指定为lpApplicationName就足够了?)

LPCTSTR pExePath = L"c:\program files\sub dir\program.exe";
LPCTSTR pCmdLine = L"v="one two"";
TCHAR buff[MAX_PATH];
StringCchCopy(buff, MAX_PATH, _T("""));
StringCbCat(buff, MAX_PATH, pExePath);
StringCbCat(buff, MAX_PATH, _T("" "));
StringCbCat(buff, MAX_PATH, pCmdLine);
CreateProcessAsUser(hToken, pExePath, buff, NULL, NULL, FALSE, dwFlags, NULL, NULL, &si, &pi);

如果CreateProcessAsUser的第二个参数为NULL,则模块名称必须是第三个参数中的第一个以空格分隔的令牌。

如果CreateProcessAsUser的第二个参数不是NULL,则将其作为要执行的可执行文件。在本例中,第三个参数可以是

a) "EXENAME p1 p2"

或者

b) "p1 p2"

如果您选择了a),那么子进程将具有以下内容

argv[0] --> EXENAME

argv[1] --> p1

argv[2] --> p2

如果您选择b),那么子进程将具有

argv[0] --> p1

argv[1] --> p2

无论哪种方式,要执行的进程都是EXENAME (CreateProcessAsUser的第二个参数)。然而,被调用的进程应该知道命令行参数的传入方式。

如果您使用b),您还可以选择将第二个参数传递给CreateProcessAsUser作为NULL