本文介绍了CreateProcess() 函数无法运行.错误 无法写入内存的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是 Windows 8 x64 Enterprise,VS2010.

I'm using Windows 8 x64 Enterprise, VS2010.

我在 CreateProcess() 上遇到了一些问题.

I've some problem on CreateProcess().

我创建了一个 Win32 控制台项目来执行我的应用程序 _backround_manipulator.exe.

I've created a Win32 Console project to execute _backround_manipulator.exe, my application.

在这里实现.

#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <stdio.h>

DWORD RunManipulator(TCHAR* tszProcessPath);

int _tmain(int argc, _TCHAR* argv[])
{
    _tprintf(_T("---Manipulator will start...---\n"));
    if(0x08 == RunManipulator(_T("_background_manipulator.exe")))
        _tprintf(_T("---Manipulator Started.---\n"));
    else
        _tprintf(_T("---Manipulator cannot run.---\n"));
    return 0;
}

DWORD RunManipulator(TCHAR* tszProcessPath)
{
    STARTUPINFO _v_startupinfo;
    PROCESS_INFORMATION _v_processinfo;
    ZeroMemory(&_v_startupinfo, sizeof(STARTUPINFO));
    ZeroMemory(&_v_processinfo, sizeof(PROCESS_INFORMATION));

    _v_startupinfo.cb = sizeof(STARTUPINFO);

    if (!CreateProcess(NULL, tszProcessPath, NULL, NULL, FALSE, 0, NULL, NULL, &_v_startupinfo, &_v_processinfo));
    {
        return 0x12;
    }

    return 0x08;
}

但不能在debug模式下传递CreateProcess(NULL, tszProcesPath,/*...*/)函数.

But cannot pass CreateProcess(NULL, tszProcesPath, /*...*/) function on debug mode.

错误像这样;

我的代码有什么问题?是因为我创建了控制台项目吗?

What's wrong on my code? Is it because I created the Console Project?

推荐答案

if 查找 CreateProcess

BOOL WINAPI CreateProcess(
  _In_opt_    LPCTSTR               lpApplicationName,
  _Inout_opt_ LPTSTR                lpCommandLine,
  ...

我们可以注意到 lpCommandLine 定义为 In-out 参数而不定义为常量指针(与 lpApplicationName 比较,后者是常量指针 LPCTSTR)

we can note that lpCommandLine defined as In-out parameter and defined not as const pointer ( compare with lpApplicationName which is const pointer LPCTSTR)

和:

这个函数的Unicode版本,CreateProcessW,可以修改这个字符串的内容.因此,该参数不能是指向只读内存的指针(例如 const 变量或文字字符串).如果此参数是一个常量字符串,该函数可能会导致访问冲突.

但您完全将文字字符串 _T("_background_manipulator.exe") 作为 lpCommandLine 传递.并得到异常结果 - 无法写入内存

but you exactly pass literal string _T("_background_manipulator.exe") as lpCommandLine. and got excepted result - memory could not be written

这篇关于CreateProcess() 函数无法运行.错误 无法写入内存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-18 05:47