Converting Help

Mr60s

Member
Joined
Mar 23, 2003
Messages
16
I found an example on Mentalis.org that reads the process memory, however I have been trying to convert this to VB.net without any success, and I was hoping for some help.

Code:
Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function WriteString Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, ByVal lpNumberOfBytesWritten As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function WriteValue Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, ByVal lpNumberOfBytesWritten As Long) As Long

Private Sub Command1_Click()
    Dim str As String, MyString As String
    MyString = "HELLO"
    in this case I read the memory of my own process
    MsgBox "MyString= " & MyString
    
    str = ReadMemory(Me.hWnd, StrPtr(MyString), LenB(MyString), "BYE!!")
    
    MsgBox "Now, MyString=" & MyString & vbCr & "Old Value= " & str
    
End Sub
Private Function ReadMemory(hWnd As Long, Address As Long, Bytes As Long, Optional strReplaceWith As String) As String
    Runs For Not Unicode Strings (VB-Strings)
    On Error Resume Next
    Dim pId As Long         Used to hold the Process Id
    Dim pHandle As Long     Holds the Process Handle
    Dim bytValue As Long   Stores the value of a byte in the memory
    Dim i As Long
    Dim Text As String
    
     Get the ProcId of the Window
    GetWindowThreadProcessId hWnd, pId

     use the pId to get a handle
    pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pId)
    
    If (pHandle = 0) Then
         MsgBox "Unable to open process!"
         Exit Function
    End If
    If Address = 0 Then Exit Function
    
    For i = 1 To Bytes Step 2
        Read Byte to Byte
       ReadProcessMemory pHandle, Address + i - 1, bytValue, 1, 0&
       value now contains the long value of the byte located in [Address + i - 1] pos.
       ReadMemory is a string...
       
       ReadMemory = ReadMemory & Chr$(bytValue)
    Next
    to write numeric values you can ..(Must) use WriteValue API
    If LenB(strReplaceWith) <> 0 Then
        No Unicode!!
        WriteString pHandle, Address, StrPtr(strReplaceWith), LenB(strReplaceWith), 0&
    End If
    Close the Handle
    CloseHandle pHandle
End Function
 
Back
Top