Aplikační programovací rozhraní operačních systémů Windows je představováno sadou funkcí. Po jejich vyvolání lze vytvořit různé objekty (soubory, procesy, vlákna, synchronizační objekty atd.). K zajištění dostatečně abstraktního a jednotného přístupu k těmto objektům se jejich identifikace provádí pomocí deskriptorů - „neosobních“číselných hodnot.
Nezbytné
- - překladač z programovacího jazyka, který umožňuje použití Windows API;
- - případně Windows Platform SDK.
Instrukce
Krok 1
Získejte okenní kliky. Existuje mnoho způsobů, jak toho dosáhnout. Přesná metoda závisí na konečném cíli.
K vytvoření okna použijte API CreateWindow nebo CreateWindowEx. Vrátí popisovač úspěchu a NULL selhání.
Hledejte okna nejvyšší úrovně a podřízená okna podle různých parametrů pomocí funkcí FindWindow a FindWindowEx. Při úspěšném hledání se získá popisovač okna.
Výčet oken pomocí funkcí EnumWindows, EnumChildWindows, EnumThreadWindows. Popisovače nalezených oken budou předány jako parametr funkci zpětného volání.
Najděte popisovač okna umístěného na konkrétní pozici na obrazovce. Volejte jednu z funkcí: WindowFromPoint, ChildWindowFromPoint nebo ChildWindowFromPointEx.
Krok 2
Získejte popisovače procesu. Vytvořte nový proces voláním funkcí API CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW nebo CreateProcessWithLogonW. Všichni vracejí popisovač nového procesu v poli hProcess struktury PROCESS_INFORMATION, ukazatel, který by jim měl být předán jako poslední parametr.
Najděte popisovač procesu podle jeho známého identifikátoru. Použijte volání OpenProcess. ID všech spuštěných procesů lze získat například pomocí funkcí CreateToolhelp32Snapshot, Process32First a Process32Next v knihovně nápovědy nástroje.
Načíst pseudo popisovač aktuálního procesu pomocí funkce GetCurrentProcess.
Krok 3
Získejte popisovače vláken. Funkce CreateThread a CreateRemoteThread vytvářejí vlákna ve svém vlastním procesu a procesu někoho jiného, vracejícím jejich úchyty. Existující vlákno můžete otevřít pomocí jeho identifikátoru a získat odpovídající popisovač pomocí funkce OpenThread. Při volání GetCurrentThread je vrácen pseudo-handle aktuálního toku.
Krok 4
Deskriptory pro soubory, adresáře, fyzické disky, diskové svazky, konzoly, komunikační prostředky (I / O porty), poštovní sloty a pojmenované kanály lze získat voláním jedné funkce CreateFile.
Krok 5
Deskriptory objektů mapování souboru do paměti jsou vráceny voláním CreateFileMapping a OpenFileMapping.
Krok 6
Funkce CreateMutex, CreateSemaphore a CreateEvent vytvářejí a funkce OpenMutex, OpenSemaphore a OpenEvent otevírají existující synchronizační objekty (mutexy, semafory a události). Všichni vracejí deskriptory.
Krok 7
Se všemi objekty GDI (jako jsou kontexty zařízení, písma, štětce, tužky, hardwarově závislé a nezávislé bitmapy, sekce DIB atd.) Se manipuluje prostřednictvím jejich deskriptorů. Funkce pro vytváření GDI objektů jsou četné a pro informace o nich byste měli být konzultováni v sekci MSDN.
Krok 8
Deskriptor získaný v jednom procesu zpravidla nelze použít v jiném. V některých případech je však možné získat duplicitní deskriptor odpovídající primárnímu objektu. Voláním rozhraní DuplicateHandle API duplikujte popisovač. To lze použít například ke sdílení nepojmenovaných synchronizačních objektů nebo kanálů mezi více procesy.