概括VB.NET ReadProcessMemory問(wèn)題解決方法
學(xué)習(xí)VB.NET時(shí),你可能會(huì)遇到VB.NET ReadProcessMemory問(wèn)題,這里將介紹VB.NET ReadProcessMemory問(wèn)題的解決方法,在這里拿出來(lái)和大家分享一下。最近學(xué)校上VB.NET的課,VB以前學(xué)過(guò)一點(diǎn)點(diǎn),只會(huì)看不會(huì)寫(xiě),不過(guò)沒(méi)有辦法,學(xué)校開(kāi)的,所以幾個(gè)人就組了個(gè)小組,寫(xiě)一個(gè)VB.NET下的殺毒軟件,要用到VB.NET ReadProcessMemory來(lái)讀取其它進(jìn)程的內(nèi)存,可以怎么調(diào)用也不行,goole和baidu找了N個(gè)小時(shí)。提這個(gè)問(wèn)題的人倒是一大堆,可以是沒(méi)有人解決過(guò),但是其中也給我一些其實(shí),后來(lái)在好友freecat的幫助下,找到了問(wèn)題的所在,主要就是VB.NET ReadProcessMemory聲明的問(wèn)題,我們應(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
- '獲得進(jìn)程
- 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
【編輯推薦】