本文所述实例为VB读取内存、线程及句柄的一个API,对涉及系统底层操作的VB编程有一定的帮助,需要的读者可以参考使用。这个API可获取到线程ID,写内存,包括进程句柄,ByVal 内存区地址,数据,总长度,已经完成长度,读取进程,包括进程句柄,ByVal 内存区地址,读取来的数据存放处,要读取的长度,已经读取的长度,内存分配(进程柄,地址[好像只要丢个0进去就行],长度,权限1[MEM_COMMIT],权限2[PAGE_READWRITE])返回:分配到的内存起始地址等功能。
具体实现代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
Attribute VB_Name = "API"
Option Explicit
Public Declare Function GetDesktopWindow Lib "User32.DLL" () As Long
Public Declare Function FindWindow Lib "User32.DLL" Alias "FindWindowA" ( ByVal ClassName As String , ByVal Caption As String ) As Long
Public Declare Function GetWindow Lib "User32.DLL" ( ByVal hwnd As Long , ByVal wCmd As Long ) As Long
Public Declare Function GetWindowText Lib "User32.DLL" Alias "GetWindowTextA" ( ByVal hwnd As Long , ByVal lpString As String , ByVal cch As Long ) As Long
Public Const GW_CHILD = (5)
Public Const GW_HWNDNEXT = (2)
Public Declare Function GetWindowThreadProcessId Lib "User32.DLL" ( ByVal hwnd As Long , ProcessId As Long ) As Long
'取找线程ID(句柄,返回的线程ID)
Public Declare Function OpenProcess Lib "Kernel32.DLL" ( ByVal 操作权限 As Long , ByVal 继承句柄 As Long , ByVal 线程ID As Long ) As Long
Public Declare Function ReadProcessMemory Lib "Kernel32.DLL" ( ByVal 进程柄 As Long , ByVal 内存位置 As Long , 缓冲区 As Any, ByVal 长度 As Long , lpNumberOfBytesWritten As Long ) As Long
'读取进程(进程句柄,ByVal 内存区地址,读取来的数据存放处,要读取的长度,已经读取的长度[0])
Public Declare Function WriteProcessMemory Lib "Kernel32.DLL" ( ByVal 进程柄 As Long , 内存位置 As Any, 缓冲区 As Any, ByVal 长度 As Long , lpNumberOfBytesWritten As Long ) As Long
'写内存(进程句柄,ByVal 内存区地址,数据,总长度,已经完成长度[0])
Public Declare Function CloseHandle Lib "Kernel32.DLL" ( ByVal 进程柄 As Long ) As Long
'释放(进程句柄)'不释放会出错
Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
Public Const SYNCHRONIZE = &H100000
Public Const RRAD_WRITE = &H1F0FFF
Public Const PROCESS_VM_OPERATION = &H8&
Public Const 读取 = &H10&
Public Const 写入 = &H20&
'---------变量转换API
Public Declare Sub MOV Lib "Kernel32.DLL" Alias "RtlMoveMemory" (变量1 As Any, 变量2 As Any, ByVal 长度 As Long )
'---------内存保护分配释放
Public Declare Function VPE Lib "Kernel32.DLL" Alias "VirtualProtectEx" ( ByVal 进程柄 As Long , 地址 As Any, ByVal 长度 As Long , ByVal flNewProtect As Long , lpflOldProtect As Long ) As Long
Public Declare Function VAE Lib "Kernel32.DLL" Alias "VirtualAllocEx" ( ByVal 进程柄 As Long , ByVal 地址 As Long , ByVal 长度 As Long , ByVal flAllocationType As Long , ByVal flProtect As Long ) As Long
'内存分配(进程柄,地址[好像只要丢个0进去就行],长度,权限1[MEM_COMMIT],权限2[PAGE_READWRITE])返回:分配到的内存起始地址
Public Declare Function VFE Lib "Kernel32.DLL" Alias "VirtualFreeEx" ( ByVal 进程柄 As Long , ByVal 地址 As Long , ByVal 长度 As Long , ByVal 释放类型 As Long ) As Long
Public Const MEM_COMMIT = &H1000
Public Const PAGE_READWRITE = &H4
Public Const STILL_ACTIVE = &H103&
Public Const INFINITE = &HFFFF
'---------取模块函数位置API
Public Declare Function GetModuleHandle Lib "Kernel32.DLL" Alias "GetModuleHandleA" ( ByVal ModuleName As String ) As Long
Public Declare Function LoadLibrary Lib "Kernel32.DLL" Alias "LoadLibraryA" ( ByVal ModuleName As String ) As Long
Public Declare Function GetProcAddress Lib "Kernel32.DLL" ( ByVal hModule As Long , ByVal ProcName As String ) As Long
Public Declare Function CreateRemoteThread Lib "Kernel32.DLL" ( ByVal 进程柄 As Long , lpThreadAttributes As Any, ByVal dwStackSize As Long , ByVal lpStartAddress As Long , lpParameter As Any, ByVal dwCreationFlags As Long , lpThreadID As Long ) As Long
Public Declare Function GetTickCount Lib "kernel32" () As Long
|