4d199cd27a83f1502b5f1b0fa0dafe9ef1ab4e96
[reactos.git] / 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 #define IRP_MJ_SCSI  IRP_MJ_INTERNAL_DEVICE_CONTROL
250
251 /*
252  * Minor function numbers for IRP_MJ_FILE_SYSTEM_CONTROL
253  */
254 #define IRP_MN_USER_FS_REQUEST          0x00
255 #define IRP_MN_MOUNT_VOLUME             0x01
256 #define IRP_MN_VERIFY_VOLUME            0x02
257 #define IRP_MN_LOAD_FILE_SYSTEM         0x03
258
259 /*
260  * Minor function numbers for IRP_MJ_SCSI
261  */
262 #define IRP_MN_SCSI_CLASS                   0x01
263
264 /*
265  * Minor function codes for IRP_MJ_POWER
266  */
267 #define IRP_MN_WAIT_WAKE        0x00
268 #define IRP_MN_POWER_SEQUENCE   0x01
269 #define IRP_MN_SET_POWER        0x02
270 #define IRP_MN_QUERY_POWER      0x03
271
272 /*
273  * Minor function codes for IRP_MJ_PNP
274  */
275 #define IRP_MN_START_DEVICE                 0x00
276 #define IRP_MN_QUERY_REMOVE_DEVICE          0x01
277 #define IRP_MN_REMOVE_DEVICE                0x02
278 #define IRP_MN_CANCEL_REMOVE_DEVICE         0x03
279 #define IRP_MN_STOP_DEVICE                  0x04
280 #define IRP_MN_QUERY_STOP_DEVICE            0x05
281 #define IRP_MN_CANCEL_STOP_DEVICE           0x06
282 #define IRP_MN_QUERY_DEVICE_RELATIONS       0x07
283 #define IRP_MN_QUERY_INTERFACE              0x08
284 #define IRP_MN_QUERY_CAPABILITIES           0x09
285 #define IRP_MN_QUERY_RESOURCES              0x0A
286 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS  0x0B
287 #define IRP_MN_QUERY_DEVICE_TEXT            0x0C
288 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
289 #define IRP_MN_READ_CONFIG                  0x0F
290 #define IRP_MN_WRITE_CONFIG                 0x10
291 #define IRP_MN_EJECT                        0x11
292 #define IRP_MN_SET_LOCK                     0x12
293 #define IRP_MN_QUERY_ID                     0x13
294 #define IRP_MN_QUERY_PNP_DEVICE_STATE       0x14
295 #define IRP_MN_QUERY_BUS_INFORMATION        0x15
296 #define IRP_MN_DEVICE_USAGE_NOTIFICATION    0x16
297 #define IRP_MN_SURPRISE_REMOVAL             0x17
298 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
299
300
301 /*
302  * Priority increments
303  */
304 #define EVENT_INCREMENT                 1
305 #define IO_NO_INCREMENT                 0
306 #define IO_CD_ROM_INCREMENT             1
307 #define IO_DISK_INCREMENT               4
308 #define IO_KEYBOARD_INCREMENT           6
309 #define IO_MAILSLOT_INCREMENT           2
310 #define IO_MOUSE_INCREMENT              6
311 #define IO_NAMED_PIPE_INCREMENT         2
312 #define IO_NETWORK_INCREMENT            2
313 #define IO_PARALLEL_INCREMENT           1
314 #define IO_SERIAL_INCREMENT             2
315 #define IO_SOUND_INCREMENT              8
316 #define IO_VIDEO_INCREMENT              1
317 #define MUTANT_INCREMENT                1
318 #define SEMAPHORE_INCREMENT             1
319
320 #define FILE_BYTE_ALIGNMENT             0x00000000
321 #define FILE_WORD_ALIGNMENT             0x00000001
322 #define FILE_LONG_ALIGNMENT             0x00000003
323 #define FILE_QUAD_ALIGNMENT             0x00000007
324 #define FILE_OCTA_ALIGNMENT             0x0000000f
325 #define FILE_32_BYTE_ALIGNMENT          0x0000001f
326 #define FILE_64_BYTE_ALIGNMENT          0x0000003f
327 #define FILE_128_BYTE_ALIGNMENT         0x0000007f
328 #define FILE_256_BYTE_ALIGNMENT         0x000000ff
329 #define FILE_512_BYTE_ALIGNMENT         0x000001ff
330
331 /*
332  * File disposition values
333  */
334 #define  FILE_SUPERSEDED      0x0000
335 #define  FILE_OPENED          0x0001
336 #define  FILE_CREATED         0x0002
337 #define  FILE_OVERWRITTEN     0x0003
338 #define  FILE_EXISTS          0x0004
339 #define  FILE_DOES_NOT_EXIST  0x0005
340
341
342 /*
343  * file creation flags 
344  */
345 #define FILE_DIRECTORY_FILE                     0x00000001
346 #define FILE_WRITE_THROUGH                      0x00000002
347 #define FILE_SEQUENTIAL_ONLY                    0x00000004
348 #define FILE_NO_INTERMEDIATE_BUFFERING          0x00000008
349
350 #define FILE_SYNCHRONOUS_IO_ALERT               0x00000010
351 #define FILE_SYNCHRONOUS_IO_NONALERT            0x00000020
352 #define FILE_NON_DIRECTORY_FILE                 0x00000040
353 #define FILE_CREATE_TREE_CONNECTION             0x00000080
354
355 #define FILE_COMPLETE_IF_OPLOCKED               0x00000100
356 #define FILE_NO_EA_KNOWLEDGE                    0x00000200
357 #define FILE_OPEN_FOR_RECOVERY                  0x00000400
358 #define FILE_RANDOM_ACCESS                      0x00000800
359
360 #define FILE_DELETE_ON_CLOSE                    0x00001000
361 #define FILE_OPEN_BY_FILE_ID                    0x00002000
362 #define FILE_OPEN_FOR_BACKUP_INTENT             0x00004000
363 #define FILE_NO_COMPRESSION                     0x00008000
364
365 #define FILE_RESERVE_OPFILTER                   0x00100000
366 #define FILE_TRANSACTED_MODE                    0x00200000
367 #define FILE_OPEN_OFFLINE_FILE                  0x00400000
368
369 #define FILE_VALID_OPTION_FLAGS                 0x007fffff
370 #define FILE_VALID_PIPE_OPTION_FLAGS            0x00000032
371 #define FILE_VALID_MAILSLOT_OPTION_FLAGS        0x00000032
372 #define FILE_VALID_SET_FLAGS                    0x00001036
373
374
375 typedef ULONG FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
376
377 /*
378  * file system information class values
379  */
380 #define FileFsVolumeInformation                 1
381 #define FileFsLabelInformation                  2
382 #define FileFsSizeInformation                   3
383 #define FileFsDeviceInformation                 4
384 #define FileFsAttributeInformation              5
385 #define FileFsControlInformation                6
386 #define FileFsQuotaQueryInformation             7
387 #define FileFsQuotaSetInformation               8
388 #define FileFsMaximumInformation                9
389
390 #define IRP_MN_QUERY_DIRECTORY          0x01
391 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY  0x02
392
393 #endif