ReactOS  0.4.12-dev-708-g95ed44e
i8042prt.h
Go to the documentation of this file.
1 #ifndef _I8042PRT_PCH_
2 #define _I8042PRT_PCH_
3 
4 #include <ntifs.h>
5 #include <kbdmou.h>
6 #include <ntdd8042.h>
7 
8 /*-----------------------------------------------------
9  * Structures
10  * --------------------------------------------------*/
11 
12 #define I8042PRT_TAG '2408'
13 
14 typedef enum
15 {
21 } DEVICE_STATE;
22 
23 typedef struct _I8042_SETTINGS
24 {
25  /* Registry settings */
38  ULONG ResendIterations; /* done */
42 
44 {
49 
50 typedef struct _INTERRUPT_DATA
51 {
59 
60 #define WHEEL_DELTA 120
61 
66 
67 /* PORT_DEVICE_EXTENSION.Flags */
68 #define KEYBOARD_PRESENT 0x01 /* A keyboard is attached */
69 #define KEYBOARD_CONNECTED 0x02 /* Keyboard received IOCTL_INTERNAL_KEYBOARD_CONNECT */
70 #define KEYBOARD_STARTED 0x04 /* Keyboard FDO received IRP_MN_START_DEVICE */
71 #define KEYBOARD_INITIALIZED 0x08 /* Keyboard interrupt is connected */
72 #define MOUSE_PRESENT 0x10 /* A mouse is attached */
73 #define MOUSE_CONNECTED 0x20 /* Mouse received IOCTL_INTERNAL_MOUSE_CONNECT */
74 #define MOUSE_STARTED 0x40 /* Mouse FDO received IRP_MN_START_DEVICE */
75 #define MOUSE_INITIALIZED 0x80 /* Mouse interrupt is connected */
76 
77 typedef struct _PORT_DEVICE_EXTENSION
78 {
79  PUCHAR DataPort; /* Usually 0x60 */
80  PUCHAR ControlPort; /* Usually 0x64 */
83 
91 
98 
102 
104 {
106 
111 
112 typedef enum _I8042_DEVICE_TYPE
113 {
119 
120 typedef struct _FDO_DEVICE_EXTENSION
121 {
123  // Linkage in I8042_DRIVER_EXTENSION.DeviceListHead
125  // Associated device object (FDO)
127  // Associated device object (PDO)
129  // Lower device object
131  // Current state of the driver
133 
136 
138 {
141  INTERNAL_I8042_HOOK_KEYBOARD KeyboardHook; /* FIXME: IsrWritePort ignored */
143 
145 
147 
152 
153  /* Power keys items */
160 
161  /* Debug items */
166 
167 typedef enum _I8042_MOUSE_TYPE
168 {
174 
176 {
181 
183 
191 
196 
200 
201 typedef struct _I8042_HOOK_WORKITEM
202 {
206 
207 /*-----------------------------------------------------
208  * Some defines
209  * --------------------------------------------------*/
210 
211 #define MAX(a, b) ((a) >= (b) ? (a) : (b))
212 
213 #define KEYBOARD_POWER_CODE 0x5E
214 #define KEYBOARD_SLEEP_CODE 0x5F
215 #define KEYBOARD_WAKE_CODE 0x63
216 
217 /*-----------------------------------------------------
218  * Controller commands
219  * --------------------------------------------------*/
220 
221 #define KBD_READ_MODE 0x20
222 #define KBD_WRITE_MODE 0x60
223 #define MOUSE_ENAB 0xA8
224 #define MOUSE_LINE_TEST 0xA9
225 #define CTRL_SELF_TEST 0xAA
226 #define KBD_CLK_DISABLE 0xAD
227 #define KBD_CLK_ENABLE 0xAE
228 #define CTRL_WRITE_MOUSE 0xD4
229 
230 /*-----------------------------------------------------
231  * Keyboard commands
232  * --------------------------------------------------*/
233 
234 #define KBD_CMD_SET_LEDS 0xED
235 #define KBD_CMD_GET_ID 0xF2
236 
237 /*-----------------------------------------------------
238  * Keyboard responses
239  * --------------------------------------------------*/
240 
241 #define KBD_SELF_TEST_OK 0x55
242 #define KBD_ACK 0xFA
243 #define KBD_NACK 0xFC
244 #define KBD_RESEND 0xFE
245 
246 /*-----------------------------------------------------
247  * Controller status register bits
248  * --------------------------------------------------*/
249 
250 #define KBD_OBF 0x01
251 #define KBD_IBF 0x02
252 #define MOU_OBF 0x20
253 #define KBD_PERR 0x80
254 
255 /*-----------------------------------------------------
256  * Controller command byte bits
257  * --------------------------------------------------*/
258 
259 #define CCB_KBD_INT_ENAB 0x01
260 #define CCB_MOUSE_INT_ENAB 0x02
261 #define CCB_SYSTEM_FLAG 0x04
262 #define CCB_KBD_DISAB 0x10
263 #define CCB_MOUSE_DISAB 0x20
264 #define CCB_TRANSLATE 0x40
265 
266 /*-----------------------------------------------------
267  * LED bits
268  * --------------------------------------------------*/
269 
270 #define KBD_LED_SCROLL 0x01
271 #define KBD_LED_NUM 0x02
272 #define KBD_LED_CAPS 0x04
273 
274 /*-----------------------------------------------------
275  * Mouse commands
276  * --------------------------------------------------*/
277 
278 #define MOU_ENAB 0xF4
279 #define MOU_CMD_RESET 0xFF
280 
281 /*-----------------------------------------------------
282  * Mouse responses
283  * --------------------------------------------------*/
284 
285 #define MOUSE_ACK 0xFA
286 #define MOUSE_ERROR 0xFC
287 #define MOUSE_NACK 0xFE
288 
289 /*-----------------------------------------------------
290  * Prototypes
291  * --------------------------------------------------*/
292 
293 /* createclose.c */
294 
295 IO_WORKITEM_ROUTINE i8042SendHookWorkItem;
296 
299 
302 
305 
306 /* keyboard.c */
307 
310  IN PVOID Context,
311  IN UCHAR Value,
312  IN BOOLEAN WaitForAck);
313 
314 DRIVER_STARTIO i8042KbdStartIo;
315 
317 
319 
320 KSERVICE_ROUTINE i8042KbdInterruptService;
321 
322 /* i8042prt.c */
323 
324 DRIVER_ADD_DEVICE i8042AddDevice;
325 
326 BOOLEAN
328  IN PPORT_DEVICE_EXTENSION DeviceExtension,
329  IN UCHAR Output);
330 
331 NTSTATUS
333  IN PPORT_DEVICE_EXTENSION DeviceExtension,
334  IN PFDO_DEVICE_EXTENSION FdoDeviceExtension,
335  IN PUCHAR Bytes,
337  IN PIRP Irp);
338 
339 /* misc.c */
340 
342 
344 
345 NTSTATUS
347  IN ULONG Flags,
350 
351 /* mouse.c */
352 
353 VOID
355  IN PI8042_MOUSE_EXTENSION DeviceExtension,
356  IN UCHAR Output);
357 
358 VOID
360  IN PI8042_MOUSE_EXTENSION DeviceExtension,
361  IN USHORT Mask);
362 
363 NTSTATUS
365  IN PI8042_MOUSE_EXTENSION DeviceExtension);
366 
368 
369 KSERVICE_ROUTINE i8042MouInterruptService;
370 
371 /* pnp.c */
372 
373 BOOLEAN
375  IN PPORT_DEVICE_EXTENSION DeviceExtension,
376  IN UCHAR FlagsToDisable,
377  IN UCHAR FlagsToEnable);
378 
381 
382 /* ps2pp.c */
383 VOID
385  IN PI8042_MOUSE_EXTENSION DeviceExtension,
386  IN UCHAR Input);
387 
388 /* readwrite.c */
389 
390 VOID
391 i8042Flush(
392  IN PPORT_DEVICE_EXTENSION DeviceExtension);
393 
394 BOOLEAN
396  IN PPORT_DEVICE_EXTENSION DeviceExtension,
397  IN UCHAR Value,
398  IN UCHAR SelectCmd OPTIONAL);
399 
400 NTSTATUS
402  IN PPORT_DEVICE_EXTENSION DeviceExtension,
403  IN UCHAR StatusFlags,
404  OUT PUCHAR Data);
405 #define i8042ReadKeyboardData(DeviceExtension, Data) \
406  i8042ReadData(DeviceExtension, KBD_OBF, Data)
407 #define i8042ReadMouseData(DeviceExtension, Data) \
408  i8042ReadData(DeviceExtension, MOU_OBF, Data)
409 
410 NTSTATUS
412  IN PPORT_DEVICE_EXTENSION DeviceExtension,
413  OUT PUCHAR Data);
414 
415 NTSTATUS
417  IN PPORT_DEVICE_EXTENSION DeviceExtension,
418  OUT PUCHAR Status);
419 
422  IN PVOID Context,
423  OUT PUCHAR Value,
424  IN BOOLEAN WaitForAck);
425 
428  IN PPORT_DEVICE_EXTENSION DeviceExtension,
429  IN UCHAR Port,
430  IN UCHAR Value,
431  IN BOOLEAN WaitForAck);
432 
433 BOOLEAN
434 i8042Write(
435  IN PPORT_DEVICE_EXTENSION DeviceExtension,
436  IN PUCHAR addr,
437  IN UCHAR data);
438 
439 /* registry.c */
440 
441 NTSTATUS
445 
446 /* hwhacks.c */
447 
448 VOID
449 NTAPI
451  VOID);
452 
453 enum _FLAGS
454 {
455  FL_NOLOOP = 0x01,
456  FL_INITHACK = 0x02,
457 };
458 
459 extern ULONG i8042HwFlags;
460 
461 #endif /* _I8042PRT_PCH_ */
KEYBOARD_INDICATOR_PARAMETERS KeyboardIndicators
Definition: i8042prt.h:146
_In_opt_ ULONG _Out_ PULONG Value
Definition: rtlfuncs.h:2327
ULONG i8042HwFlags
Definition: hwhacks.c:22
DEVICE_STATE
Definition: i8042prt.h:14
NTSTATUS i8042ReadData(IN PPORT_DEVICE_EXTENSION DeviceExtension, IN UCHAR StatusFlags, OUT PUCHAR Data)
Definition: readwrite.c:56
NTSTATUS i8042ReadStatus(IN PPORT_DEVICE_EXTENSION DeviceExtension, OUT PUCHAR Status)
Definition: readwrite.c:82
CPPORT Port[4]
Definition: headless.c:34
#define IN
Definition: typedefs.h:38
#define IRP_MJ_CREATE
Definition: rdpdr.c:44
UNICODE_STRING PointerDeviceBaseName
Definition: i8042prt.h:32
struct _I8042_HOOK_WORKITEM I8042_HOOK_WORKITEM
KSPIN_LOCK SpinLock
Definition: i8042prt.h:89
struct _INTERRUPT_DATA * PINTERRUPT_DATA
PI8042_KEYBOARD_EXTENSION KeyboardExtension
Definition: i8042prt.h:84
PIO_WORKITEM WorkItem
Definition: i8042prt.h:203
_I8042_DEVICE_TYPE
Definition: i8042prt.h:112
ULONG MouseDataQueueSize
Definition: i8042prt.h:28
struct _FDO_DEVICE_EXTENSION * PFDO_DEVICE_EXTENSION
_In_ PIRP Irp
Definition: csq.h:116
enum _MOUSE_TIMEOUT_STATE MOUSE_TIMEOUT_STATE
I8042_MOUSE_TYPE MouseType
Definition: i8042prt.h:198
enum _I8042_DEVICE_TYPE * PI8042_DEVICE_TYPE
ULONG CrashOnCtrlScroll
Definition: i8042prt.h:40
unsigned char * PUCHAR
Definition: retypes.h:3
NTSTATUS NTAPI i8042Pnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: pnp.c:675
KAFFINITY Affinity
Definition: i8042prt.h:57
#define IRP_MJ_PNP
Definition: cdrw_usr.h:52
VOID i8042MouHandlePs2pp(IN PI8042_MOUSE_EXTENSION DeviceExtension, IN UCHAR Input)
Definition: ps2pp.c:19
PKINTERRUPT HighestDIRQLInterrupt
Definition: i8042prt.h:88
LIST_ENTRY ListEntry
Definition: pci.h:82
DRIVER_DISPATCH ForwardIrpAndForget
Definition: i8042prt.h:341
LONG NTSTATUS
Definition: precomp.h:26
_In_ UINT Bytes
Definition: mmcopy.h:9
Definition: arc.h:84
NTSTATUS NTAPI i8042Create(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: createclose.c:18
BOOLEAN i8042Write(IN PPORT_DEVICE_EXTENSION DeviceExtension, IN PUCHAR addr, IN UCHAR data)
Definition: readwrite.c:199
BOOLEAN i8042IsrWritePort(IN PPORT_DEVICE_EXTENSION DeviceExtension, IN UCHAR Value, IN UCHAR SelectCmd OPTIONAL)
Definition: readwrite.c:40
enum _MOUSE_STATE MOUSE_STATE
PDEVICE_OBJECT CurrentIrpDevice
Definition: i8042prt.h:100
VOID i8042Flush(IN PPORT_DEVICE_EXTENSION DeviceExtension)
Definition: readwrite.c:21
DRIVER_DISPATCH i8042KbdDeviceControl
Definition: i8042prt.h:316
VOID i8042MouHandleButtons(IN PI8042_MOUSE_EXTENSION DeviceExtension, IN USHORT Mask)
Definition: mouse.c:191
I8042_SETTINGS Settings
Definition: i8042prt.h:81
PI8042_MOUSE_EXTENSION MouseExtension
Definition: i8042prt.h:86
ULONG OverrideKeyboardSubtype
Definition: i8042prt.h:35
ULONG OverrideKeyboardType
Definition: i8042prt.h:34
struct _I8042_DRIVER_EXTENSION I8042_DRIVER_EXTENSION
UCHAR MouseLogiBuffer[3]
Definition: i8042prt.h:197
struct _I8042_KEYBOARD_EXTENSION * PI8042_KEYBOARD_EXTENSION
Definition: i8042prt.h:63
NTSTATUS PacketResult
Definition: i8042prt.h:95
NTSTATUS NTAPI i8042Close(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: createclose.c:46
DRIVER_ADD_DEVICE i8042AddDevice
Definition: i8042prt.h:324
INTERRUPT_DATA KeyboardInterrupt
Definition: i8042prt.h:85
struct _FDO_DEVICE_EXTENSION FDO_DEVICE_EXTENSION
struct _I8042_DRIVER_EXTENSION * PI8042_DRIVER_EXTENSION
DRIVER_STARTIO i8042KbdStartIo
Definition: i8042prt.h:314
UCHAR KIRQL
Definition: env_spec_w32.h:591
PKEYBOARD_INPUT_DATA KeyboardBuffer
Definition: i8042prt.h:150
_I8042_MOUSE_TYPE
Definition: i8042prt.h:167
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
ULONG ResendIterations
Definition: i8042prt.h:38
PPORT_DEVICE_EXTENSION PortDeviceExtension
Definition: i8042prt.h:134
ULONG NumberOfButtons
Definition: i8042prt.h:31
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
unsigned char BOOLEAN
_Out_ _Inout_ POEM_STRING DestinationString
Definition: rtlfuncs.h:1869
UNICODE_STRING PowerInterfaceName
Definition: i8042prt.h:157
enum _KINTERRUPT_MODE KINTERRUPT_MODE
ULONG Vector
Definition: i8042prt.h:53
ULONG KeyboardDataQueueSize
Definition: i8042prt.h:26
FDO_DEVICE_EXTENSION Common
Definition: i8042prt.h:177
MOUSE_TIMEOUT_STATE MouseTimeoutState
Definition: i8042prt.h:194
ULONG PollingIterationsMaximum
Definition: i8042prt.h:37
struct _PORT_DEVICE_EXTENSION PORT_DEVICE_EXTENSION
PIO_WORKITEM DebugWorkItem
Definition: i8042prt.h:163
PKINTERRUPT Object
Definition: i8042prt.h:52
UCHAR PacketBuffer[16]
Definition: i8042prt.h:96
NTSTATUS i8042MouInitialize(IN PI8042_MOUSE_EXTENSION DeviceExtension)
Definition: mouse.c:224
enum _MOUSE_RESET_SUBSTATE MOUSE_RESET_SUBSTATE
MOUSE_ATTRIBUTES MouseAttributes
Definition: i8042prt.h:182
KEYBOARD_SCAN_STATE KeyboardScanState
Definition: i8042prt.h:148
INTERNAL_I8042_HOOK_KEYBOARD KeyboardHook
Definition: i8042prt.h:141
FDO_DEVICE_EXTENSION Common
Definition: i8042prt.h:139
OUTPUT_PACKET Packet
Definition: i8042prt.h:92
NTSTATUS DuplicateUnicodeString(IN ULONG Flags, IN PCUNICODE_STRING SourceString, OUT PUNICODE_STRING DestinationString)
Definition: misc.c:72
struct _I8042_MOUSE_EXTENSION I8042_MOUSE_EXTENSION
KEYBOARD_ATTRIBUTES KeyboardAttributes
Definition: i8042prt.h:144
BOOLEAN ShareInterrupt
Definition: i8042prt.h:56
DRIVER_DISPATCH ForwardIrpAndWait
Definition: i8042prt.h:343
NTSTATUS NTAPI i8042SynchWritePortKbd(IN PVOID Context, IN UCHAR Value, IN BOOLEAN WaitForAck)
Definition: keyboard.c:87
PORT_DEVICE_EXTENSION Port
Definition: i8042prt.h:107
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
SETTINGS Settings
Definition: charmap.c:26
I8042_DEVICE_TYPE Type
Definition: i8042prt.h:122
IO_WORKITEM_ROUTINE i8042SendHookWorkItem
Definition: i8042prt.h:295
unsigned char UCHAR
Definition: xmlstorage.h:181
INTERRUPT_DATA MouseInterrupt
Definition: i8042prt.h:87
#define IRP_MJ_CLOSE
Definition: rdpdr.c:45
struct _PORT_DEVICE_EXTENSION * PPORT_DEVICE_EXTENSION
GLenum const GLvoid * addr
Definition: glext.h:9621
_Out_ _Inout_ POEM_STRING _In_ PCUNICODE_STRING SourceString
Definition: rtlfuncs.h:1869
enum _I8042_MOUSE_TYPE * PI8042_MOUSE_TYPE
Definition: ketypes.h:687
INTERNAL_I8042_HOOK_MOUSE MouseHook
Definition: i8042prt.h:179
Definition: arc.h:85
NTSTATUS NTAPI i8042Cleanup(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: createclose.c:32
NTSTATUS NTAPI i8042SynchWritePort(IN PPORT_DEVICE_EXTENSION DeviceExtension, IN UCHAR Port, IN UCHAR Value, IN BOOLEAN WaitForAck)
Definition: readwrite.c:144
CONNECT_DATA KeyboardData
Definition: i8042prt.h:140
Definition: typedefs.h:117
enum _I8042_MOUSE_TYPE I8042_MOUSE_TYPE
DRIVER_DISPATCH(nfs41_FsdDispatch)
NTSTATUS NTAPI i8042SynchReadPort(IN PVOID Context, OUT PUCHAR Value, IN BOOLEAN WaitForAck)
Definition: readwrite.c:125
UNICODE_STRING RegistryPath
Definition: i8042prt.h:105
struct _I8042_SETTINGS * PI8042_SETTINGS
BOOLEAN PacketComplete
Definition: i8042prt.h:94
BOOLEAN i8042PacketIsr(IN PPORT_DEVICE_EXTENSION DeviceExtension, IN UCHAR Output)
Definition: i8042prt.c:272
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _In_ LARGE_INTEGER ByteCount
Definition: iotypes.h:1060
Status
Definition: gdiplustypes.h:24
PMOUSE_INPUT_DATA MouseBuffer
Definition: i8042prt.h:187
_Dispatch_type_(IRP_MJ_CREATE) DRIVER_DISPATCH i8042Create
Definition: create.c:3953
PDEVICE_OBJECT Fdo
Definition: i8042prt.h:126
_FLAGS
Definition: i8042prt.h:453
struct _I8042_KEYBOARD_EXTENSION I8042_KEYBOARD_EXTENSION
ULARGE_INTEGER MousePacketStartTime
Definition: i8042prt.h:190
ULONG SampleRate
Definition: i8042prt.h:39
enum _MOUSE_TIMEOUT_STATE * PMOUSE_TIMEOUT_STATE
enum _KEYBOARD_SCAN_STATE KEYBOARD_SCAN_STATE
unsigned short USHORT
Definition: pedump.c:61
MOUSE_STATE MouseState
Definition: i8042prt.h:184
ULONG_PTR KAFFINITY
Definition: compat.h:75
enum _I8042_DEVICE_TYPE I8042_DEVICE_TYPE
NTSTATUS ReadRegistryEntries(IN PUNICODE_STRING RegistryPath, OUT PI8042_SETTINGS Settings)
Definition: registry.c:21
CONNECT_DATA MouseData
Definition: i8042prt.h:178
UNICODE_STRING KeyboardDeviceBaseName
Definition: i8042prt.h:27
ULONG KSPIN_LOCK
Definition: env_spec_w32.h:72
MOUSE_RESET_SUBSTATE MouseResetState
Definition: i8042prt.h:186
LIST_ENTRY DeviceListHead
Definition: i8042prt.h:108
ULONG PollingIterations
Definition: i8042prt.h:36
BOOLEAN MouseTimeoutActive
Definition: i8042prt.h:195
DEVICE_STATE PnpState
Definition: i8042prt.h:132
ULONG PollStatusIterations
Definition: i8042prt.h:33
struct _I8042_HOOK_WORKITEM * PI8042_HOOK_WORKITEM
#define IRP_MJ_CLEANUP
#define OUT
Definition: typedefs.h:39
PDEVICE_OBJECT Pdo
Definition: i8042prt.h:128
unsigned int ULONG
Definition: retypes.h:1
VOID NTAPI i8042InitializeHwHacks(VOID)
Definition: hwhacks.c:182
_In_ PUNICODE_STRING RegistryPath
Definition: wmip.h:27
struct _I8042_SETTINGS I8042_SETTINGS
NTSTATUS i8042ReadDataWait(IN PPORT_DEVICE_EXTENSION DeviceExtension, OUT PUCHAR Data)
Definition: readwrite.c:95
PDEVICE_OBJECT LowerDevice
Definition: i8042prt.h:130
DRIVER_DISPATCH i8042MouInternalDeviceControl
Definition: i8042prt.h:367
struct _INTERRUPT_DATA INTERRUPT_DATA
VOID i8042MouHandle(IN PI8042_MOUSE_EXTENSION DeviceExtension, IN UCHAR Output)
Definition: mouse.c:68
BOOLEAN i8042ChangeMode(IN PPORT_DEVICE_EXTENSION DeviceExtension, IN UCHAR FlagsToDisable, IN UCHAR FlagsToEnable)
Definition: pnp.c:37
KSERVICE_ROUTINE i8042KbdInterruptService
Definition: i8042prt.h:320
_MOUSE_TIMEOUT_STATE
Definition: i8042prt.h:43
struct _I8042_MOUSE_EXTENSION * PI8042_MOUSE_EXTENSION
Definition: i8042prt.h:65
PIO_WORKITEM PowerWorkItem
Definition: i8042prt.h:158
DRIVER_DISPATCH i8042KbdInternalDeviceControl
Definition: i8042prt.h:318
ULONG MouseResolution
Definition: i8042prt.h:29
KINTERRUPT_MODE InterruptMode
Definition: i8042prt.h:55
NTSTATUS i8042StartPacket(IN PPORT_DEVICE_EXTENSION DeviceExtension, IN PFDO_DEVICE_EXTENSION FdoDeviceExtension, IN PUCHAR Bytes, IN ULONG ByteCount, IN PIRP Irp)
Definition: i8042prt.c:330
KSPIN_LOCK DeviceListLock
Definition: i8042prt.h:109
KSERVICE_ROUTINE i8042MouInterruptService
Definition: i8042prt.h:369
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
ULONG MouseSynchIn100ns
Definition: i8042prt.h:30