Пример, описанный в этой статье, представляет собой API для VB для чтения памяти, потоков и дескрипторов. Он может оказать определенную помощь при программировании VB, включающем базовые операции системы. К нему могут обратиться нуждающиеся читатели. Этот API может получить идентификатор потока, память записи, включая дескриптор процесса, адрес области памяти ByVal, данные, общую длину, завершенную длину и процесс чтения, включая дескриптор процесса, адрес области памяти ByVal и место хранения считанных данных. Длина для чтения, прочитанная длина, выделение памяти (дескриптор процесса, адрес [просто добавьте 0, кажется, достаточно], длина, разрешение 1 [MEM_COMMIT], разрешение 2 [PAGE_READWRITE]) возврат: выделенная память запускает начальный адрес и другие функции.
Конкретный код реализации выглядит следующим образом:
Атрибут VB_Name = "API" Option ExplicitPublic Объявить функцию GetDesktopWindow Lib "User32.DLL" () As LongPublic Объявить функцию FindWindow Lib "User32.DLL" Псевдоним "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 Объявить функцию GetWindowText Lib "User32.DLL" Псевдоним "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) Получить идентификатор потока (дескриптор, возвращенный идентификатор потока) Открытая функция объявления OpenProcess Lib «Kernel32.DLL» (разрешение на операцию ByVal As Long, дескриптор наследования ByVal As Long) , ByVal идентификатор потока до тех пор, пока) As LongPublic Объявите функцию 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, Буфер как любой, длина ByVal равная длина, lpNumberOfBytesWritten такая же длина) Как длинная запись в память (дескриптор процесса, адрес области памяти ByVal, данные, общая длина, завершенная длина [0]) Public Declare Function CloseHandle Lib "Kernel32.DLL" (ByVal) дескриптор процесса As Long) As Long «Выпуск (дескриптор процесса)» вызовет ошибку, если не будет выпущен 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" Псевдоним «RtlMoveMemory» (переменная 1 как любая, переменная 2 как любая, длина ByVal как длинная)'---------выпуск выделения защиты памяти Public Declare Function VPE Lib "Kernel32.DLL" Alias " VirtualProtectEx" (дескриптор процесса ByVal такой же длины, адрес как любой, длина ByVal такой же длины, ByVal flNewProtect такой же длины, lpflOldProtect такой же длины) как LongPublic Объявить функцию VAE Lib "Kernel32.DLL" Псевдоним "VirtualAllocEx" (дескриптор процесса ByVal как длинный, адрес ByVal как длинный, длина ByVal как длинный, ByVal flAllocationType как длинный, ByVal flProtect как длинный) как Выделение длинной памяти (дескриптор процесса, адрес [просто добавьте 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" Псевдоним "GetModuleHandleA" (ByVal ModuleName) Как строка) As LongPublic Объявить функцию LoadLibrary Lib "Kernel32.DLL" Псевдоним "LoadLibraryA" (ByVal ModuleName As String) Как LongPublic Объявить функцию GetProcAddress Lib "Kernel32.DLL" (ByVal hModule As Long, ByVal ProcName As String) Как LongPublic Объявить функцию CreateRemoteThread Lib " Kernel32. DLL» (дескриптор процесса ByVal As Длинный, lpThreadAttributes как любой, ByVal dwStackSize как длинный, ByVal lpStartAddress как длинный, lpParameter как любой, ByVal dwCreationFlags как длинный, lpThreadID как длинный) Как LongPublic Объявить функцию GetTickCount Lib "kernel32" () как длинный