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