我用WriteProcessMemory函数向一个应用程序的内存中写入了1个16进制数字,可是我在用内存读取函数读取那个地址时读出的值还是原来的数值(可以排除内存读取的数值没有错误,因为使用其他工具查看该内存地址的值和读取的值一样),WriteProcessMemory并没有起作用,但是我的程序和目标程序在运行中也没有出现任何异常或中断。现在贴入代码片断请各位高手解惑。hwd = FindWindow("try", "try")
GetWindowThreadProcessId hwd, pid
hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
If hProcess = 0 Then
    MsgBox "不能打开进程", vbOKOnly, "提示"
    CloseHandle hProcess
    Unload Form1
Else
   ReadProcessMemory hProcess, ByVal &H4E827C, Address1, 1, 0&
   WriteProcessMemory hProcess, ByVal &H4E827C, &H20, 1, 0&
   ReadProcessMemory hProcess, ByVal &H4E827C, Address2, 1, 0&
End If运行结果是Address1=0;Address2=0
WriteProcessMemory hProcess, ByVal &H4E827C, &H20, 1, 0&没有起作用。

解决方案 »

  1.   

    我的博客中写过这个方面的文章,去参考一下吧,建议在NT以上的系统中不要使用PROCESS_ALL_ACCESS权限,使用读写就可以了。
      

  2.   

    您好,我看过您的文章了,可是我还是不理解。如果PROCESS_ALL_ACCESS都无法写入内存那么PROCESS_VM_WRITE就能够写入了么?我仅仅是不明白为什么语句执行了,也没返回任何错误,为什么会没有效果呢?就像没有这条语句一样。真的希望您能给我解答一下。
      

  3.   

    读取其进程的内存,要有SeDebugPrivilege权限
      

  4.   

    CSDN VB里有一个zscor,你看看他的专栏吧!
      

  5.   

    WriteProcessMemory hProcess, ByVal &H4E827C, &H20, 1, 0&
    返回为0则失败,查原因看GetLastError
    ...