Дескрипторыг хэрхэн яаж авах вэ

Агуулгын хүснэгт:

Дескрипторыг хэрхэн яаж авах вэ
Дескрипторыг хэрхэн яаж авах вэ

Видео: Дескрипторыг хэрхэн яаж авах вэ

Видео: Дескрипторыг хэрхэн яаж авах вэ
Видео: Loré ‘Сэнсийг хэрхэн тааруулах вэ?' PubgM 2024, May
Anonim

Windows үйлдлийн системийн хэрэглээний програмчлалын интерфейсийг багц функцээр төлөөлдөг. Тэдгээрийг дуудахад янз бүрийн объект (файл, процесс, урсгал, синхрончлолын объект гэх мэт) үүсгэх боломжтой. Эдгээр объектуудад хангалттай хийсвэр, нэгдсэн хандалтыг бий болгохын тулд тэдгээрийг таних ажиллагааг дескриптор - "хувь хүний бус" тоон утгыг ашиглан гүйцэтгэдэг.

Дескрипторыг хэрхэн яаж авах вэ
Дескрипторыг хэрхэн яаж авах вэ

Шаардлагатай

  • - Windows API ашиглах боломжийг олгодог програмчлалын хэлнээс орчуулагч;
  • - магадгүй Windows Platform SDK.

Зааварчилгаа

1-р алхам

Цонхны бариул авах. Үүнийг хийх олон арга зам байдаг. Яг арга нь эцсийн зорилгоос хамаарна.

Цонх үүсгэхийн тулд CreateWindow эсвэл CreateWindowEx API-г ашиглана уу. Тэд амжилтын бариул, бүтэлгүйтлийн NULL-ийг буцаадаг.

FindWindow, FindWindowEx функцийг ашиглан дээд түвшний цонх, төрөл бүрийн параметрээр хүүхдийн цонхыг хайж олох. Амжилттай хайлт хийхэд цонхны бариулыг олж авах болно.

EnumWindows, EnumChildWindows, EnumThreadWindows функцээр цонх тоолох. Олдсон цонхны бариулыг буцааж дуудах функцын параметр болгон дамжуулна.

Дэлгэцийн тодорхой байрлал дээр байрлах цонхны бариулыг олоорой. Функцүүдийн аль нэгийг дуудах: WindowFromPoint, ChildWindowFromPoint, эсвэл ChildWindowFromPointEx.

Алхам 2

Процессийн бариул авах. CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW эсвэл CreateProcessWithLogonW API функцуудыг дуудаж шинэ процесс үүсгээрэй. Тэд бүгдээрээ PROCESS_INFORMATION бүтцийн hProcess талбар дахь шинэ процесст бариулыг буцааж өгдөг бөгөөд заагчийг хамгийн сүүлийн параметр болгон тэдэнд дамжуулах ёстой.

Процессын бариулыг мэдэгдэж байгаа танигчаар нь олоорой. OpenProcess дуудлагыг ашиглана уу. Ажиллаж буй бүх процессын ID-г жишээ нь Хэрэгсэл Туслах сангийн CreateToolhelp32Snapshot, Process32First, Process32Next функцуудыг ашиглан олж авч болно.

GetCurrentProcess функцийг ашиглан одоогийн процессын хуурамч бариулыг татаж авах.

Алхам 3

Утаснуудын тодорхойлогчийг авах. CreateThread ба CreateRemoteThread функцууд нь өөрсдийн болон өөр хэн нэгний процесс дахь урсгалуудыг үүсгэж, бариулаа буцааж өгдөг. Та одоо байгаа утсыг танигч ашиглан нээж, OpenThread функцийг ашиглан харгалзах бариулыг авах боломжтой. GetCurrentThread дуудагдах үед одоогийн урсгалын псевдо бариулыг буцаадаг.

Алхам 4

Файл, директор, физик диск, дискний хэмжээ, консол, холбооны нөөц (I / O портууд), шуудангийн үүр, нэрлэсэн хоолойн тодорхойлогчийг CreateFile гэсэн ганц функцийг дуудаж авах боломжтой.

Алхам 5

Файл-санах ойн зураглалын объектын тодорхойлогчийг CreateFileMapping, OpenFileMapping руу дуудлага хийх замаар буцаадаг.

Алхам 6

CreateMutex, CreateSemaphore, CreateEvent функцууд үүсгэх бөгөөд OpenMutex, OpenSemaphore, OpenEvent функцууд нь одоо байгаа синхрончлолын объектуудыг (мутекс, семафор, үйл явдал) нээдэг. Тэд бүгд тодорхойлогчийг буцааж өгдөг.

Алхам 7

Бүх GDI объектуудыг (төхөөрөмжийн контекст, фонт, сойз, харандаа, техник хангамжаас хамааралтай ба хараат бус битмап, DIB хэсгүүд гэх мэт) тэдгээрийн тодорхойлогчоор удирддаг. GDI объектыг үүсгэх функцууд нь маш олон тул тэдгээрийн талаархи мэдээллийг MSDN хэсгээс авна уу.

Алхам 8

Нэг процесст олж авсан дескрипторыг дүрмээр өөр процесст ашиглах боломжгүй юм. Гэсэн хэдий ч зарим тохиолдолд анхдагч объектод тохирох тодорхойлогчийг хуулбарлах боломжтой байдаг. Бариулыг хуулбарлахын тулд DuplicateHandle API руу залгана уу. Жишээлбэл, олон процессын хооронд нэр нь үл мэдэгдэх синхрончлолын объект эсвэл сувгийг хуваалцахад ашиглаж болно.

Зөвлөмж болгож буй: