Go to the documentation of this file.00001 #include <ntifs.h>
00002 #include <kbdmou.h>
00003 #include <ntddkbd.h>
00004 #include <stdio.h>
00005 #include <pseh/pseh2.h>
00006
00007 #include <debug.h>
00008
00009 #define MAX_PATH 260
00010
00011 #define MIN(a, b) ((a) < (b) ? (a) : (b))
00012
00013 #define CLASS_TAG 'CdbK'
00014 #define DPFLTR_CLASS_NAME_ID DPFLTR_KBDCLASS_ID
00015
00016 typedef enum
00017 {
00018 dsStopped,
00019 dsStarted,
00020 dsPaused,
00021 dsRemoved,
00022 dsSurpriseRemoved
00023 } PORT_DEVICE_STATE;
00024
00025 typedef struct _CLASS_DRIVER_EXTENSION
00026 {
00027 UNICODE_STRING RegistryPath;
00028
00029
00030 ULONG ConnectMultiplePorts;
00031 ULONG DataQueueSize;
00032 UNICODE_STRING DeviceBaseName;
00033
00034 PDEVICE_OBJECT MainClassDeviceObject;
00035 } CLASS_DRIVER_EXTENSION, *PCLASS_DRIVER_EXTENSION;
00036
00037 typedef struct _COMMON_DEVICE_EXTENSION
00038 {
00039 BOOLEAN IsClassDO;
00040 } COMMON_DEVICE_EXTENSION, *PCOMMON_DEVICE_EXTENSION;
00041
00042 typedef struct _PORT_DEVICE_EXTENSION
00043 {
00044 COMMON_DEVICE_EXTENSION Common;
00045
00046 LIST_ENTRY ListEntry;
00047 PDEVICE_OBJECT DeviceObject;
00048 PORT_DEVICE_STATE PnpState;
00049 PDEVICE_OBJECT LowerDevice;
00050 PDEVICE_OBJECT ClassDO;
00051 HANDLE FileHandle;
00052 UNICODE_STRING InterfaceName;
00053 } PORT_DEVICE_EXTENSION, *PPORT_DEVICE_EXTENSION;
00054
00055 typedef struct _CLASS_DEVICE_EXTENSION
00056 {
00057 COMMON_DEVICE_EXTENSION Common;
00058
00059 PCLASS_DRIVER_EXTENSION DriverExtension;
00060
00061 LIST_ENTRY ListHead;
00062 KSPIN_LOCK ListSpinLock;
00063 KSPIN_LOCK SpinLock;
00064 PIRP PendingIrp;
00065 SIZE_T InputCount;
00066 PKEYBOARD_INPUT_DATA PortData;
00067 LPCWSTR DeviceName;
00068 } CLASS_DEVICE_EXTENSION, *PCLASS_DEVICE_EXTENSION;
00069
00070
00071
00072 NTSTATUS
00073 ForwardIrpAndWait(
00074 IN PDEVICE_OBJECT DeviceObject,
00075 IN PIRP Irp);
00076
00077 DRIVER_DISPATCH ForwardIrpAndForget;
00078
00079 NTSTATUS
00080 DuplicateUnicodeString(
00081 IN ULONG Flags,
00082 IN PCUNICODE_STRING SourceString,
00083 OUT PUNICODE_STRING DestinationString);