Hauptseite   Übersicht   Auflistung der Dateien   Datenstruktur-Elemente   Datei-Elemente  

Driver.h

gehe zur Dokumentation dieser Datei
00001 extern "C" {
00002 #include <WDM.h>
00003 }
00004 #include "Unicode.h"
00005 
00006 enum DRIVER_STATE {Stopped, Started, Removed};
00007 
00008 typedef struct _DEVICE_EXTENSION {
00009         PDEVICE_OBJECT pDevice;
00010         PDEVICE_OBJECT pLowerDevice;
00011         ULONG DeviceNumber;
00012         CUString ustrDeviceName;        //interner Name
00013         CUString ustrSymLinkName;       //symbolischer Verbindungsname
00014         PUCHAR deviceBuffer;            //temporärer Puffer
00015         ULONG deviceBufferSize;
00016         ULONG xferCount;                        //Bytes transferiert
00017         ULONG maxXferCount;                     //Bytes insgesamt zu transferieren
00018         PUCHAR portBase;                        //Adresse des I/O-Registers
00019         ULONG  portLength;
00020         KIRQL IRQL;                                     //Irq für Parallelschnittstelle
00021         ULONG Vector;
00022         KAFFINITY Affinity;
00023         PKINTERRUPT pIntObj;        //Interrupt-Objekt
00024         BOOLEAN bInterruptExpected;     //TRUE, wenn der Treiber einen Interrupt erwartet
00025         DRIVER_STATE state;                 //aktueller Zustand des Treibers
00026 } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
00027 
00028 #define DATA_REG        0
00029 #define STATUS_REG      1
00030 #define CONTROL_REG     2
00031 
00032 //
00033 // Bits für Statusregister :
00034 //
00035 #define STS_NOT_IRQ     0x04    // 0 Int requested
00036 #define STS_NOT_ERR     0x08    // 0 Error
00037 #define STS_SELCTD      0x10    // 1 Selected
00038 #define STS_PE  0x20            // 1 Paper empty
00039 #define STS_NOT_ACK     0x40    // 0 Acknowledge
00040 #define STS_NOT_BSY     0x80    // 0 Printer busy
00041 
00042 //
00043 // Bits für Steuerregister:
00044 //
00045 #define CTL_STROBE      0x01    // 1 Strobe data
00046 #define CTL_AUTOLF      0x02    // 1 Auto line feed
00047 #define CTL_NOT_RST     0x04    // 0 Reset printer
00048 #define CTL_SELECT      0x08    // 1 Select printer
00049 #define CTL_INTENB      0x10    // 1 Interrupt enable
00050 #define CTL_DEFAULT     0xC0    // (ungenutzte Bits setzen)
00051 
00052 //
00053 // Makros für Registerzugriff. Jedes Makro nimmt einen 
00054 // Zeiger auf eine Geräteerweiterung als Argument
00055 //
00056 #define ReadStatus( pDevExt )                           \
00057 (READ_PORT_UCHAR(                                                       \
00058   pDevExt->portBase + STATUS_REG ))
00059 
00060 #define ReadControl( pDevExt )                  \
00061 (READ_PORT_UCHAR(                                                       \
00062   pDevExt->PortBase + CONTROL_REG ))
00063 
00064 #define WriteControl( pDevExt, bData )  \
00065 (WRITE_PORT_UCHAR(                                                      \
00066   pDevExt->portBase + CONTROL_REG, bData ))
00067 
00068 #define WriteData( pDevExt, bData )             \
00069 (WRITE_PORT_UCHAR(                                              \
00070   pDevExt->portBase + DATA_REG, bData ))
00071 
00072 
00074 
00082 extern "C" NTSTATUS DriverEntry (PDRIVER_OBJECT pDriverObject, \
00083         PUNICODE_STRING pRegistryPath);
00084 static VOID DriverUnload (IN PDRIVER_OBJECT     pDriverObject);
00085 
00086 
00087 static NTSTATUS DispatchCreate (IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp);
00088 static NTSTATUS DispatchClose (IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp);
00089 static NTSTATUS DispatchWrite (IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp);
00090 static NTSTATUS DispatchRead (IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp);
00091 
00092 
00093 static VOID StartIo(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp);
00094 static BOOLEAN Isr (IN PKINTERRUPT pIntObj, IN PVOID pServiceContext);
00095 static VOID DpcForIsr(IN PKDPC pDpc, IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp, IN PVOID pContext);
00096 
00097 
00098 static NTSTATUS AddDevice (IN PDRIVER_OBJECT pDriverObject, IN PDEVICE_OBJECT pPdo);
00099 
00100 static NTSTATUS DispPnp(IN PDEVICE_OBJECT pDO, IN PIRP pIrp);
00101 static NTSTATUS PassDownPnP(IN PDEVICE_OBJECT pDO, IN PIRP pIrp );
00102 
00103 static NTSTATUS HandleStartDevice(IN PDEVICE_OBJECT pDO, IN PIRP pIrp);
00104 static NTSTATUS HandleStopDevice(IN PDEVICE_OBJECT pDO, IN PIRP pIrp );
00105 
00106 static NTSTATUS HandleRemoveDevice(IN PDEVICE_OBJECT pDO, IN PIRP pIrp);

Erzeugt am Thu Jun 19 23:00:23 2003 von doxygen1.2.17