Драйверы устройств в системе Windows


Интерфейс системы MS-DOS для защищенного режима


     Чтобы  установить  связь  с  вектором  реального  режима  из кода системы Windows защищенного режима, необходимо работать с  интерфейсом системы  MS-DOS   для  защищенного   режима  (MS-DOS   Protected  Mode Interface -  DPMI). (Текущая  версия DPMI  представляет собой  уровень 1.0, но система Windows  наиболее полно реализует только  уровень 0.9. Некоторые функции уровня 1.0 реализованы в системе Windows 3.1.)

     Функция   DPMI_SetRMVector   вызывает   интерфейс   DPMI,   чтобы установить вектор реального режима.  Можно видеть, что интерфейс  DPMI взаимодействует  через  регистры  (регистр  AX содержит функциональный код)  и  INT31h.  Автор  включил  высокоуровневый  интерфейс  в данную и  другие  функции  DPMI  (доступен  только  на  диске  кодов  или   в интерактивном  режиме),  чтобы  можно  было  иметь доступ к интерфейсу DPMI из  языка Си  и выделил  код, написанный  на языке  ассемблер, на случай, если возникнет  необходимость использовать что-то  отличное от компилятора Си фирмы Microsoft.

     Функция  DPMI_AllocateRMCallback  вызывает  интерфейс DPMI, чтобы распределить обратный  вызов (callback),  представляющий собой  адрес, вызываемый  из  реального  режима,  который  передает  управление коду защищенного  режима.  Например,  программа  TSR  системы  MS-DOS может вызвать код в библиотеке DLL системы Windows через обратный вызов.

     Функция  DPMI_AllocateRMCallback  принимает  два параметра: адрес кода  защищенного   режима,  который   будет  вызываться   обратно,  и регистровую структуру,  которая обновляется  при выполнении  реального обратного  вызова,   таким  образом   код  защищенного   режима  может исследовать содержимое регистров  реального режима во  время обратного вызова.

     Функция  DPMI_FreeRMCallback  освобождает  все структуры, которые были    распределены    в    результате    обращения      к    функции DPMI_AllocateRMCallback. Функция DPMI_FreeRMCallback должна вызываться только тогда, когда больше нет необходимости в обратном вызове.




- Начало -  - Назад -  - Вперед -