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());
}
Run Code Online (Sandbox Code Playgroud)
我试过这个功能,但总是返回"无法打开PID(编号)错误代码0".即使只有PROCESS_VM_READ.
当我输出此代码中的内存地址的值
ReadProcessMemory(process, (LPVOID)0x14AC1BC, &value, sizeof(DWORD), NULL);
cout << value << endl;
Run Code Online (Sandbox Code Playgroud)
它返回垃圾值.
OpenProcess NULL失败时返回INVALID_HANDLE_VALUE.您也=应该在使用时使用==.代码应该是
HANDLE process = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, PID);
if (process == NULL)
{
}
Run Code Online (Sandbox Code Playgroud)
process = INVALID_HANDLE_VALUE执行覆盖进程句柄值的赋值,而不是比较。另外如果出现错误OpenProcess也会返回NULL。像这样重写检查:
if(NULL == process)
Run Code Online (Sandbox Code Playgroud)
您错误地为该process变量分配了两次。打电话时一次OpenProcess,写信时再一次
if (process = INVALID_HANDLE_VALUE)
Run Code Online (Sandbox Code Playgroud)
这分配INVALID_HANDLE_VALUE并process测试是否process为非零。情况总是如此,因为INVALID_HANDLE_VALUE是非零的。你犯了一个典型的错误,=当你想使用 时却使用了==。因此,您完全忽略了返回的值OpenProcess。
请注意,OpenProcess通过返回 来指示失败NULL。所以你的代码应该是
if (process == NULL)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
309 次 |
| 最近记录: |