我尝试使用 CreateProcessW 创建调试进程,但它一直给我错误 0x2。我检查了错误,真正的错误消息是ERROR_FILE_NOT_FOUND。我已经检查过该文件是否存在,但它仍然给我同样的错误。我正在尝试打开记事本。
#include <Windows.h>
#include <iostream>
int main()
{
const char* debugee_path = "C:\\WINDOWS\\system32\\notepad.exe";
STARTUPINFOW startup_info = {};
startup_info.cb = sizeof(STARTUPINFOW);
PROCESS_INFORMATION process_information = {};
BOOL success = CreateProcessW(
reinterpret_cast<const WCHAR*>(debugee_path),
NULL,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&startup_info,
&process_information
);
if (!success)
{
return 1;
}
return 0;
}
这就是问题:
reinterpret_cast<const WCHAR*>(debugee_path)
。您正在将 ASCII 字符串(每个字符 1 个字节)解释为 wchar 字符串(每个字符 2 个字节),但事实并非如此。
为避免此类错误,请勿使用
reinterpret_cast
。
这应该有效:
const WCHAR* debugee_path = L"C:\\WINDOWS\\system32\\notepad.exe";