6e2250a86eb66d7e58c2a2c997daff8204afd68b
[reactos.git] / reactos / include / ddk / iodef.h
1 #ifndef __INCLUDE_DDK_IODEF_H
2 #define __INCLUDE_DDK_IODEF_H
3
4 typedef enum _IO_QUERY_DEVICE_DESCRIPTION
5 {
6 IoQueryDeviceIdentifier = 0,
7 IoQueryDeviceConfigurationData,
8 IoQueryDeviceComponentInformation,
9 IoQueryDeviceDataFormatMaximum,
10 } IO_QUERY_DEVICE_DESCRIPTION, *PIO_QUERY_DEVICE_DESCRIPTION;
11
12 typedef enum _CONFIGURATION_TYPE
13 {
14 DiskController,
15 ParallelController,
16 MaximumType,
17 } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
18
19 typedef enum _CM_RESOURCE_TYPE
20 {
21 CmResourceTypePort = 1,
22 CmResourceTypeInterrupt,
23 CmResourceTypeMemory,
24 CmResourceTypeDma,
25 CmResourceTypeDeviceSpecific,
26 CmResourceTypeMaximum,
27 } CM_RESOURCE_TYPE;
28
29 typedef enum _CM_SHARE_DISPOSITION
30 {
31 CmResourceShareDeviceExclusive = 1,
32 CmResourceShareDriverExclusive,
33 CmResourceShareShared,
34 CmResourceShareMaximum,
35 } CM_SHARE_DISPOSITION;
36
37 enum
38 {
39 CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE,
40 CM_RESOURCE_INTERRUPT_LATCHED,
41 };
42
43 enum
44 {
45 CM_RESOURCE_PORT_MEMORY,
46 CM_RESOURCE_PORT_IO,
47 };
48
49 /*
50 * PURPOSE: Irp flags
51 */
52 enum
53 {
54 IRP_NOCACHE = 0x1,
55 IRP_PAGING_IO = 0x2,
56 IRP_MOUNT_COMPLETION = 0x4,
57 IRP_SYNCHRONOUS_API = 0x8,
58 IRP_ASSOCIATED_IRP = 0x10,
59 IRP_BUFFERED_IO = 0x20,
60 IRP_DEALLOCATE_BUFFER = 0x40,
61 IRP_INPUT_OPERATION = 0x80,
62 IRP_SYNCHRONOUS_PAGING_IO = 0x100,
63 IRP_CREATE_OPERATION = 0x200,
64 IRP_READ_OPERATION = 0x400,
65 IRP_WRITE_OPERATION = 0x800,
66 IRP_CLOSE_OPERATION = 0x1000,
67 IRP_DEFER_IO_COMPLETION = 0x2000,
68 };
69
70 #define SL_FORCE_ACCESS_CHECK (0x1)
71 #define SL_OPEN_PAGING_FILE (0x2)
72 #define SL_OPEN_TARGET_DIRECTORY (0x4)
73 #define SL_CASE_SENSITIVE (0x80)
74
75 #define SL_KEY_SPECIFIED (0x1)
76 #define SL_OVERRIDE_VERIFY_VOLUME (0x2)
77 #define SL_WRITE_THROUGHT (0x4)
78 #define SL_FT_SEQUENTIAL_WRITE (0x8)
79
80 #define SL_FAIL_IMMEDIATELY (0x1)
81 #define SL_EXCLUSIVE_LOCK (0x2)
82
83 #define SL_WATCH_TREE (0x1)
84
85 #define SL_RESTART_SCAN (0x1)
86 #define SL_RETURN_SINGLE_ENTRY (0x2)
87 #define SL_INDEX_SPECIFIED (0x4)
88
89 #define SL_ALLOW_RAW_MOUNT (0x1)
90
91 #define SL_PENDING_RETURNED 0x01
92 #define SL_INVOKE_ON_CANCEL 0x20
93 #define SL_INVOKE_ON_SUCCESS 0x40
94 #define SL_INVOKE_ON_ERROR 0x80
95
96 /*
97 * Possible flags for the device object flags
98 */
99 #define DO_UNLOAD_PENDING 0x00000001
100 #define DO_VERIFY_VOLUME 0x00000002
101 #define DO_BUFFERED_IO 0x00000004
102 #define DO_EXCLUSIVE 0x00000008
103 #define DO_DIRECT_IO 0x00000010
104 #define DO_MAP_IO_BUFFER 0x00000020
105 #define DO_DEVICE_HAS_NAME 0x00000040
106 #define DO_DEVICE_INITIALIZING 0x00000080
107 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
108 #define DO_LONG_TERM_REQUESTS 0x00000200
109 #define DO_NEVER_LAST_DEVICE 0x00000400
110 #define DO_SHUTDOWN_REGISTERED 0x00000800
111
112 /*
113 * Possible device types
114 */
115 #define FILE_DEVICE_BEEP 0x00000001
116 #define FILE_DEVICE_CD_ROM 0x00000002
117 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
118 #define FILE_DEVICE_CONTROLLER 0x00000004
119 #define FILE_DEVICE_DATALINK 0x00000005
120 #define FILE_DEVICE_DFS 0x00000006
121 #define FILE_DEVICE_DISK 0x00000007
122 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
123 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
124 #define FILE_DEVICE_INPORT_PORT 0x0000000a
125 #define FILE_DEVICE_KEYBOARD 0x0000000b
126 #define FILE_DEVICE_MAILSLOT 0x0000000c
127 #define FILE_DEVICE_MIDI_IN 0x0000000d
128 #define FILE_DEVICE_MIDI_OUT 0x0000000e
129 #define FILE_DEVICE_MOUSE 0x0000000f
130 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
131 #define FILE_DEVICE_NAMED_PIPE 0x00000011
132 #define FILE_DEVICE_NETWORK 0x00000012
133 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
134 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
135 #define FILE_DEVICE_NULL 0x00000015
136 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
137 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
138 #define FILE_DEVICE_PRINTER 0x00000018
139 #define FILE_DEVICE_SCANNER 0x00000019
140 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
141 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
142 #define FILE_DEVICE_SCREEN 0x0000001c
143 #define FILE_DEVICE_SOUND 0x0000001d
144 #define FILE_DEVICE_STREAMS 0x0000001e
145 #define FILE_DEVICE_TAPE 0x0000001f
146 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
147 #define FILE_DEVICE_TRANSPORT 0x00000021
148 #define FILE_DEVICE_UNKNOWN 0x00000022
149 #define FILE_DEVICE_VIDEO 0x00000023
150 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
151 #define FILE_DEVICE_WAVE_IN 0x00000025
152 #define FILE_DEVICE_WAVE_OUT 0x00000026
153 #define FILE_DEVICE_8042_PORT 0x00000027
154 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
155 #define FILE_DEVICE_BATTERY 0x00000029
156 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
157 #define FILE_DEVICE_MODEM 0x0000002b
158 #define FILE_DEVICE_VDM 0x0000002c
159
160 #define FILE_REMOVABLE_MEDIA 0x00000001
161 #define FILE_READ_ONLY_DEVICE 0x00000002
162 #define FILE_FLOPPY_DISKETTE 0x00000004
163 #define FILE_WRITE_ONCE_MEDIA 0x00000008
164 #define FILE_REMOTE_DEVICE 0x00000010
165 #define FILE_DEVICE_IS_MOUNTED 0x00000020
166 #define FILE_VIRTUAL_VOLUME 0x00000040
167
168
169 /*
170 * PURPOSE: Bus types
171 */
172 typedef enum _INTERFACE_TYPE
173 {
174 InterfaceTypeUndefined = -1,
175 Internal,
176 Isa,
177 Eisa,
178 MicroChannel,
179 TurboChannel,
180 PCIBus,
181 VMEBus,
182 NuBus,
183 PCMCIABus,
184 CBus,
185 MPIBus,
186 MPSABus,
187 ProcessorInternal,
188 InternalPowerBus,
189 PNPISABus,
190 MaximumInterfaceType
191 } INTERFACE_TYPE, *PINTERFACE_TYPE;
192
193
194 enum
195 {
196 IRP_MJ_CREATE,
197 IRP_MJ_CREATE_NAMED_PIPE,
198 IRP_MJ_CLOSE,
199 IRP_MJ_READ,
200 IRP_MJ_WRITE,
201 IRP_MJ_QUERY_INFORMATION,
202 IRP_MJ_SET_INFORMATION,
203 IRP_MJ_QUERY_EA,
204 IRP_MJ_SET_EA,
205 IRP_MJ_FLUSH_BUFFERS,
206 IRP_MJ_QUERY_VOLUME_INFORMATION,
207 IRP_MJ_SET_VOLUME_INFORMATION,
208 IRP_MJ_DIRECTORY_CONTROL,
209 IRP_MJ_FILE_SYSTEM_CONTROL,
210 IRP_MJ_DEVICE_CONTROL,
211 IRP_MJ_INTERNAL_DEVICE_CONTROL,
212 IRP_MJ_SHUTDOWN,
213 IRP_MJ_LOCK_CONTROL,
214 IRP_MJ_CLEANUP,
215 IRP_MJ_CREATE_MAILSLOT,
216 IRP_MJ_QUERY_SECURITY,
217 IRP_MJ_SET_SECURITY,
218 IRP_MJ_POWER,
219 IRP_MJ_SYSTEM_CONTROL,
220 IRP_MJ_DEVICE_CHANGE,
221 IRP_MJ_QUERY_QUOTA,
222 IRP_MJ_SET_QUOTA,
223 IRP_MJ_PNP,
224 IRP_MJ_MAXIMUM_FUNCTION,
225 };
226
227 /*
228 * Minor function numbers for IRP_MJ_FILE_SYSTEM_CONTROL
229 */
230 #define IRP_MN_USER_FS_REQUEST 0x00
231 #define IRP_MN_MOUNT_VOLUME 0x01
232 #define IRP_MN_VERIFY_VOLUME 0x02
233 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
234
235 /*
236 * Minor function codes for IRP_MJ_POWER
237 */
238 #define IRP_MN_WAIT_WAKE 0x00
239 #define IRP_MN_POWER_SEQUENCE 0x01
240 #define IRP_MN_SET_POWER 0x02
241 #define IRP_MN_QUERY_POWER 0x03
242
243 /*
244 * Minor function codes for IRP_MJ_PNP
245 */
246 #define IRP_MN_START_DEVICE 0x00
247 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
248 #define IRP_MN_REMOVE_DEVICE 0x02
249 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
250 #define IRP_MN_STOP_DEVICE 0x04
251 #define IRP_MN_QUERY_STOP_DEVICE 0x05
252 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
253 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
254 #define IRP_MN_QUERY_INTERFACE 0x08
255 #define IRP_MN_QUERY_CAPABILITIES 0x09
256 #define IRP_MN_QUERY_RESOURCES 0x0A
257 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
258 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
259 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
260 #define IRP_MN_READ_CONFIG 0x0F
261 #define IRP_MN_WRITE_CONFIG 0x10
262 #define IRP_MN_EJECT 0x11
263 #define IRP_MN_SET_LOCK 0x12
264 #define IRP_MN_QUERY_ID 0x13
265 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
266 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
267 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
268 #define IRP_MN_SURPRISE_REMOVAL 0x17
269 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
270
271
272 /*
273 * Priority increments
274 */
275 #define EVENT_INCREMENT 1
276 #define IO_NO_INCREMENT 0
277 #define IO_CD_ROM_INCREMENT 1
278 #define IO_DISK_INCREMENT 4
279 #define IO_KEYBOARD_INCREMENT 6
280 #define IO_MAILSLOT_INCREMENT 2
281 #define IO_MOUSE_INCREMENT 6
282 #define IO_NAMED_PIPE_INCREMENT 2
283 #define IO_NETWORK_INCREMENT 2
284 #define IO_PARALLEL_INCREMENT 1
285 #define IO_SERIAL_INCREMENT 2
286 #define IO_SOUND_INCREMENT 8
287 #define IO_VIDEO_INCREMENT 1
288 #define SEMAPHORE_INCREMENT 1
289
290 #define FILE_BYTE_ALIGNMENT 0x00000000
291 #define FILE_WORD_ALIGNMENT 0x00000001
292 #define FILE_LONG_ALIGNMENT 0x00000003
293 #define FILE_QUAD_ALIGNMENT 0x00000007
294 #define FILE_OCTA_ALIGNMENT 0x0000000f
295 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
296 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
297 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
298 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
299 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
300
301 /*
302 * File disposition values
303 */
304 #define FILE_SUPERSEDED 0x0000
305 #define FILE_OPENED 0x0001
306 #define FILE_CREATED 0x0002
307 #define FILE_OVERWRITTEN 0x0003
308 #define FILE_EXISTS 0x0004
309 #define FILE_DOES_NOT_EXIST 0x0005
310
311
312 /*
313 * file creation flags
314 */
315 #define FILE_DIRECTORY_FILE 0x00000001
316 #define FILE_WRITE_THROUGH 0x00000002
317 #define FILE_SEQUENTIAL_ONLY 0x00000004
318 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
319
320 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
321 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
322 #define FILE_NON_DIRECTORY_FILE 0x00000040
323 #define FILE_CREATE_TREE_CONNECTION 0x00000080
324
325 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
326 #define FILE_NO_EA_KNOWLEDGE 0x00000200
327
328 #define FILE_RANDOM_ACCESS 0x00000800
329
330 #define FILE_DELETE_ON_CLOSE 0x00001000
331 #define FILE_OPEN_BY_FILE_ID 0x00002000
332 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
333 #define FILE_NO_COMPRESSION 0x00008000
334
335 #define FILE_RESERVE_OPFILTER 0x00100000
336 #define FILE_TRANSACTED_MODE 0x00200000
337 #define FILE_OPEN_OFFLINE_FILE 0x00400000
338
339 #define FILE_VALID_OPTION_FLAGS 0x007fffff
340 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
341 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
342 #define FILE_VALID_SET_FLAGS 0x00001036
343
344
345 typedef ULONG FS_INFORMATION_CLASS;
346
347 /*
348 * file system information class values
349 */
350 #define FileFsVolumeInformation 1
351 #define FileFsLabelInformation 2
352 #define FileFsSizeInformation 3
353 #define FileFsDeviceInformation 4
354 #define FileFsAttributeInformation 5
355 #define FileFsControlInformation 6
356 #define FileFsQuotaQueryInformation 7
357 #define FileFsQuotaSetInformation 8
358 #define FileFsMaximumInformation 9
359
360 #define IRP_MN_QUERY_DIRECTORY 0x01
361 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
362
363 #endif