ReadProcessMemory 在vb中不能读取的问题

来源:百度知道 编辑:UC知道 时间:2024/05/10 20:44:04
这是定义
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer() As Byte, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long

这是函数调用
ReadProcessMemory hProcess, ByVal (mi.BaseAddress), aaa, 4, 0&

hProcess是目标进程句柄,肯定没问题,用这个句柄可以将目标进程关闭
ByVal (mi.BaseAddress) 目标基地址
aaa 定义的Byte()数组
Dim aaa() As Byte
ReDim aaa(lngA)

读取结束后用MsgBox aaa(0)说实时错误9 '下标越界'

请朋友们帮忙
到底这个函数怎么使用,分不够再加啊。要累死人了

1 是否有Option Base 1 强制数组下标存在,如果是 aaa(0) 这个错误必出.
2 inga是否有值,如果没成功定义数组大小,同上...
3 如果要按string类型读出,需要使用StrConv(aaa(0), vbUnicode) 语句转化.

4 函数 的 ByVal (mi.BaseAddress) 无地址参数,无法获取内存数据.

==================================
Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
==================================
这个函数从定义的进程中读取内存。这个被读区域必须是可操作的。
hProcess :将要读内存的进程。在win CE中,在适当的权限下,用 OpenProcess 将返回这个进程的handle

lpBaseAddress:指向这个特定进程内存地址的指针。

pBuffer:获取内容的存放缓存空间。

nSize:定义了从特定进程读入数据所需空间大小。

lpNumberOfBytesRead:实际传递到定义的缓存的byte数。

返回值:
如果成功,则返回 非零值,否则为失败。

*******************************************
如果你读取的是4字节的内存内容