ReadProcessMemory函数运行正确,却得不到内存数据
//获取窗口句柄
HWND gameh=::FindWindow(NULL,gameCaption);
//获取窗口进程ID
DWORD processid;
::GetWindowThreadProcessId(gameh,&processid);
//打开指定进程
HANDLE processH=::OpenProcess(PROCESS_ALL_ACCESS,true,processid);
//读指定进程 内存数据
DWORD byread;
LPCVOID pbase=(LPCVOID)0x00B797B8;
LPVOID nbuffer=(LPVOID)&m_num;;
if(!::ReadProcessMemory(processH,pbase,nbuffer,4,&byread))
{
this->errormsg=GetLastError();
UpdateData(false);
}
else
{
UpdateData(false); //更新变量的值到 编辑框
}
调试时m_num没有接受到数据,为0,不知为何?
[解决办法]
这是我写的内存读取:
先在OnInitDialog()里放一个计时器:
::SetTimer(m_hWnd,1,1000,NULL);
然后提权:
void EnableDebugPriv() { HANDLE hToken; LUID sedebugnameValue; TOKEN_PRIVILEGES tkp; OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken); LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue); tkp.PrivilegeCount = 1; tkp.Privileges[0].Luid = sedebugnameValue; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, false, &tkp, sizeof tkp, NULL, NULL); CloseHandle(hToken); }