HANDLE process = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, PID);
if (process = INVALID_HANDLE_VALUE)
{
printf("Failed to open PID %d, error code %d",
PID, GetLastError());
}
我试过这个功能,但它总是返回“无法打开PID(数字)错误代码0”。即使只有 PROCESS_VM_READ 。
当我输出此代码中的内存地址值
时ReadProcessMemory(process, (LPVOID)0x14AC1BC, &value, sizeof(DWORD), NULL);
cout << value << endl;
它返回垃圾值。
答案 0 :(得分:7)
OpenProcess在失败时返回NULL
而不是INVALID_HANDLE_VALUE
。如果您使用=
,也可以使用==
。代码应该是
HANDLE process = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, PID);
if (process == NULL)
{
}
答案 1 :(得分:3)
process = INVALID_HANDLE_VALUE
执行赋值覆盖进程句柄值,而不是比较。如果出现错误,OpenProcess
将返回NULL
。像这样重写检查:
if(NULL == process)
答案 2 :(得分:3)
您错误地将process
变量分配了两次。一旦你打电话给OpenProcess
然后再打电话
if (process = INVALID_HANDLE_VALUE)
这会将INVALID_HANDLE_VALUE
分配给process
并测试process
是否为非零。情况总是如此,因为INVALID_HANDLE_VALUE
不为零。当您打算使用=
时,您犯了经典错误,即使用==
。因此,您完全忽略OpenProcess
返回的值。
请注意OpenProcess
表示因返回NULL
而失败。所以你的代码应该是
if (process == NULL)