De applicatie-programmeerinterface van Windows-besturingssystemen wordt vertegenwoordigd door een reeks functies. Wanneer ze worden aangeroepen, kunnen verschillende objecten (bestanden, processen, threads, synchronisatieobjecten, enz.) worden gemaakt. Om een voldoende abstracte en uniforme toegang tot deze objecten te bieden, wordt hun identificatie uitgevoerd met behulp van descriptors - "onpersoonlijke" numerieke waarden.
Noodzakelijk
- - een vertaler uit een programmeertaal die het gebruik van Windows API mogelijk maakt;
- - mogelijk Windows Platform SDK.
instructies:
Stap 1
Pak raamgrepen. Er zijn veel manieren om dit te doen. De exacte methode hangt af van het einddoel.
Gebruik de API's CreateWindow of CreateWindowEx om een venster te maken. Ze geven een greep terug op succes en NULL op mislukking.
Zoek naar vensters op het hoogste niveau en onderliggende vensters op verschillende parameters met behulp van respectievelijk de functies FindWindow en FindWindowEx. Bij succesvol zoeken wordt de venstergreep verkregen.
Opsomming van vensters met EnumWindows, EnumChildWindows, EnumThreadWindows functies. De handvatten van de gevonden vensters worden als parameter doorgegeven aan de callback-functie.
Zoek de hendel naar het venster op een specifieke positie op het scherm. Roep een van de functies aan: WindowFromPoint, ChildWindowFromPoint of ChildWindowFromPointEx.
Stap 2
Krijg proceshandvatten. Maak een nieuw proces door de API-functies CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW of CreateProcessWithLogonW aan te roepen. Ze retourneren allemaal een handvat naar het nieuwe proces in het hProcess-veld van de PROCESS_INFORMATION-structuur, de aanwijzer waaraan ze moeten worden doorgegeven als de laatste parameter.
Zoek de greep naar het proces op basis van de bekende identifier. Gebruik de OpenProcess-aanroep. De ID's van alle actieve processen kunnen bijvoorbeeld worden verkregen met behulp van de functies CreateToolhelp32Snapshot, Process32First en Process32Next van de Tool Help-bibliotheek.
Haal de pseudo-handle van het huidige proces op met behulp van de functie GetCurrentProcess.
Stap 3
Krijg beschrijvingen van threads. De functies CreateThread en CreateRemoteThread creëren threads in respectievelijk hun eigen proces en dat van iemand anders, waarbij hun handvatten worden geretourneerd. U kunt een bestaande thread openen met behulp van de identifier en de bijbehorende handle krijgen met behulp van de OpenThread-functie. De pseudo-handle van de huidige stroom wordt geretourneerd wanneer GetCurrentThread wordt aangeroepen.
Stap 4
Descriptors voor bestanden, directory's, fysieke schijven, schijfvolumes, consoles, communicatiebronnen (I/O-poorten), mailslots en named pipes kunnen worden verkregen door een enkele functie, CreateFile, aan te roepen.
Stap 5
Bestand-naar-geheugen mapping objectdescriptors worden geretourneerd door aanroepen van CreateFileMapping en OpenFileMapping.
Stap 6
De functies CreateMutex, CreateSemaphore en CreateEvent maken en de functies OpenMutex, OpenSemaphore en OpenEvent openen bestaande synchronisatie-objecten (mutexen, semaforen en gebeurtenissen). Ze geven allemaal beschrijvingen terug.
Stap 7
Alle GDI-objecten (zoals apparaatcontexten, lettertypen, penselen, potloden, hardwareafhankelijke en onafhankelijke bitmaps, DIB-secties, enz.) worden gemanipuleerd via hun descriptors. De functies voor het maken van GDI-objecten zijn talrijk en moeten worden geraadpleegd op de MSDN-sectie voor informatie hierover.
Stap 8
Een descriptor die in het ene proces is verkregen, kan in de regel niet in een ander proces worden gebruikt. In sommige gevallen is het echter mogelijk om een dubbele descriptor te verkrijgen die overeenkomt met het primaire object. Roep de DuplicateHandle API aan om de handle te dupliceren. Dit kan bijvoorbeeld worden gebruikt om niet nader genoemde synchronisatie-objecten of kanalen te delen tussen meerdere processen.