createprocess приостановлен по умолчанию

У меня есть эта функция внутри DLL:

int createChildProcess()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
int res;

si.cb=sizeof(STARTUPINFO);

STARTUPINFO* ptr=&si;
if(!CreateProcess(L"c:\\windows\\notepad.exe", NULL, 0, 0, false, CREATE_NEW_CONSOLE, 0, 0, &si, &pi))
{
mylog << "CreateProcess error: " << GetLastError() << std::endl;
res = 0;
}
else
res = pi.dwProcessId;

CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );

return res;
}

И я нашел 2 проблемы:

1) При первом вызове функции всегда возвращать код ошибки 87 (параметр неверен.).

2) Во второй раз функция работает, но создает дочерний процесс в приостановленном состоянии, и загрузка процессора в родительском процессе достигает 100%.

Я тестирую с WinXP SP3, и моя DLL была скомпилирована в 2010 году.

любая помощь?

0

Решение

Вы инициализировали cbSize поле вашего STARTUPINFO структура, но вы оставили остальное неинициализированным. Первый раз звонишь CreateProcess, неинициализированные значения, очевидно, Так неправильно что функция распознает, что они не правы, и сдается. Вы были счастливый.

Во второй раз, когда вы это называете, значения, по-видимому, таковы, что CreateProcess думает, что вы попросили его сделать что-то, что он знает, как это сделать, и это продолжается. Такова природа неопределенного поведения.

Чтобы это исправить, инициализируйте все структуры:

STARTUPINFO si = {sizeof(STARTUPINFO)};
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]