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