Перейти к содержанию

Что такое хендлы (handles)


Рекомендуемые сообщения

В системе Windows есть объекты ядра и ИХ описатели. Последние чаще называют дескрипторами, "хендлами", "hadle(s)".

Вот пример использования хендла типа Окно (тип HWND):

int WINAPI MessageBox(
  __in_opt  HWND hWnd,
  __in_opt  LPCTSTR lpText,
  __in_opt  LPCTSTR lpCaption,
  __in      UINT uType
);

 

Сразу напрашивается расшифровка этой абривиатуры HWND. H- handle , WND - window. Получаем handle window.

Для чего нужен этот описатель для казалось бы независимого диалога MessageBox?! Идём в справку MSDN и смотрим:

A handle to the owner window of the message box to be created. If this parameter is NULL, the message box has no owner window.

Оказывается этот параметр, если его указать, свяжет мессагу и описатель HWND. У мессаги появится "хозяин"... Если окно закроется, то и мессага закроется... Разбирать эту связь я не буду, кому надо глянут. Это был просто пример.

Описатели или дескрипторы это структуры данных. Используются в работе разных режимов.

На Windows cуществует два режима. Режим Ядра и "Пользовательский"

Ошибки на уровне Ядра покажут вам Синий экран. Ошибки на Пользовательском уровне должны привести максимум к закрытию пользовательского приложения. "Должны" это не значит, что так и будет, но на все 100% нельзя быть уверенным.

"Режим пользователя" это программирование на WinAPI где мы работаем с дескрипторами Пользовательского режима (а система в свою очередь обрабатывает эти дескрипторы работая с объектами ядра), и если что-то на этом уровне Пользователя пойдёт не так, то в предположительно в худшем случае ваше приложение закроется с критической ошибкой.

"Режим ядра" это тот режим на котором писать программы очень "мерзко", если что, то синий экран. Если опять что-то, то опять синий экран. При чем компьютер после перезагрузки может не запустить операционную систему...

Итак. В Пользовательском режиме Хендлы или дескрипторы это номера, по которым идентифицируются структуры данных в системе. Эти структуры разного размера в зависимости от названия типа хендла. Эти структуры созданы для взаимодействия процессов Пользовательского уровня в обход уровня Ядра.

Более подробнее читаем Рихтера. Глава3.

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Я путаю "два режима - ядра и пользовательский" с ring0-1-2-3 защищённого x86? Нипанятна. :(

Или это просто такое разделение на "ядро \ дрова" и "всё остальное"?

Ссылка на комментарий
Поделиться на другие сайты

Я путаю "два режима - ядра и пользовательский" с ring0-1-2-3 защищённого x86? Нипанятна. :(

Или это просто такое разделение на "ядро \ дрова" и "всё остальное"?

Тут все подробно рассказано ))

Ссылка на комментарий
Поделиться на другие сайты

Я путаю "два режима - ядра и пользовательский" с ring0-1-2-3 защищённого x86? Нипанятна. :(

Или это просто такое разделение на "ядро \ дрова" и "всё остальное"?

Ссылка на необходимую краткую информацию по режимам. Кратко написаны функции режимов.

Разделение обязанностей юзер- и кернел-модев на рисунке.

Архитектура x86 поддерживает 4 уровня привилегий — от 0 до 3 , но используются только 0 и 3 уровень. Режим пользователя использует уровень 3, а режим ядра — 0.

Я не думаю, что стоит заморачиваться на режимах больше чем нужно. Возможно в нашем деле это потребуется тогда, когда, например, нужно писать в память процесса через кернел-режим, если сделать это обычными способами будет невозможно из-за защит.  

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Ссылка на необходимую краткую информацию по режимам. Кратко написаны функции режимов.

Разделение обязанностей юзер- и кернел-модев на рисунке.

Я не думаю, что стоит заморачиваться на режимах больше чем нужно. Возможно в нашем деле это потребуется тогда, когда, например, нужно писать в память процесса через кернел-режим, если сделать это обычными способами будет невозможно из-за защит.

На моей памяти это нужно было только однажды - при снятии StarForce вручную. Ну да ладно, я правильно думал, просто не сообразил сначала.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.