Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

ReadProcessMemory(Problema)

Estas en el tema de ReadProcessMemory(Problema) en el foro de Visual Basic clásico en Foros del Web. Antes que nada hola a todos soy nuevo Tengo un problema estoy haciendo un programa que extrae información de la memoria de un proceso con ...
  #1 (permalink)  
Antiguo 06/02/2009, 14:29
Avatar de Keyenight  
Fecha de Ingreso: febrero-2009
Ubicación: En la PC usando VB
Mensajes: 42
Antigüedad: 15 años, 3 meses
Puntos: 0
Pregunta ReadProcessMemory(Problema)

Antes que nada hola a todos soy nuevo
Tengo un problema estoy haciendo un programa que extrae información de la memoria de un proceso con el Api de Windows (ReadProcessMemory) pero me dice que no tengo permisos para escribir en la memoria aqui está el codigo:

Las funciones API que use:
Código:
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, ByVal 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 Object, ByVal lpBuffer As Object, 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 WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Object, ByVal lpBuffer As Object, ByVal nSize As Long, ByVal lpNumberOfBytesWritten As Long) As Long
Está es la funcion que hice para leer la información
Código:
    Private Function Memory(ByVal hwnd As Long, ByVal Address As Long, ByVal Value As Byte, ByVal Process As Integer)
        Dim pid As Long
        Dim phandle As Long
        GetWindowThreadProcessId(hwnd, pid)
        phandle = OpenProcess(&H1F0FFF, False, pid)
        If Process = 1 Then ReadProcessMemory(phandle, Address, Value, 1, 0&)
        If Process = 2 Then WriteProcessMemory(phandle, Address, Value, 1, 0&)
        MsgBox(Err.LastDllError)
        CloseHandle(phandle)
        Memory = Value
    End Function
Y está la utilización de dicha función
Código:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim hwnd As Long
        Dim lngExp As Long 

        hwnd = FindWindow(vbNullString, "Tibia ")

        If (hwnd = 0) Then
            MsgBox("No se encuentra la ventana!")
            Exit Sub
        End If

        lngExp = Memory(hwnd, &H4903D0, 4, 1)

        MyMsgBox(lngExp)

    End Sub
Gracias de antemano
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:45.