Получить РУЧКУ в область памяти и что такое РУЧКА на самом деле
- Как я могу получить РУЧКУ в область памяти или сопоставленный файл?
- Что на самом деле РУЧКА?
Пожалуйста, не отвечайте так:
Дескриптор - это абстрактная ссылка на некоторый ресурс, предоставленный вам другой стороной (обычно ОС), который вы можете вернуть для ссылки на этот ресурс.
Я заинтересован в технической стороне
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 - кто знает).