#define FILE_DEVICE_KRNLDRVR 0x80ff #define NT_DEVICE_NAME L"\\Device\\IRQCOS0" #define DOS_DEVICE_NAME L"\\DosDevices\\IRQCOS" #define IOCTL_IRQCOS_INIT_COS_DRIVER CTL_CODE(FILE_DEVICE_KRNLDRVR, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_IRQCOS_GET_DATA CTL_CODE(FILE_DEVICE_KRNLDRVR, 0x804, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_IRQCOS_ABORT CTL_CODE(FILE_DEVICE_KRNLDRVR, 0x805, METHOD_BUFFERED, FILE_ANY_ACCESS) typedef struct _IRQCOS_DEVICE_EXTENSION { PDEVICE_OBJECT DeviceObject; PKINTERRUPT InterruptObject; BOOLEAN InterruptOccurred; BOOLEAN InterruptRequested; BOOLEAN InterruptConnected; PIRP PendingIrp; BOOLEAN HasPendingIrp; UCHAR ReturnData[6]; ULONG BaseAddress; UCHAR IRQ; } IRQCOS_DEVICE_EXTENSION, *PIRQCOS_DEVICE_EXTENSION; typedef struct _IRQCOS_INIT_DATA { unsigned long BaseAddress; unsigned short IRQ; short BusType; unsigned short BusNumber; } IRQCOS_INIT_DATA, *PIRQCOS_INIT_DATA; BOOLEAN IRQCOSInterruptServiceRoutine( IN PKINTERRUPT Interrupt, IN OUT PVOID Context ); VOID IRQCOSDpcForIsrRoutine( IN PKDPC Dpc, IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context ); NTSTATUS IRQCOSOpenClose( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); VOID IRQCOSUnload( IN PDRIVER_OBJECT DriverObject ); NTSTATUS IRQCOSDeviceControl( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); VOID IRQCOSCancelIrp( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp );