Interfejs za aplikacijsko programiranje operativnih sistema Windows predstavljen je skupom funkcija. Kada se pozovu, mogu se stvoriti različiti objekti (datoteke, procesi, niti, objekti za sinkronizaciju itd.). Da bi se pružio dovoljno apstraktan i jedinstven pristup tim objektima, njihova identifikacija se izvodi pomoću deskriptora - "bezličnih" numeričkih vrijednosti.
Potrebno
- - prevoditelj s programskog jezika koji omogućava upotrebu Windows API-ja;
- - moguće Windows Platform SDK.
Instrukcije
Korak 1
Nabavite ručke za prozor. Postoji mnogo načina za to. Tačna metoda ovisi o krajnjem cilju.
Koristite CreateWindow ili CreateWindowEx API-je za kreiranje prozora. Oni vraćaju opciju uspjeha i NULL neuspjeha.
Pretražite prozore najviše razine i podređene prozore prema različitim parametrima pomoću funkcija FindWindow i FindWindowEx. Uspješnom pretragom dobit će se kvaka prozora.
Nabroji prozore s funkcijama EnumWindows, EnumChildWindows, EnumThreadWindows. Ručke pronađenog prozora prosljeđivat će se kao parametar funkciji povratnog poziva.
Pronađite kvaku do prozora koji se nalazi na određenom položaju na ekranu. Pozovite jednu od funkcija: WindowFromPoint, ChildWindowFromPoint ili ChildWindowFromPointEx.
Korak 2
Nabavite ručke procesa. Stvorite novi proces pozivanjem API-ja CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW ili CreateProcessWithLogonW API. Svi oni vraćaju ručicu novom procesu u polju hProcess strukture PROCESS_INFORMATION, čiji bi im se pokazivač trebao proslijediti kao zadnji parametar.
Pronađite ručicu procesa pomoću njegovog poznatog identifikatora. Koristite poziv OpenProcess. ID-ovi svih pokrenutih procesa mogu se dobiti, na primjer, pomoću funkcija CreateToolhelp32Snapshot, Process32First i Process32Next u biblioteci Alat za pomoć.
Dohvatite pseudo ručicu trenutnog procesa pomoću funkcije GetCurrentProcess.
Korak 3
Nabavite deskriptore niti. Funkcije CreateThread i CreateRemoteThread kreiraju niti u svom, odnosno tuđem procesu, vraćajući im ručke. Možete otvoriti postojeću nit koristeći njen identifikator i dobiti odgovarajuću ručicu pomoću funkcije OpenThread. Pseudo-ručka trenutnog toka vraća se kada se pozove GetCurrentThread.
Korak 4
Deskriptori datoteka, direktorija, fizičkih diskova, volumena diska, konzola, komunikacijskih resursa (I / O portovi), utora za poštu i imenovanih cijevi mogu se dobiti pozivanjem jedne funkcije CreateFile.
Korak 5
Deskriptori objekta mapiranja datoteke u memoriju vraćaju se pozivima CreateFileMapping i OpenFileMapping.
Korak 6
Funkcije CreateMutex, CreateSemaphore i CreateEvent kreiraju, a funkcije OpenMutex, OpenSemaphore i OpenEvent otvaraju postojeće objekte sinhronizacije (muteksevi, semafori i događaji). Svi oni vraćaju deskriptore.
Korak 7
Svim GDI objektima (poput konteksta uređaja, fontova, četkica, olovaka, hardverski ovisnih i neovisnih bitmapa, DIB odjeljaka itd.) Manipulira se putem njihovih deskriptora. Funkcije za stvaranje GDI objekata su brojne i za informacije o njima treba ih potražiti u odjeljku MSDN.
Korak 8
Deskriptor dobiven u jednom procesu, u pravilu, ne može se koristiti u drugom. Međutim, u nekim je slučajevima moguće dobiti duplicirani deskriptor koji odgovara primarnom objektu. Pozovite API DuplicateHandle da biste duplicirali hvataljku. To se može koristiti, na primjer, za dijeljenje neimenovanih objekata ili kanala za sinkronizaciju između više procesa.