Як отримати дескриптор

Інтерфейс прикладного програмування операційних систем сімейства 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 бібліотеки Tool Help.

Вийміть псевдо-дескриптор поточного процесу, використовуючи функцію GetCurrentProcess.
3
Отримайте дескриптори потоків. Функції CreateThread і CreateRemoteThread створюють потоки в своєму і чужому процесі, відповідно, повертаючи їх дескриптори. Відкрити існуючий потік з використанням його ідентифікатора, отримавши відповідний дескриптор, можна за допомогою функції OpenThread. Псевдо-дескриптор поточного подтока повертається при виклику GetCurrentThread.


4
Дескриптори файлів, директорій, фізичних дисків, томів на дисках, консолей, комунікаційних ресурсів (портів вводу-виводу), поштових слотів і іменованих каналів можуть бути отримані за допомогою виклику єдиної функції - CreateFile.
5
Дескриптори об'єктів відображення файлів на пам'ять повертаються при викликах CreateFileMapping і OpenFileMapping.
6
Функції CreateMutex, CreateSemaphore і CreateEvent створюють, а функції OpenMutex, OpenSemaphore і OpenEvent відкривають існуючі об'єкти синхронізації (м'ютекси, семафори і події). Всі вони повертають дескриптори.
7
Маніпуляції усіма об'єктами GDI (такими як контексти пристроїв, шрифти, пензлі, олівці, апаратно залежні та незалежні растри, DIB-секції, і т.д.) проводяться за допомогою їх дескрипторів. Функції для створення об'єктів GDI численні і за отриманням інформації про них варто звернутися до відповідного розділу MSDN.
8
Дескриптор, отриманий в одному процесі, як правило, не може використовуватися в іншому. Проте у ряді випадків можливе отримання дескриптора-дубліката, відповідного первинного об'єкту. Проведіть виклик API-функції DuplicateHandle для здійснення дублювання дескриптора. Це може бути застосоване, наприклад, для реалізації спільного використання різних неназваних об'єктів синхронізації або каналів декількома процесами.
Переглядів: 2170

Увага, тільки СЬОГОДНІ!