//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) SCM Microsystems, 1998 - 1999 // // File: drivernt.h // //-------------------------------------------------------------------------- #if !defined( __DRIVER_NT_H__ ) #define __DRIVER_NT_H__ #include #include "STCLog.h" #include "SMCLIB.h" #include "WINSMCRD.h" #include "SerialNT.h" #define SMARTCARD_POOL_TAG '3BCS' #if !defined( STATUS_DEVICE_REMOVED ) #define STATUS_DEVICE_REMOVED STATUS_UNSUCCESSFUL #endif void SystemTime( void ); void DataOut( PUCHAR p, ULONG l ); #define LOBYTE( any ) ((UCHAR)( any & 0xFF ) ) #define HIBYTE( any ) ((UCHAR)( ( any >> 8) & 0xFF )) #define SysCompareMemory( p1, p2, Len ) ( RtlCompareMemory( p1,p2, Len ) != Len ) #define SysCopyMemory( pDest, pSrc, Len ) RtlCopyMemory( pDest, pSrc, Len ) #define SysFillMemory( pDest, Value, Len ) RtlFillMemory( pDest, Len, Value ) typedef struct _DEVICE_EXTENSION { SMARTCARD_EXTENSION SmartcardExtension; #if defined( __NT4__ ) BOOLEAN OpenFlag; UNICODE_STRING LinkID; #else KEVENT ReaderStarted; // Used to signal that the reader is able to process reqeusts LONG ReaderOpen; // Used to signal the the reader has been closed KSPIN_LOCK SpinLock; UNICODE_STRING PnPDeviceName; // The pnp device name of our smart card reader PVOID RemoveLock; ULONG DeviceInstance; LONG PowerState; // Used to keep track of the current power state the reader is in LONG IoCount; // The current number of io-requests #endif } DEVICE_EXTENSION, *PDEVICE_EXTENSION; #define IOCTL_SR_COMMAND SCARD_CTL_CODE( 0x800 ) #define IOCTL_GET_VERSIONS SCARD_CTL_CODE( 0x801 ) typedef struct _VERSION_CONTROL { ULONG SmclibVersion; UCHAR DriverMajor, DriverMinor, FirmwareMajor, FirmwareMinor; } VERSION_CONTROL, *PVERSION_CONTROL; #define MAX_READERS 4 NTSTATUS DriverEntry( PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath ); NTSTATUS DrvGetConfiguration( PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath, PULONG pComPort ); NTSTATUS DrvInitDeviceObject( PDRIVER_OBJECT DriverObject, ULONG ComPort ); VOID DrvUnloadDevice( PDEVICE_OBJECT DeviceObject ); VOID DrvUnloadDriver( PDRIVER_OBJECT DriverObject ); NTSTATUS DrvOpenClose( PDEVICE_OBJECT DeviceObject, PIRP Irp ); NTSTATUS DrvDeviceIoControl( PDEVICE_OBJECT DeviceObject, PIRP Irp ); NTSTATUS DrvGenericIOCTL( PSMARTCARD_EXTENSION SmartcardExtension ); void DrvSetupSmartcardExtension( PSMARTCARD_EXTENSION SmartcardExtension ); NTSTATUS DrvCancel( PDEVICE_OBJECT DeviceObject, PIRP Irp ); void SysDelay( ULONG Timeout ); #endif // !__DRIVER_NT_H__