Cum Se Obține Un Descriptor

Cuprins:

Cum Se Obține Un Descriptor
Cum Se Obține Un Descriptor

Video: Cum Se Obține Un Descriptor

Video: Cum Se Obține Un Descriptor
Video: Understanding the Windows Registry 2024, Noiembrie
Anonim

Interfața de programare a aplicațiilor din sistemele de operare Windows este reprezentată de un set de funcții. Când sunt apelate, pot fi create diverse obiecte (fișiere, procese, fire, obiecte de sincronizare etc.). Pentru a oferi un acces suficient de abstract și unificat la aceste obiecte, identificarea lor se realizează folosind descriptori - valori numerice „impersonale”.

Cum se obține un descriptor
Cum se obține un descriptor

Necesar

  • - un traducător dintr-un limbaj de programare care permite utilizarea Windows API;
  • - eventual Windows Platform SDK.

Instrucțiuni

Pasul 1

Obțineți mânere pentru ferestre. Există multe modalități de a face acest lucru. Metoda exactă depinde de obiectivul final.

Utilizați API-urile CreateWindow sau CreateWindowEx pentru a crea o fereastră. Ele returnează un control asupra succesului și NULL asupra eșecului.

Căutați ferestre de nivel superior și ferestre copil după diferiți parametri utilizând funcțiile FindWindow și, respectiv, FindWindowEx. La o căutare reușită, se va obține mânerul ferestrei.

Enumerați ferestrele cu funcțiile EnumWindows, EnumChildWindows, EnumThreadWindows. Mânerele ferestrelor găsite vor fi transmise ca parametru funcției de apel invers.

Găsiți mânerul către fereastra aflată într-o anumită poziție de pe ecran. Apelați una dintre funcțiile: WindowFromPoint, ChildWindowFromPoint sau ChildWindowFromPointEx.

Pasul 2

Obțineți mânere de proces. Creați un proces nou apelând funcțiile CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW sau CreateProcessWithLogonW. Toți returnează un handle noului proces în câmpul hProcess al structurii PROCESS_INFORMATION, indicatorul către care ar trebui să fie transmis ca ultim parametru.

Găsiți identificatorul procesului prin identificatorul său cunoscut. Utilizați apelul OpenProcess. ID-urile tuturor proceselor care rulează pot fi obținute, de exemplu, utilizând funcțiile CreateToolhelp32Snapshot, Process32First și Process32Next din biblioteca Help Tool.

Recuperați pseudo-mânerul procesului curent utilizând funcția GetCurrentProcess.

Pasul 3

Obțineți descriptori de fire. Funcțiile CreateThread și CreateRemoteThread creează fire în procesul propriu și, respectiv, al altcuiva, returnându-le mânerele. Puteți deschide un fir existent folosind identificatorul său și puteți obține mânerul corespunzător folosind funcția OpenThread. Pseudo-mânerul fluxului curent este returnat atunci când este apelat GetCurrentThread.

Pasul 4

Descriptorii pentru fișiere, directoare, discuri fizice, volume de discuri, console, resurse de comunicații (porturi I / O), sloturi de poștă și conducte numite pot fi obținute apelând o singură funcție, CreateFile.

Pasul 5

Descriptorii obiectului de mapare fișier-memorie sunt returnate prin apeluri către CreateFileMapping și OpenFileMapping.

Pasul 6

Funcțiile CreateMutex, CreateSemaphore și CreateEvent creează, iar funcțiile OpenMutex, OpenSemaphore și OpenEvent deschid obiecte de sincronizare existente (mutexe, semafor și evenimente). Toți returnează descriptori.

Pasul 7

Toate obiectele GDI (cum ar fi contextele dispozitivului, fonturile, pensulele, creioanele, hărțile de biți independente și dependente de hardware, secțiunile DIB etc.) sunt manipulate prin descriptorii lor. Funcțiile pentru crearea obiectelor GDI sunt numeroase și ar trebui consultate în secțiunea MSDN pentru informații despre acestea.

Pasul 8

Un descriptor obținut într-un proces, de regulă, nu poate fi utilizat în altul. Cu toate acestea, în unele cazuri este posibil să se obțină un descriptor duplicat corespunzător obiectului primar. Apelați API-ul DuplicateHandle pentru a duplica mânerul. Aceasta poate fi utilizată, de exemplu, pentru a partaja obiecte sau canale de sincronizare fără nume între mai multe procese.

Recomandat: