Sync with trunk rev.61910 to get latest improvements and bugfixes.
[reactos.git] / drivers / input / kbdclass / kbdclass.h
1 #include <ntifs.h>
2 #include <ntddkbd.h>
3
4 #define MAX_PATH 260
5
6 #define MIN(a, b) ((a) < (b) ? (a) : (b))
7
8 #define CLASS_TAG 'CdbK'
9 #define DPFLTR_CLASS_NAME_ID DPFLTR_KBDCLASS_ID
10
11 typedef enum
12 {
13 dsStopped,
14 dsStarted,
15 dsPaused,
16 dsRemoved,
17 dsSurpriseRemoved
18 } PORT_DEVICE_STATE;
19
20 typedef struct _CLASS_DRIVER_EXTENSION
21 {
22 UNICODE_STRING RegistryPath;
23
24 /* Registry settings */
25 ULONG ConnectMultiplePorts;
26 ULONG DataQueueSize;
27 UNICODE_STRING DeviceBaseName;
28
29 PDEVICE_OBJECT MainClassDeviceObject;
30 } CLASS_DRIVER_EXTENSION, *PCLASS_DRIVER_EXTENSION;
31
32 typedef struct _COMMON_DEVICE_EXTENSION
33 {
34 BOOLEAN IsClassDO;
35 } COMMON_DEVICE_EXTENSION, *PCOMMON_DEVICE_EXTENSION;
36
37 typedef struct _PORT_DEVICE_EXTENSION
38 {
39 COMMON_DEVICE_EXTENSION Common;
40
41 LIST_ENTRY ListEntry;
42 PDEVICE_OBJECT DeviceObject;
43 PORT_DEVICE_STATE PnpState;
44 PDEVICE_OBJECT LowerDevice;
45 PDEVICE_OBJECT ClassDO;
46 HANDLE FileHandle;
47 UNICODE_STRING InterfaceName;
48 } PORT_DEVICE_EXTENSION, *PPORT_DEVICE_EXTENSION;
49
50 typedef struct _CLASS_DEVICE_EXTENSION
51 {
52 COMMON_DEVICE_EXTENSION Common;
53
54 PCLASS_DRIVER_EXTENSION DriverExtension;
55
56 LIST_ENTRY ListHead;
57 KSPIN_LOCK ListSpinLock;
58 KSPIN_LOCK SpinLock;
59 PIRP PendingIrp;
60 SIZE_T InputCount;
61 PKEYBOARD_INPUT_DATA PortData;
62 LPCWSTR DeviceName;
63 } CLASS_DEVICE_EXTENSION, *PCLASS_DEVICE_EXTENSION;
64
65 /* misc.c */
66
67 NTSTATUS
68 ForwardIrpAndWait(
69 IN PDEVICE_OBJECT DeviceObject,
70 IN PIRP Irp);
71
72 DRIVER_DISPATCH ForwardIrpAndForget;
73
74 NTSTATUS
75 DuplicateUnicodeString(
76 IN ULONG Flags,
77 IN PCUNICODE_STRING SourceString,
78 OUT PUNICODE_STRING DestinationString);