使用 ReadProcessMemory API 的 VB.NET

问题描述

我正在尝试在 VB.NET 中使用基本的 Windows API 函数我有以下代码

    Imports System.Runtime.InteropServices

Public Class testClass
    Declare Function CreateProcessA Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String,ByVal lpCommandLine As String,ByVal lpProcessAttributes As IntPtr,ByVal lpThreadAttributes As IntPtr,<MarshalAs(UnmanagedType.Bool)> ByVal bInheritHandles As Boolean,ByVal dwCreationFlags As Integer,ByVal lpEnvironment As IntPtr,ByVal lpCurrentDirectory As String,ByVal lpStartupInfo As Byte(),ByVal lpProcessinformation As IntPtr()) As <MarshalAs(UnmanagedType.Bool)> Boolean
    Declare Function Getthreadcontext Lib "kernel32" Alias "Getthreadcontext" (ByVal hThread As IntPtr,ByVal lpContext As UInteger()) As <MarshalAs(UnmanagedType.Bool)> Boolean
    Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As IntPtr,ByVal lpBaseAddress As IntPtr,ByRef lpBuffer As IntPtr,ByVal nSize As Integer,ByRef lpNumberOfBytesRead As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean

    Public Sub test()
        Dim locProcess As String = "C:\Windows\notepad.exe"
        Dim iPtr1 As IntPtr = IntPtr.Zero
        Dim startInfo As Byte() = New Byte(67) {}
        Dim procInfo As IntPtr() = New IntPtr(3) {}

        Dim cpResult = CreateProcessA(locProcess,vbNullString,iPtr1,False,nothing,startInfo,procInfo)

        Dim pContext As UInteger() = New UInteger(178) {}
        pContext(0) = &H10002

        If Getthreadcontext(procInfo(1),pContext) Then
            Dim pAddress As New IntPtr(pContext(&H29) + 8L)
            Dim pSize As New IntPtr(4)
            Dim bAddress As IntPtr = IntPtr.Zero
            Dim iPtr2 As IntPtr = IntPtr.Zero

            If ReadProcessMemory(procInfo(0),pAddress,bAddress,CInt(pSize),iPtr2) <> 0 Then
                MessageBox.Show("Success!")
            Else
                MessageBox.Show("ReadProcessMemory Error code is :" & Err.LastDllError)
            End If

        Else
            MessageBox.Show("Getthreadcontext Error code is :" & Err.LastDllError)
        End If


    End Sub
End Class


Public Class Form1
    Private Sub Button3_Click(sender As Object,e As EventArgs) Handles Button3.Click
            Dim tc As New testClass
            tc.test()
    End Sub

End Class

我在 ReadProcessMemory 上遇到错误代码结果

"ReadProcessMemory Error code is : 299"

我一直在努力寻找问题,因为直接处理 Windows DLL 时错误可能很模糊。对这个问题的任何帮助将不胜感激。或者,是否有另一种正确调试的解决方案(LastDllError 除外)可以为我指明解决此问题的正确方向。谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)