CreateProcess Я не могу начать процесс - PullRequest
0 голосов
/ 16 сентября 2011

Я использую CreateProcess, но не могу запустить процесс. Я использую следующий код, но получаю сообщение об ошибке «Неверный доступ к памяти», но не знаю почему. Есть ли проблемы с моим кодом?

#include <Windows.h>
#include <stdio.h>

//#include "common.h"

int main(void)
{

    DWORD creation_flags = DEBUG_PROCESS;
    STARTUPINFO startupinfo;
    PROCESS_INFORMATION process_information;
    char *path_to_exe = "D:\\dbg\\calc.exe";


    startupinfo.dwFlags     =   0x1;
    startupinfo.wShowWindow =   0x0;


    startupinfo.cb  =   sizeof(startupinfo);

    if(CreateProcess(   path_to_exe,
                        NULL,
                        NULL,
                        NULL,
                        NULL,
                        creation_flags,
                        NULL,
                        NULL,
                        &startupinfo,
                        &process_information)){
        printf("We have successfully launched the process!\n");
        printf("[*] PID: %d\n", process_information.dwProcessId);
    }
    else
        printf("[*] Error: %d.\n", GetLastError());
}

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

Вы заполнили только 3 поля startupinfo Структуры.Остальные поля заполнены мусором, и часть этого мусора, вероятно, приводит к плохим проблемам.

Вы должны полностью инициализировать структуру, явно поместив NULL, 0 и другие «пустые» значения там, где вы не хотитеуказать что-либо.

1 голос
/ 16 сентября 2011

Попробуйте обнулить структуру информации о запуске.Некоторые из его членов (например, lpTitle) используются, даже если вы не установили явный флаг.

Также имейте в виду, что CreateProcess может временно записать в строку имени приложения, так что вы можете избежать передачи чтениятолько строковый литерал.Это происходит только с версией функции в Юникоде, по крайней мере, в последних версиях Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...