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


Прерывания при стандартном режиме работы системы Windows - часть 2


     Однако,  как  уже  упоминалось,  установления  связи  с  вектором прерывания  в   защищенном  режиме   недостаточно.  Необходимо   также обеспечить связь  с вектором  прерывания в  реальном режиме,  а это не тривиальная задача.

______________________________________________________________________

/*EM  BOGUS.C - Драйвер фиктивного устройства библиотеки DLL

*

* SUMMARY (Резюме)

*     Базовые функции LibMain, WEP

*

* COMMENTS (Комментарии)

*

* WARNINGS (Предупреждения)

*

*/

 

#include

#include "bogusa.h"

#include "pic.h"

#include "dpmi.h"

 

#define EXPORT _export _loadds

#include "bogus.h"

 

#define FAKE_PORT   0x141 /* Уровень фиктивности (bogosity) - 9.4 */

#define FAKE_IRQ    11   /* Уровень фиктивности (bogosity) - 9.8 */

 

#define FAKE_CTL_START   0x01

  /* команда "начать" фиктивного порта (устанавливается в нуль) */

#define FAKE_CTL_EOI     0x02

  /* EOI фиктивного порта  */

#define FAKE_STAT_BUSY   0x01

  /* индикация занятости фиктивного порта (zero=>busy) */

#define FAKE_STAT_IRQ    0x02

  /* IRQ фиктивного порта (zero=>IRQ) */

#define FAKE_STAT_ERROR  0x04

  /* ошибка ввода-вывода (zero=>error) (сбрасывается при чтении) */

 

/* Установить переменные для нашего номера прерывания */

 

#if (FAKE_IRQ<8)

#define INT_DEV (INT_MASTER_0+(FAKE_IRQ & 7))

#define PIC00 INTA00

#define PIC01 INTA01

#else

#define INT_DEV (INT_SLAVE_0+(FAKE_IRQ & 7))

#define PIC00 INTB00

#define PIC01 INTB01

#endif

#define INT_MASK (1 << (FAKE_IRQ & 7))

 

BOOL FAR PASCAL LibMain(HANDLE hInstance

   /* обработчик библиотечного экземпляра*/

                ,WORD wDataSeg

   /* сегмент данных по умолчанию */

                ,WORD cbHeap

   /* размер динамической области по умолчанию */

                ,LPSTR lpszCmdLine) ;

   /* командная строка */

int FAR PASCAL WEP(int fSystemExit) ;

#pragma alloc_text(INIT_TEXT,LibMain)




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