Дескрипторду кантип алууга болот

Мазмуну:

Дескрипторду кантип алууга болот
Дескрипторду кантип алууга болот

Video: Дескрипторду кантип алууга болот

Video: Дескрипторду кантип алууга болот
Video: Протокол дескрипторов в Python 2024, Май
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 чалуусун колдонуңуз. Бардык иштеп жаткан процесстердин идентификаторун, мисалы, Tool Help китепканасынын CreateToolhelp32Snapshot, Process32First жана Process32Next функцияларын колдонуу менен алууга болот.

GetCurrentProcess функциясын колдонуп, учурдагы процесстин псевдо туткасын алуу.

3-кадам

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

4-кадам

Файлдар, каталогдор, физикалык дисктер, дисктердин көлөмү, консольдар, байланыш ресурстары (киргизүү-чыгаруу порттору), почта уячалары жана аталган түтүктөрдүн дескрипторлорун CreateFile деген бир гана функцияны чакырып алууга болот.

5-кадам

Эстутумга картага картага түшүрүүчү объекттин дескрипторлору CreateFileMapping жана OpenFileMapping чалууларынын жардамы менен кайтарылат.

6-кадам

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

7-кадам

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

8-кадам

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

Сунушталууда: