Метод CreateProcess заканчивается ошибкой - PullRequest
5 голосов
/ 07 февраля 2012

У меня проблема с моим следующим кодом:

int main(int argc, char **argv) {
  PROCESS_INFORMATION pi;  
  STARTUPINFO si;     

  printf("Process %d reporting for duty\n",GetCurrentProcessId());
  GetStartupInfo(&si);
  CreateProcess(NULL,"notepad.exe", NULL,NULL,FALSE,DETACHED_PROCESS, NULL,NULL, &si, &pi);
  printf("New Process ID: %d\n",pi.dwProcessId);
  return(0);
}        

И во время выполнения я запустил это во время отладки, и он вылетает в методе CreateProcess с таким сообщением об ошибке: "Необработанное исключение в 0x7c82f29c в Tests.exe: 0xC0000005: Место записи нарушения прав доступа 0x00415760. " Что это значит ???

1 Ответ

5 голосов
/ 07 февраля 2012

32-битные исполняемые файлы неизменно имеют базовый адрес 0x00400000.Адрес, который не может быть записан, в соответствии с исключением, 0x00415760.Это означает, что ваш код почти наверняка пытается записать в доступную только для чтения часть исполняемого образа.Это происходит, например, при попытке записи в строковые литералы.

Теперь второй параметр CreateProcess должен быть изменяемой памятью (он объявлен как LPTSTR).Но вы передаете строковый литерал.Поместите "notepad.exe" в модифицируемый буфер для решения вашей проблемы.

char CommandLine[] = "notepad.exe";
CreateProcess(NULL, CommandLine, ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...