检查社区对MSDN ReadProcessMemory页面的评论,引用:
W7不会运行读取进程内存您可能需要检查当前进程令牌的“ SE_DEBUG_NAME”访问权限。如果未启用。启用它。当然,这必须以管理员身份完成。
还要完全声明返回类型并使用
use_last_error参数,该参数
ctypes将
GetLastError()在调用后直接在内部缓存该值。否则,可能不正确。如果您使用的是64位系统,则SIZE_T和指针是64位值,因此ctypes需要知道用于正确设置调用堆栈的类型。
...from ctypes import wintypes...rPM = ctypes.WinDLL('kernel32',use_last_error=True).ReadProcessMemoryrPM.argtypes = [wintypes.HANDLE,wintypes.LPCVOID,wintypes.LPVOID,ctypes.c_size_t,ctypes.POINTER(ctypes.c_size_t)]rPM.restype = wintypes.BOOLwPM = ctypes.WinDLL('kernel32',use_last_error=True).WriteProcessMemorywPM.argtypes = [wintypes.HANDLE,wintypes.LPVOID,wintypes.LPCVOID,ctypes.c_size_t,ctypes.POINTER(ctypes.c_size_t)]wPM.restype = wintypes.BOOLADDRESS1 = 0x00E97074ADDRESS2 = ctypes.create_string_buffer(64)bytes_read = ctypes.c_size_t()print(rPM(PROCESS,ADDRESS1,ADDRESS2,64,ctypes.byref(bytes_read)))print(ctypes.get_last_error())
同样,FYI,即使使用所有修复程序,我也得到相同的错误值,但是我没有遇到启用问题
SE_DEBUG_NAME。
解决了
以下是问题所在:
PROCESS = win32api.OpenProcess(PROCESS_ALL_ACCESS,0,PID).handle
win32api.OpenProcess返回一个
PyHANDLE被销毁的临时文件, 并 在检索 到句柄 之后 关闭该句柄 。
解决方案是使用:
PROCESS = win32api.OpenProcess(PROCESS_ALL_ACCESS,0,PID)...rPM(PROCESS.handle,ADDRESS1,ADDRESS2,64,0)
PROCESS然后握住该
PyHANDLE对象,并且手柄保持有效。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)