微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 ReadProcessMemory API 的 VB.NET

如何解决使用 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 举报,一经查实,本站将立刻删除。