CreateProcess我无法启动进程

时间:2011-09-16 17:06:59

标签: c++ c winapi

我正在使用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 个答案:

答案 0 :(得分:2)

您只填写了startupinfo结构的3个字段。 其余的字段中充满了垃圾,其中一些垃圾很可能会导致问题。

您应该完全初始化结构,明确地将NULL,0和其他“空”值放在您不想指定任何内容的位置。

答案 1 :(得分:1)

尝试将启动信息结构归零。即使您没有设置显式标志,也会使用其中一些成员(例如lpTitle)。

还要注意CreateProcess可能会临时写入应用程序名称字符串,因此您可能希望避免传递只读字符串文字。这只发生在函数的unicode版本中,至少在最新版本的Windows上会发生。