L'exemple décrit dans cet article est une API permettant à VB de lire la mémoire, les threads et les handles. Il est d'une certaine aide pour la programmation VB impliquant les opérations sous-jacentes du système. Les lecteurs dans le besoin peuvent s'y référer. Cette API peut obtenir l'ID du thread, la mémoire d'écriture, y compris le descripteur de processus, l'adresse de la zone mémoire ByVal, les données, la longueur totale, la longueur terminée et le processus de lecture, y compris le descripteur de processus, l'adresse de la zone mémoire ByVal et l'emplacement de stockage des données lues. La longueur à lire, la longueur qui a été lue, l'allocation de mémoire (descripteur de processus, adresse [il suffit de lancer un 0 cela semble suffire], longueur, autorisation 1 [MEM_COMMIT], autorisation 2 [PAGE_READWRITE]) retour : le la mémoire allouée démarre l'adresse de départ et d'autres fonctions.
Le code d'implémentation spécifique est le suivant :
Attribut VB_Name = "API" Option ExplicitPublic Déclarer la fonction GetDesktopWindow Lib "User32.DLL" () As LongPublic Déclarer la fonction FindWindow Lib "User32.DLL" Alias "FindWindowA" (ByVal ClassName As String, ByVal Caption As String) As LongPublic Déclarer Fonction GetWindow Lib "User32.DLL" (ByVal hwnd As Long, ByVal wCmd As Long) As LongPublic Déclarer la fonction 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) Fonction de déclaration publique GetWindowThreadProcessId Lib "User32.DLL" (ByVal hwnd As Long, ProcessId As Long) As Long 'Obtenir l'ID de thread (handle, ID de thread renvoyé) Fonction de déclaration publique OpenProcess Lib "Kernel32.DLL" (autorisation d'opération ByVal As Long, handle d'héritage ByVal As Long , ID de thread ByVal As Long) As LongPublic Déclarer la fonction ReadProcessMemory Lib "Kernel32.DLL" (ByVal Processus de gestion As Long, ByVal Emplacement mémoire As Long, Buffer As Any, ByVal Longueur As Long, lpNumberOfBytesWritten As Long) As Long'Read processus (descripteur de processus, adresse de zone mémoire ByVal, emplacement de stockage de données de lecture, pour lire la longueur prise, le longueur qui a été lue [0]) Fonction de déclaration publique WriteProcessMemory Lib "Kernel32.DLL" (processus ByVal descripteur As Long, emplacement mémoire As Any, Tampon As Any, ByVal Longueur As Long, lpNumberOfBytesWritten As Long) As Long'Write mémoire (descripteur de processus, adresse de zone mémoire ByVal, données, longueur totale, longueur terminée [0]) Fonction de déclaration publique CloseHandle Lib "Kernel32.DLL" (ByVal handle de processus As Long) As Long 'Release (handle de processus)' provoquera une erreur s'il n'est pas libéré 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" (Variable 1 comme n'importe quelle, variable 2 comme n'importe quelle, longueur ByVal comme longue)'-------------- Libération d'allocation de protection de la mémoire Public Declare Function VPE Lib "Kernel32.DLL" Alias " VirtualProtectEx" (traitement du processus ByVal aussi long, adresse que n'importe quelle, longueur ByVal aussi longue, ByVal flNewProtect aussi longtemps, lpflOldProtect aussi longtemps) As LongPublic Déclarer la fonction VAE Lib "Kernel32.DLL" Alias "VirtualAllocEx" (processus ByVal As Long, adresse ByVal As Long, longueur ByVal As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As L'allocation de mémoire longue (descripteur de processus, adresse [il suffit de déposer un 0 cela semble suffire], longueur, autorisation 1 [MEM_COMMIT], autorisation 2 [PAGE_READWRITE]) renvoie : l'adresse de départ de la mémoire allouée Public Declare Function VFE Lib "Kernel32 .DLL" Alias "VirtualFreeEx" (traitement du processus ByVal As Long, adresse ByVal As Long, longueur ByVal As Long, type de version ByVal As Long) As LongPublic. Const MEM_COMMIT = &H1000Public Const PAGE_READWRITE = &H4Public Const STILL_ACTIVE = &H103&Public Const INFINITE = &HFFFF'---------Obtenir l'emplacement de la fonction du module APIPublic Declare Function GetModuleHandle Lib "Kernel32.DLL" Alias "GetModuleHandleA" (ByVal ModuleName As Chaîne) As LongPublic Déclarer la fonction LoadLibrary Lib "Kernel32.DLL" Alias "LoadLibraryA" (ByVal ModuleName As String) As LongPublic Déclarer la fonction GetProcAddress Lib "Kernel32.DLL" (ByVal hModule As Long, ByVal ProcName As String) As LongPublic Déclarer la fonction CreateRemoteThread Lib " Kernel32. DLL" (processus ByVal géré en tant que Long, lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As LongPublic Déclarer la fonction GetTickCount Lib "kernel32" () As Long