GetLastError这个函数要如何用啊,加在哪里啊,你能在我的程序上做一个例子吗

解决方案 »

  1.   

    if (0 == WriteProcessMemory(...))
    {
        char  szBuffer[80];
        sprintf(szBuffer, "%d", GetLastError());
        MessageBox(NULL, szBuffer, "Error Code", MB_ICONERROR);
    }
      

  2.   

    DWORD           hProcId;   
    GetWindowThreadProcessId(HWND0,&hProcId);       
    HANDLE       nOK       =       OpenProcess(PROCESS_ALL_ACCESS   ¦PROCESS_TERMINATE   ¦PROCESS_VM_OPERATION   ¦PROCESS_VM_READ   ¦       
    PROCESS_VM_WRITE,1,hProcId);   
    ReadProcessMemory(nOK,(LPCVOID)(0x00834eec),(LPVOID)&PLAY_X0,4,NULL);//这里得到的地图坐标PLAY_X0=100   
    if(WriteProcessMemory(nOK,(LPVOID)(0x00834ee0),&PLAY_X0,4,NULL)==0)
    {
    CString tmp1_111="";
    tmp1_111.Format ("错误:%d",GetLastError());
    MessageBox(HWND0,tmp1_111,"请重新更新游戏或脚本",MB_OKCANCEL);
    }<==我得到的参数是6  
    ReadProcessMemory(nOK,(LPCVOID)(0x00834ee0),(LPVOID)&PLAY_X0,4,NULL);//这里却成了PLAY_X0=0,   
    CloseHandle(nOK); 
      

  3.   

    错误代码6  ERROR_INVALID_HANDLE? 真是奇怪了。另外, 你究竟是要写 0X00834EEC 还是 0X00834EE0?
      

  4.   

    你可以用VirtualQueryEx查一下对方内存是否可写。 如果不可以先用VirtualProtectEx改变一下保护标志再用WriteProcessMemory写。
    另外最好先检查一下你进程中的相关API是否被hook了, 如果是的话可以先从文件中恢复原始值再调用。 不过如果对方使用ring0驱动保护的话就比较麻烦了。
      

  5.   

    我每次在windows(admin权限下)都能写成功(不包括驱动程序的内存地址),不知道楼主是不是在linux上面没有写成功?