使用CreateProcess崩溃 处未处理的异常_ 0xC0000005_ 写入位置 0x00415652 时发生访问冲突

⌚Time: 2023-10-01 13:10:18

👨‍💻Author: Jack Ge

问题代码


    if (!CreateProcess(NULL,L"pela.exe",NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))

    {

        return 0;

    }

如果CreateProcess的第二个参数字符串是常量或者是储存在堆中的就会被写保护,崩溃。如果字符串定义到栈或者全局变量就不存在此问题了。

正确的办法


    WCHAR strCmdLine[] = L"pela.exe";

    if (!CreateProcess(NULL,strCmdLine,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))

    {

        return 0;

    }

下面的办法会崩溃


    WCHAR *strCmdLine = L"pela.exe";

    if (!CreateProcess(NULL,strCmdLine,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))

    {

        return 0;

    }