Programski vmesnik za operacijski sistem Windows je predstavljen z naborom funkcij. Ko jih pokličete, lahko ustvarite različne predmete (datoteke, procesi, niti, predmeti za sinhronizacijo itd.). Za zagotovitev dovolj abstraktnega in enotnega dostopa do teh predmetov se njihova identifikacija izvede z uporabo deskriptorjev - "neosebnih" numeričnih vrednosti.
Potrebno
- - prevajalec iz programskega jezika, ki omogoča uporabo Windows API;
- - morda Windows Platform SDK.
Navodila
Korak 1
Pridobite okenske kljuke. Za to obstaja veliko načinov. Natančna metoda je odvisna od končnega cilja.
Za ustvarjanje okna uporabite API-je CreateWindow ali CreateWindowEx. Vrnejo odgovor na uspeh in NULL na neuspeh.
Poiščite okna najvišje ravni in podrejena okna po različnih parametrih s pomočjo funkcij FindWindow in FindWindowEx. Ob uspešnem iskanju bo pridobljen ročaj okna.
Oštevajte okna s funkcijami EnumWindows, EnumChildWindows, EnumThreadWindows. Ročaji najdenih oken bodo posredovani kot parameter funkciji povratnega klica.
Poiščite ročico do okna, ki se nahaja na določenem mestu na zaslonu. Pokličite eno od funkcij: WindowFromPoint, ChildWindowFromPoint ali ChildWindowFromPointEx.
2. korak
Pridobite procesne ročaje. Ustvarite nov postopek s klicanjem funkcij API CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW ali CreateProcessWithLogonW. Vsi vrnejo ročaj novemu procesu v polju hProcess strukture PROCESS_INFORMATION, katerega kazalnik naj jim se posreduje kot zadnji parameter.
Poiščite ročico postopka po njegovem znanem identifikatorju. Uporabite klic OpenProcess. ID-je vseh zagnanih procesov je mogoče dobiti na primer z uporabo funkcij CreateToolhelp32Snapshot, Process32First in Process32Next v knjižnici za pomoč orodja.
Pridobite psevdo ročaj trenutnega procesa s pomočjo funkcije GetCurrentProcess.
3. korak
Pridobite deskriptorje niti. Funkciji CreateThread in CreateRemoteThread ustvarjata niti v svojem in v procesu nekoga drugega, vračata svoje ročaje. Obstoječo nit lahko odprete z njenim identifikatorjem in dobite ustrezen ročaj s funkcijo OpenThread. Ko se pokliče GetCurrentThread, se vrne psevdo-ročaj trenutnega toka.
4. korak
Deskriptorje datotek, imenikov, fizičnih diskov, nosilcev diskov, konzol, komunikacijskih virov (vhodno / izhodna vrata), poštnih rež in imenovanih kanalov lahko dobite s klicem ene same funkcije CreateFile.
5. korak
Deskriptorji map preslikave datotek v pomnilnik se vrnejo s klici na CreateFileMapping in OpenFileMapping.
6. korak
Ustvarijo funkcije CreateMutex, CreateSemaphore in CreateEvent, funkcije OpenMutex, OpenSemaphore in OpenEvent pa obstoječe sinhronizacijske objekte (mutekse, semaforje in dogodke). Vsi vrnejo deskriptorje.
7. korak
Z vsemi predmeti GDI (kot so konteksti naprav, pisave, ščetke, svinčniki, odvisne od strojne opreme in neodvisne bitne slike, odseki DIB itd.) Se manipulira prek njihovih deskriptorjev. Funkcije za ustvarjanje predmetov GDI so številne, zato se je treba o njih pozanimati v razdelku MSDN.
8. korak
Deskriptorja, pridobljenega v enem postopku, praviloma ni mogoče uporabiti v drugem. Vendar je v nekaterih primerih mogoče dobiti podvojen deskriptor, ki ustreza primarnemu objektu. Pokličite API DuplicateHandle, da podvojite ročico. S tem lahko na primer delite neimenovane sinhronizacijske predmete ali kanale med več procesi.