Как да получите дескриптор

Съдържание:

Как да получите дескриптор
Как да получите дескриптор

Видео: Как да получите дескриптор

Видео: Как да получите дескриптор
Видео: Протокол дескрипторов в Python 2024, Може
Anonim

Интерфейсът за приложно програмиране на операционните системи Windows е представен от набор от функции. Когато са извикани, могат да бъдат създадени различни обекти (файлове, процеси, нишки, обекти за синхронизация и т.н.). За да се осигури достатъчно абстрактен и унифициран достъп до тези обекти, тяхната идентификация се извършва с помощта на дескриптори - "безлични" числови стойности.

Как да получите дескриптор
Как да получите дескриптор

Необходимо

  • - преводач от език за програмиране, който позволява използването на Windows API;
  • - вероятно Windows Platform SDK.

Инструкции

Етап 1

Вземете дръжки за прозорци. Има много начини да направите това. Точният метод зависи от крайната цел.

Използвайте API на CreateWindow или CreateWindowEx, за да създадете прозорец. Те връщат справка за успех и NULL при неуспех.

Търсете прозорци от най-високо ниво и дъщерни прозорци по различни параметри, като използвате функциите FindWindow и FindWindowEx, съответно. При успешно търсене ще се получи дръжката на прозореца.

Избройте прозорците с функциите EnumWindows, EnumChildWindows, EnumThreadWindows. Дръжките на намерените прозорци ще бъдат предадени като параметър на функцията за обратно извикване.

Намерете дръжката към прозореца, разположен на определена позиция на екрана. Извикайте една от функциите: WindowFromPoint, ChildWindowFromPoint или ChildWindowFromPointEx.

Стъпка 2

Вземете дръжки на процеса. Създайте нов процес, като извикате функциите на API CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW или CreateProcessWithLogonW. Всички те връщат манипулатор на новия процес в полето hProcess на структурата PROCESS_INFORMATION, указателят към който трябва да им бъде предаден като последен параметър.

Намерете манипулатора на процеса чрез неговия известен идентификатор. Използвайте обаждането OpenProcess. Идентификаторите на всички работещи процеси могат да бъдат получени, например, с помощта на функциите 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

Дескриптор, получен в един процес, като правило не може да се използва в друг. В някои случаи обаче е възможно да се получи дублиран дескриптор, съответстващ на основния обект. Извикайте API на DuplicateHandle, за да дублирате манипулатора. Това може да се използва, например, за споделяне на неназовани обекти за синхронизация или канали между множество процеси.

Препоръчано: