Получить РУЧКУ в область памяти и что такое РУЧКА на самом деле

  1. Как я могу получить РУЧКУ в область памяти или сопоставленный файл?
  2. Что на самом деле РУЧКА?

Пожалуйста, не отвечайте так:

Дескриптор - это абстрактная ссылка на некоторый ресурс, предоставленный вам другой стороной (обычно ОС), который вы можете вернуть для ссылки на этот ресурс.

Я заинтересован в технической стороне

3 ответа

HANDLE это просто произвольный самородок к некоторым данным.

Например, он возвращается следующими API: CreateFile() а также OpenProcess() - как вы можете сказать, эти два очень разные, но возвращают один и тот же тип данных.

Или для памяти, вы можете получить доступ к куче (которая возвращается как HANDLE от GetProcessHeap()), а затем использовать HeapAlloc() против этого.

Как указывает MSDN, он используется во многих других контекстах:

http://msdn.microsoft.com/en-us/library/windows/apps/ms724211%28v=vs.85%29.aspx

Токен доступа

Устройство связи

Консольный ввод

Консольный экранный буфер

Событие

файл

Отображение файлов

Порт завершения ввода / вывода

работа

Mailslot

Уведомление о ресурсе памяти

Mutex

Именованная труба

труба

Процесс

семафор

Нить

Сделка

Таймер ожидания

Дескрипторы в окнах использовались как указатель на указатель на место в памяти объекта. В день победы 3.1 какая-то программа использовала какую-то ручку, чтобы увидеть, что позади. Сегодня, насколько мне известно, это больше невозможно, они являются простым уникальным идентификатором или токеном для связи между вами и системой.
Еще немного информации http://en.wikibooks.org/wiki/Windows_Programming/Handles_and_Data_Types
еще немного из msdn прочитал объект абзаца в 16-битных окнах http://msdn.microsoft.com/en-us/library/ms810501.aspx

Если вы просто хотите знать, что это такое:

В простых операционных системах такие дескрипторы на самом деле являются только указателями на структуру в пространстве ядра. Структура содержит больше информации о самом дескрипторе (например, указатель на структуру файла). Более сложные операционные системы, такие как Windows, проверят правильность дескриптора, прежде чем пытаться получить доступ к этой структуре.

Поскольку HANDLE непрозрачен в Windows (это означает, что Microsoft говорит: не интерпретируйте его - это просто 32-разрядное число), фактическое значение HANDLE может быть различным в разных версиях Windows. Даже в пределах одной версии (например, Vista 32-bit или Vista 64-bit или XP SP2 против XP SP3) (внутреннее) значение может отличаться.

Microsoft может изменить значение в любое время, когда захочет его изменить (это может быть указатель в Windows 95, но указатель на массив в Windows 8 - кто знает).

Другие вопросы по тегам