O exemplo descrito neste artigo é uma API para VB ler memória, threads e identificadores. É de certa ajuda para a programação VB que envolve as operações subjacentes do sistema. Esta API pode obter o ID do thread, a memória de gravação, incluindo o identificador do processo, o endereço da área de memória ByVal, os dados, o comprimento total, o comprimento concluído e o processo de leitura, incluindo o identificador do processo, o endereço da área de memória ByVal e o local de armazenamento dos dados lidos. O comprimento a ser lido, o comprimento que foi lido, alocação de memória (identificador do processo, endereço [basta colocar um 0 parece ser suficiente], comprimento, permissão 1 [MEM_COMMIT], permissão 2 [PAGE_READWRITE]) retorno: o memória alocada inicia endereço inicial e outras funções.
O código de implementação específico é o seguinte:
Atributo VB_Name = "API"Opção 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 Função 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) Função de declaração pública GetWindowThreadProcessId Lib "User32.DLL" (ByVal hwnd As Long, ProcessId As Long) As Long' Obtém o ID do thread (identificador, ID do thread retornado) Função de declaração pública OpenProcess Lib "Kernel32.DLL" (permissão de operação ByVal As Long, identificador de herança ByVal As Long , ByVal Thread ID As Long) As LongPublic Declare Function ReadProcessMemory Lib "Kernel32.DLL" (ByVal Identificador do processo As Long, ByVal Localização da memória As Long, Buffer As Any, ByVal Length As Long, lpNumberOfBytesWritten As Long) As Long'Read processo (identificador do processo, endereço da área de memória ByVal, local de armazenamento de dados de leitura, para ler O comprimento obtido, o comprimento que foi lido [0]) Função de declaração pública WriteProcessMemory Lib "Kernel32.DLL" (identificador do processo ByVal As Long, localização da memória As Any, Buffer As Any, ByVal Length As Long, lpNumberOfBytesWritten As Long) As Long'Write memória (identificador do processo, endereço da área de memória ByVal, dados, comprimento total, comprimento concluído [0]) Função de declaração pública CloseHandle Lib "Kernel32.DLL" (ByVal identificador de processo As Long) As Long 'Release (process handle)' causará um erro se não for liberado 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&'---------Variable ConversionAPIPublic Declare Sub MOV Lib "Kernel32.DLL" Alias "RtlMoveMemory" (Variável 1 como qualquer, variável 2 como qualquer, comprimento ByVal como longo)'--------- Liberação de alocação de proteção de memória Função de declaração pública VPE Lib "Kernel32.DLL" Alias " VirtualProtectEx" (processo ByVal identificador As Long, Endereço As Any, ByVal Length As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As LongPublic Declarar função VAE Lib "Kernel32.DLL" Alias "VirtualAllocEx" (identificador do processo ByVal As Long, endereço ByVal As Long, comprimento ByVal As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Alocação de memória longa (manipulador de processo, endereço [basta inserir 0, parece ser suficiente], comprimento, permissão 1 [MEM_COMMIT], permissão 2 [PAGE_READWRITE]) retorna: o endereço inicial da memória alocada Função de declaração pública VFE Lib "Kernel32 .DLL" Alias "VirtualFreeEx" (processo ByVal identificador As Long, endereço ByVal As Long, comprimento ByVal As Long, tipo de liberação ByVal As Long) As LongPublic Const MEM_COMMIT = &H1000Public Const PAGE_READWRITE = &H4Public Const STILL_ACTIVE = &H103&Public Const INFINITE = &HFFFF'---------Obter localização da função do módulo APIPublic Declare Function GetModuleHandle Lib "Kernel32.DLL" Alias "GetModuleHandleA" (ByVal ModuleName As String)As LongPublic Declarar função LoadLibrary Lib "Kernel32.DLL" Alias "LoadLibraryA" (ByVal ModuleName como string) As LongPublic Declarar função GetProcAddress Lib "Kernel32.DLL" (ByVal hModule As Long, ByVal ProcName As String) As LongPublic Declarar função CreateRemoteThread Lib " Kernel32. DLL" (identificador do processo ByVal como Long, lpThreadAttributes As Any, 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