If the target process gets elevated, an intermediate (proxy) process is
intermediate process. It end very promptly, thus the handle is signalled. If
elevated process ID, they will be different.
Here is my code. It pops up a message box with text "Wait object". But I
can still see the dialog box of that process.
DWORD createProcess(CString applicationPath, CString parameter) {
STARTUPINFO startupInfo;
ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
PROCESS_INFORMATION processInfo;
ZeroMemory(&processInfo, sizeof(processInfo));
DWORD returnCode = 0;
parameter = applicationPath + _T(' ') + parameter;
if (!CreateProcess(
NULL,
parameter.LockBuffer(),
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&startupInfo,
&processInfo)) {
returnCode = GetLastError();
}
parameter.UnlockBuffer();
switch (WaitForSingleObject(processInfo.hProcess, INFINITE)) {
case WAIT_ABANDONED:
AfxMessageBox(_T("Wait abandoned"));
break;
case WAIT_TIMEOUT:
AfxMessageBox(_T("Wait timeout"));
break;
case WAIT_OBJECT_0:
AfxMessageBox(_T("Wait object"));
break;
case WAIT_FAILED:
AfxMessageBox(_T("Wait failed"));
break;
}
CloseHandle(processInfo.hThread);
CloseHandle(processInfo.hProcess);
// zero if success
// non-zero if fail
return returnCode;
}
"Goran" <goran.pusic@gmail.com> ???
news:2c3cf2af-f739-4b5e-80c7-99176c19ed17@f10g2000vbf.googlegroups.com
???...
On Sep 16, 12:56 pm, "Kilo" <k...@yahoo.com.hk> wrote:
I have called CreateProcess to create a process. Then I called
WaitForSingleObject with INFINITE timeout. However, it does not wait.
It does. Chances are that your code is wrong.