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