问题描述
我正在尝试在 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 (将#修改为@)