5

コマンドラインパラメーターを使用して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);
4

1 に答える 1

11

2番目のパラメーターのtoCreateProcessAsUserNULLである場合、モジュール名は3番目のパラメーターの最初の空白で区切られたトークンである必要があります。

2番目のパラメータがCreateProcessAsUserでない場合NULLは、実行可能ファイルとして実行されます。この場合、3番目のパラメータは次のいずれかになります。

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(2番目のパラメータからCreateProcessAsUser)になります。ただし、呼び出されたプロセスは、コマンドライン引数がどのように入力されるかを認識している必要があります。

b)を使用する場合は、2番目のパラメーターをCreateProcessAsUserとして渡すオプションもありますNULL

于 2012-12-22T08:31:24.790 に答える