Организация ввода-вывода. Часть 1. Виртуальные драйверы и виртуальное окружение WINDOWS. Рощин А.В. - 38 стр.

UptoLike

Составители: 

38
Если ваш VxD не является прямой заменой и экспортирует какую-
либо точку входа приложения DOS или Win16 или другого VxD,
Вы должны обратиться к фирме Microsoft за уникальным
идентификатором.
Если ваш VxD не заменяет стандартный VxD и не экспортирует
какую-либо точку входа приложения DOS или Win16, Вы можете
использовать константу UNDEFINED_DEVICE_ID
определенную в заголовке файла VMM.
Если VxD обеспечивает
API для Winl6 или приложений DOS, его
DDB содержит адрес API точки входа. DDB содержит одно поле для
каждого типа API: поле защищенного режима API, являющееся точкой
входа 16-разрядного защищенного режима, используемой приложениями
Winl6, и поле режима V86 API, являющееся точкой входа, используемой
приложениями DOS. Поскольку имеется только одна точка входа API для
каждого из этих типов приложений, VxD обычно используют код функции
в регистре для определения вызываемой функции (наподобие
программного прерывания под DOS).
VxD может также экспортировать точку входа для использования
другими VxD. В документации VxD это обычно называют "сервисом", а не
API. Сервис отличается от API, в котором DDB содержит поле для
таблицы функций, а не единственную сервисную точку входа. Таблица
функций обычно содержит перечень кодов адресов функций
.
Другое поле в DDB иногда используется VxD, хотя VxD и не
инициализирует это поле. Поле ссылок (Reference_Data) позволяет секции
инициализации реального режима VxD связываться с другой секцией
(защищенного режима) VxD. Когда происходит возврат из кода
инициализации реальный режима, VMM копирует значение из EDX в поле
Reference_Data блока данных устройства (DDB) VxD. Если код реального
                                   38



     – Если ваш VxD не является прямой заменой и экспортирует какую-
        либо точку входа приложения DOS или Win16 или другого VxD,
        Вы должны обратиться к фирме Microsoft за уникальным
        идентификатором.
     – Если ваш VxD не заменяет стандартный VxD и не экспортирует
        какую-либо точку входа приложения DOS или Win16, Вы можете
        использовать        константу       UNDEFINED_DEVICE_ID
        определенную в заголовке файла VMM.
     Если VxD обеспечивает API для Winl6 или приложений DOS, его
DDB содержит адрес API точки входа. DDB содержит одно поле для
каждого типа API: поле защищенного режима API, являющееся точкой
входа 16-разрядного защищенного режима, используемой приложениями
Winl6, и поле режима V86 API, являющееся точкой входа, используемой
приложениями DOS. Поскольку имеется только одна точка входа API для
каждого из этих типов приложений, VxD обычно используют код функции
в   регистре   для   определения   вызываемой   функции    (наподобие
программного прерывания под DOS).
     VxD может также экспортировать точку входа для использования
другими VxD. В документации VxD это обычно называют "сервисом", а не
API. Сервис отличается от API, в котором DDB содержит поле для
таблицы функций, а не единственную сервисную точку входа. Таблица
функций обычно содержит перечень кодов адресов функций.
     Другое поле в DDB иногда используется VxD, хотя VxD и не
инициализирует это поле. Поле ссылок (Reference_Data) позволяет секции
инициализации реального режима VxD связываться с другой секцией
(защищенного режима) VxD. Когда происходит возврат из кода
инициализации реальный режима, VMM копирует значение из EDX в поле
Reference_Data блока данных устройства (DDB) VxD. Если код реального