Перейти к содержанию
Авторизация  
MasterGH

Что такое хендлы (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.

Поделиться сообщением


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

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

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

Поделиться сообщением


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

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

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

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

Поделиться сообщением


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

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

Ну ок, я это и перечитывал, просто по-диагонали. laugh.gif

Поделиться сообщением


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

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

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

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

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

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

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

Поделиться сообщением


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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В данном топике никто не постил уже 4 месяца. Пости здесь только если твой вопрос точно совпадает с темой данного топика.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Предпросмотр
Авторизация  

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

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

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