概括VB.NET ReadProcessMemory問題解決方法
學(xué)習(xí)VB.NET時,你可能會遇到VB.NET ReadProcessMemory問題,這里將介紹VB.NET ReadProcessMemory問題的解決方法,在這里拿出來和大家分享一下。最近學(xué)校上VB.NET的課,VB以前學(xué)過一點點,只會看不會寫,不過沒有辦法,學(xué)校開的,所以幾個人就組了個小組,寫一個VB.NET下的殺毒軟件,要用到VB.NET ReadProcessMemory來讀取其它進程的內(nèi)存,可以怎么調(diào)用也不行,goole和baidu找了N個小時。提這個問題的人倒是一大堆,可以是沒有人解決過,但是其中也給我一些其實,后來在好友freecat的幫助下,找到了問題的所在,主要就是VB.NET ReadProcessMemory聲明的問題,我們應(yīng)該這樣聲明
- Public Declare Function ReadProcessMemory Lib "kernel32"
(ByVal hProcess As Integer, ByVal lpBaseAddress As Integer,
ByVal lpBuffer() As Byte, ByVal nSize As Integer,
ByRef lpNumberOfBytesWritten As Integer) As Integer
主要是其中的,ByVal lpBaseAddress As Integer, ByVal lpBuffer() As Byte,要設(shè)為byval而不是byref,這樣調(diào)用就可以得到返回值了。
- Private Declare Function OpenProcess Lib "kernel32.dll" _
- (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer,
ByVal dwProcessId As Integer) As Integer- Public Declare Function ReadProcessMemory Lib "kernel32"
(ByVal hProcess As Integer, ByVal lpBaseAddress As Integer,
ByVal lpBuffer() As Byte, ByVal nSize As Integer,
ByRef lpNumberOfBytesWritten As Integer) As Integer- Private Const PROCESS_VM_READ As Long = &H10
- Dim ph As Integer
- Dim i As Integer
- Dim h As Integer
- Dim buffer(20) As Byte
- Dim bytesRead As Integer
- '獲得進程
- ph = OpenProcess(PROCESS_ALL_ACCESS, False, 1832)
- If ph Then
- MessageBox.Show("true")
- h = ReadProcessMemory(ph, &H403000, buffer, buffer.Length, bytesRead)
- For i = 0 To buffer.Length - 1
- TempMem += buffer(i).ToString
- Next
- Else
- MessageBox.Show("false")
- End If
【編輯推薦】