读书人

ReadProcessMemory函数运作正确却得

发布时间: 2012-08-17 02:08:34 作者: rapoo

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);


然后提权:

C/C++ code
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);  } 

读书人网 >VC/MFC

热点推荐