1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
|
/*++ BUILD Version: 0001 // Increment this if a change has global effects
Copyright (c) 1990-1993 Microsoft Corporation
Module Name:
ntddmou.h
Abstract:
This is the include file that defines all constants and types for
accessing the mouse device.
Author:
Lee A. Smith (lees) 02-Aug-1991.
Revision History:
--*/
#ifndef _NTDDMOU_
#define _NTDDMOU_
//
// Device Name - this string is the name of the device. It is the name
// that should be passed to NtOpenFile when accessing the device.
//
// Note: For devices that support multiple units, it should be suffixed
// with the Ascii representation of the unit number.
//
#define DD_MOUSE_DEVICE_NAME "\\Device\\PointerClass"
#define DD_MOUSE_DEVICE_NAME_U L"\\Device\\PointerClass"
//
// NtDeviceIoControlFile IoControlCode values for this device.
//
// Warning: Remember that the low two bits of the code specify how the
// buffers are passed to the driver!
//
#define IOCTL_MOUSE_QUERY_ATTRIBUTES CTL_CODE(FILE_DEVICE_MOUSE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_MOUSE_INSERT_DATA CTL_CODE(FILE_DEVICE_MOUSE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
//
// NtReadFile Output Buffer record structures for this device.
//
typedef struct _MOUSE_INPUT_DATA {
//
// Unit number. E.g., for \Device\PointerPort0 the unit is '0',
// for \Device\PointerPort1 the unit is '1', and so on.
//
USHORT UnitId;
//
// Indicator flags.
//
USHORT Flags;
//
// The transition state of the mouse buttons.
//
union {
ULONG Buttons;
struct {
USHORT ButtonFlags;
USHORT ButtonData;
};
};
//
// The raw state of the mouse buttons.
//
ULONG RawButtons;
//
// The signed relative or absolute motion in the X direction.
//
LONG LastX;
//
// The signed relative or absolute motion in the Y direction.
//
LONG LastY;
//
// Device-specific additional information for the event.
//
ULONG ExtraInformation;
} MOUSE_INPUT_DATA, *PMOUSE_INPUT_DATA;
//
// Define the mouse button state indicators.
//
#define MOUSE_LEFT_BUTTON_DOWN 0x0001 // Left Button changed to down.
#define MOUSE_LEFT_BUTTON_UP 0x0002 // Left Button changed to up.
#define MOUSE_RIGHT_BUTTON_DOWN 0x0004 // Right Button changed to down.
#define MOUSE_RIGHT_BUTTON_UP 0x0008 // Right Button changed to up.
#define MOUSE_MIDDLE_BUTTON_DOWN 0x0010 // Middle Button changed to down.
#define MOUSE_MIDDLE_BUTTON_UP 0x0020 // Middle Button changed to up.
#define MOUSE_BUTTON_1_DOWN MOUSE_LEFT_BUTTON_DOWN
#define MOUSE_BUTTON_1_UP MOUSE_LEFT_BUTTON_UP
#define MOUSE_BUTTON_2_DOWN MOUSE_RIGHT_BUTTON_DOWN
#define MOUSE_BUTTON_2_UP MOUSE_RIGHT_BUTTON_UP
#define MOUSE_BUTTON_3_DOWN MOUSE_MIDDLE_BUTTON_DOWN
#define MOUSE_BUTTON_3_UP MOUSE_MIDDLE_BUTTON_UP
#define MOUSE_BUTTON_4_DOWN 0x0040
#define MOUSE_BUTTON_4_UP 0x0080
#define MOUSE_BUTTON_5_DOWN 0x0100
#define MOUSE_BUTTON_5_UP 0x0200
#define MOUSE_WHEEL 0x0400
//
// Define the mouse indicator flags.
//
#define MOUSE_MOVE_RELATIVE 0
#define MOUSE_MOVE_ABSOLUTE 1
//
// NtDeviceIoControlFile OutputBuffer record structures for
// IOCTL_MOUSE_QUERY_ATTRIBUTES.
//
typedef struct _MOUSE_ATTRIBUTES {
//
// Mouse ID value. Used to distinguish between mouse types.
//
USHORT MouseIdentifier;
//
// Number of buttons located on the mouse.
//
USHORT NumberOfButtons;
//
// Specifies the rate at which the hardware reports mouse input
// (reports per second). This may not be applicable for every mouse device.
//
USHORT SampleRate;
//
// Length of the readahead buffer, in bytes.
//
ULONG InputDataQueueLength;
} MOUSE_ATTRIBUTES, *PMOUSE_ATTRIBUTES;
//
// Define the mouse identifier types.
//
#define MOUSE_INPORT_HARDWARE 0x0001
#define MOUSE_I8042_HARDWARE 0x0002
#define MOUSE_SERIAL_HARDWARE 0x0004
#define BALLPOINT_I8042_HARDWARE 0x0008
#define BALLPOINT_SERIAL_HARDWARE 0x0010
#define WHEELMOUSE_I8042_HARDWARE 0x0020
#define WHEELMOUSE_SERIAL_HARDWARE 0x0040
//
// Generic NtDeviceIoControlFile Input Buffer record structure for
// various mouse IOCTLs.
//
typedef struct _MOUSE_UNIT_ID_PARAMETER {
//
// Unit identifier. Specifies the device unit for which this
// request is intended.
//
USHORT UnitId;
} MOUSE_UNIT_ID_PARAMETER, *PMOUSE_UNIT_ID_PARAMETER;
//
// Define the base values for the mouse error log packet's
// UniqueErrorValue field.
//
#define MOUSE_ERROR_VALUE_BASE 20000
#endif // _NTDDMOU_
|