Windows-käyttöjärjestelmien sovellusohjelmointirajapintaa edustaa joukko toimintoja. Kun niitä kutsutaan, voidaan luoda erilaisia objekteja (tiedostot, prosessit, ketjut, synkronointiobjektit jne.). Tarjotakseen riittävän abstraktin ja yhtenäisen pääsyn näihin kohteisiin, niiden tunnistaminen suoritetaan käyttämällä kuvaajia - "persoonattomia" numeerisia arvoja.
Tarpeellinen
- - kääntäjä ohjelmointikielestä, joka sallii Windows-sovellusliittymän käytön;
- - mahdollisesti Windows Platform SDK.
Ohjeet
Vaihe 1
Hanki ikkunankahvat. Tähän on monia tapoja. Tarkka menetelmä riippuu lopputavoitteesta.
Luo ikkuna CreateWindow- tai CreateWindowEx-sovellusliittymien avulla. He palauttavat kahvan menestykseen ja NULL epäonnistumiseen.
Etsi ylätason ikkunoita ja lapsiikkunoita useilla parametreilla käyttämällä vastaavasti FindWindow- ja FindWindowEx-toimintoja. Onnistuneen haun yhteydessä saadaan ikkunan kahva.
Luettele ikkunat EnumWindows-, EnumChildWindows-, EnumThreadWindows-toiminnoilla. Löydettyjen ikkunoiden kahvat välitetään parametrina takaisinsoittotoiminnolle.
Etsi ikkunan kahva, joka sijaitsee tietyssä ruudun kohdassa. Kutsu yksi toiminnoista: WindowFromPoint, ChildWindowFromPoint tai ChildWindowFromPointEx.
Vaihe 2
Hanki prosessikahvat. Luo uusi prosessi kutsumalla CreateProcess-, CreateProcessAsUser-, CreateProcessWithTokenW- tai CreateProcessWithLogonW-sovellusliittymäfunktiot. Ne kaikki palauttavat kahvan uuteen prosessiin PROCESS_INFORMATION-rakenteen hProcess-kentässä, johon osoitin on välitettävä heille viimeisenä parametrina.
Etsi prosessin kahva sen tunnetun tunnuksen perusteella. Käytä OpenProcess-puhelua. Kaikkien käynnissä olevien prosessien tunnukset voidaan hankkia esimerkiksi käyttämällä työkalun ohjekirjaston CreateToolhelp32Snapshot-, Process32First- ja Process32Next-toimintoja.
Hae nykyisen prosessin näennäinen kahva GetCurrentProcess-funktiolla.
Vaihe 3
Hanki ketjujen kuvaimet. CreateThread- ja CreateRemoteThread-toiminnot luovat ketjut omassa prosessissaan ja jonkun toisen prosessissa palauttamalla kahvat. Voit avata olemassa olevan ketjun sen tunnisteella ja hankkia vastaavan kahvan OpenThread-toiminnon avulla. Nykyisen virtauksen pseudokahva palautetaan, kun GetCurrentThread kutsutaan.
Vaihe 4
Tiedostojen, hakemistojen, fyysisten levyjen, levytiedostojen, konsolien, viestintäresurssien (I / O-portit), postiaukkojen ja nimettyjen putkien kuvaimet voidaan saada kutsumalla yksi funktio, CreateFile.
Vaihe 5
Tiedosto muistiin -kartoitusobjektikuvaajat palautetaan kutsuilla CreateFileMapping- ja OpenFileMapping-sovelluksiin.
Vaihe 6
CreateMutex-, CreateSemaphore- ja CreateEvent-toiminnot luovat, ja OpenMutex-, OpenSemaphore- ja OpenEvent-toiminnot avaavat olemassa olevat synkronointiobjektit (muteksit, semaforit ja tapahtumat). Ne kaikki palauttavat kuvaimet.
Vaihe 7
Kaikkia GDI-objekteja (kuten laitekonteksteja, fontteja, harjoja, lyijykyniä, laitteistosta riippuvia ja riippumattomia bittikarttoja, DIB-osioita jne.) Manipuloidaan niiden kuvaajien kautta. GDI-objektien luomiseen liittyviä toimintoja on lukuisia, ja niistä on tietoja MSDN-osiossa.
Vaihe 8
Yhdessä prosessissa saatua kuvainta ei pääsääntöisesti voida käyttää toisessa. Joissakin tapauksissa on kuitenkin mahdollista saada kaksoiskuva, joka vastaa ensisijaista kohdetta. Kutsu DuplicateHandle-sovellusliittymä kopion kopioimiseksi. Tätä voidaan käyttää esimerkiksi nimeämättömien synkronointiobjektien tai kanavien jakamiseen useiden prosessien välillä.