OpenProcess每次在c ++中都返回NULL?

问题描述 投票:1回答:1

我从一个站点“复制”了一个简单的代码片段,并将其调整为我要破解的游戏。一个没有多人游戏的老游戏,基本上只是为了练习所有这些内存编辑工作。每次我的程序成功返回窗口句柄,但随后均未返回进程句柄时,则失败。这是我的代码:

#include "stdafx.h"
#include <iostream>
#include <Windows.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    long address = 0x47C0F04;
    int newvalue = 200; 
    DWORD newvaluesize = sizeof(newvalue);

    HWND hWnd = FindWindow(0, L"No One Lives Forever");
    HANDLE pHandle; 
    DWORD pid; 

    if(hWnd != 0) { 
        cout << "Found windowx.\n"; 
        GetWindowThreadProcessId(hWnd, &pid);
        pHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); 
    } 
    else {
        cout << "Can't find window\n";
    } 
    if(pHandle !=0) { 
        WriteProcessMemory(pHandle, (LPVOID)address, (LPVOID)newvalue, newvaluesize, 0);    
        cout << "Written to memory successfully\n";
    } 
    else { 
        cout << "Couldn't get handle.\n";
    } 
    CloseHandle(pHandle);
    return 0;
}

该游戏是从2000年开始的,如果我没有记错的话(顺便说一句真棒的游戏),所以我认为它没有任何高级的反黑客盾,因为我也可以在作弊时编辑该地址的值引擎,而且没有任何麻烦。

编辑:我只解释确切发生了什么。它始终打印“找到窗口”,但随后直接打印“无法处理”。我没有收到任何编译器错误(我正在Microsoft Visual C ++ 2010 Express中进行编译)

c++ process handle
1个回答
0
投票

您必须以管理员身份运行程序才能获得具有PROCESS_ALL_ACCESS权限的句柄,这将解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.