Дескрипторды қалай алуға болады

Мазмұны:

Дескрипторды қалай алуға болады
Дескрипторды қалай алуға болады

Бейне: Дескрипторды қалай алуға болады

Бейне: Дескрипторды қалай алуға болады
Бейне: ЭЦҚ-ны смартфонға орнату #эцқ #эцп #эцпключ 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 қоңырауын пайдаланыңыз. Барлық іске қосылған процестердің идентификаторларын алуға болады, мысалы, құралдар анықтамалық кітапханасының 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-ге қоңырау шалыңыз. Мұны, мысалы, синхрондаудың атаусыз нысандарын немесе арналарын бірнеше процестер арасында бөлісу үшін пайдалануға болады.

Ұсынылған: