この記事で説明されている例は、VB がメモリ、スレッド、ハンドルを読み取るための API であり、システムの基本的な操作を必要とする VB プログラミングに役立ちます。この API は、スレッド ID、書き込みメモリ (プロセス ハンドルを含む)、ByVal メモリ領域アドレス、データ、合計長、完了した長さ、読み取りプロセス (プロセス ハンドルを含む)、ByVal メモリ領域アドレス、および読み取りデータの格納場所を取得できます。読み込む長さ、読み取った長さ、メモリ割り当て(プロセスハンドル、アドレス[0を入れるだけで十分のようです]、長さ、パーミッション1 [MEM_COMMIT]、パーミッション2 [PAGE_READWRITE]) return: 割り当てられたメモリ開始 開始アドレスとその他の機能。
具体的な実装コードは以下のとおりです。
属性 VB_Name = "API"Option ExplicitPublic Declare Function GetDesktopWindow Lib "User32.DLL" () As LongPublic Declare Function FindWindow Lib "User32.DLL" Alias "FindWindowA" (ByVal ClassName As String, ByVal Caption As String) As LongPublic Declare関数 GetWindow Lib "User32.DLL" (ByVal hwnd As Long, ByVal) wCmd As Long) As LongPublic Declare Function GetWindowText Lib "User32.DLL" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As LongPublic Const GW_CHILD = (5)Public Const GW_HWNDNEXT = ( 2) パブリック宣言関数 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 LongPublic Declare Function ReadProcessMemory Lib "Kernel32.DLL" (ByValプロセス ハンドル As Long、ByVal メモリ位置 As Long、Buffer As Any、ByVal Length As Long、lpNumberOfBytesWritten As Long) As Long'Read プロセス (プロセス ハンドル、ByVal メモリ領域アドレス、読み取りデータ格納場所、読み取りに必要な長さ、読み込まれた長さ [0]) Public Declare Function WriteProcessMemory Lib "Kernel32.DLL" (ByVal プロセス ハンドル As Long、メモリ位置 As Any、 Buffer As Any、ByVal Length As Long、lpNumberOfBytesWritten As Long) As Long '書き込みメモリ (プロセスハンドル、ByVal メモリ領域アドレス、データ、合計長、完成長 [0]) Public Declare Function CloseHandle Lib "Kernel32.DLL" (ByVal)プロセス ハンドル As Long) As Long 'Release (プロセス ハンドル)' は解放されないとエラーになります Public Const STANDARD_RIGHTS_REQUIRED = &HF0000Public Const SYNCHRONIZE = &H100000Public Const RRAD_WRITE = &H1F0FFFPublic Const PROCESS_VM_OPERATION = &H8&Public Const Read = &H10&Public Const Write = &H20&'--------変数変換 APIPublic Declare Sub MOV Lib "Kernel32.DLL" Alias "RtlMoveMemory" (Variable 1 As Any, Variable 2 As Any, ByVal Length As Long)'--------メモリ保護割り当てリリース Public Declare Function VPE Lib "Kernel32.DLL" Alias " VirtualProtectEx" (ByVal プロセス ハンドル As Long、Address As Any、ByVal Length As Long、ByVal flNewProtect As Long、lpflOldProtect As Long) As LongPublic関数 VAE Lib "Kernel32.DLL" Alias "VirtualAllocEx" (ByVal プロセス ハンドル As Long、ByVal アドレス As Long、ByVal 長さ As Long、ByVal flAllocationType As Long、ByVal flProtect As Long) を宣言Long' メモリ割り当て (プロセス ハンドル、アドレス [0 をスローするだけで十分のようです]、長さ、権限 1 [MEM_COMMIT]、権限 2 [PAGE_READWRITE]) は次を返します: 割り当てられたメモリの開始アドレス Public Declare Function VFE Lib "Kernel32 DLL" エイリアス "VirtualFreeEx" (ByVal プロセス ハンドル As Long、ByVal アドレス As Long、ByVal 長さ As Long、ByVal リリース タイプ As Long) As LongPublic Const MEM_COMMIT = &H1000Public Const PAGE_READWRITE = &H4Public Const STILL_ACTIVE = &H103&Public Const INFINITE = &HFFFF'--------モジュール関数の場所を取得 APIPublic Declare Function GetModuleHandle Lib "Kernel32.DLL" Alias "GetModuleHandleA" (ByVal ModuleName As String) As LongPublic Declare Function LoadLibrary Lib "Kernel32.DLL" Alias "LoadLibraryA" (ByVal ModuleName As String) As LongPublic Declare Function GetProcAddress Lib "Kernel32.DLL" (ByVal hModule As Long, ByVal ProcName As String) As LongPublic Declare Function CreateRemoteThread Lib " Kernel32.DLL」(ByVal プロセス ハンドルLong、lpThreadAttributes As Long、ByVal dwStackSize As Long、ByVal lpStartAddress As Long、lpParameter As Any、ByVal dwCreationFlags As Long、lpThreadID As Long) As LongPublic Declare Function GetTickCount Lib "kernel32" () As Long