+INITIAL_PRIVILEGE_SET
[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 /* Type is the first CSHORT of any structure (type NODETYPECODE),
217  * it is usually code 'Type' field by reactos.
218  */
219 #define IO_TYPE_ADAPTER                 0x00000001
220 #define IO_TYPE_CONTROLLER              0x00000002
221 #define IO_TYPE_DEVICE                  0x00000003
222 #define IO_TYPE_DRIVER                  0x00000004
223 #define IO_TYPE_FILE                    0x00000005
224 #define IO_TYPE_IRP                     0x00000006
225 #define IO_TYPE_MASTER_ADAPTER          0x00000007
226 #define IO_TYPE_OPEN_PACKET             0x00000008
227 #define IO_TYPE_TIMER                   0x00000009
228 #define IO_TYPE_VPB                     0x0000000a
229 #define IO_TYPE_ERROR_LOG               0x0000000b
230 #define IO_TYPE_ERROR_MESSAGE           0x0000000c
231 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 0x0000000d
232
233
234 enum
235 {
236      IRP_MJ_CREATE,
237      IRP_MJ_CREATE_NAMED_PIPE,
238      IRP_MJ_CLOSE,
239      IRP_MJ_READ,
240      IRP_MJ_WRITE,
241      IRP_MJ_QUERY_INFORMATION,
242      IRP_MJ_SET_INFORMATION,
243      IRP_MJ_QUERY_EA,
244      IRP_MJ_SET_EA,
245      IRP_MJ_FLUSH_BUFFERS,
246      IRP_MJ_QUERY_VOLUME_INFORMATION,
247      IRP_MJ_SET_VOLUME_INFORMATION,
248      IRP_MJ_DIRECTORY_CONTROL,
249      IRP_MJ_FILE_SYSTEM_CONTROL,
250      IRP_MJ_DEVICE_CONTROL,
251      IRP_MJ_INTERNAL_DEVICE_CONTROL,
252      IRP_MJ_SHUTDOWN,
253      IRP_MJ_LOCK_CONTROL,
254      IRP_MJ_CLEANUP,
255      IRP_MJ_CREATE_MAILSLOT,
256      IRP_MJ_QUERY_SECURITY,
257      IRP_MJ_SET_SECURITY,
258      IRP_MJ_POWER,
259      IRP_MJ_SYSTEM_CONTROL,
260      IRP_MJ_DEVICE_CHANGE,
261      IRP_MJ_QUERY_QUOTA,
262      IRP_MJ_SET_QUOTA,
263      IRP_MJ_PNP,
264      IRP_MJ_MAXIMUM_FUNCTION,
265 };
266
267 #define IRP_MJ_SCSI  IRP_MJ_INTERNAL_DEVICE_CONTROL
268
269 /*
270  * Minor function numbers for IRP_MJ_LOCK_CONTROL
271  */
272 #define IRP_MN_LOCK                     0x01
273 #define IRP_MN_UNLOCK_SINGLE            0x02
274 #define IRP_MN_UNLOCK_ALL               0x03
275 #define IRP_MN_UNLOCK_ALL_BY_KEY        0x04
276
277 /*
278  * Minor function numbers for IRP_MJ_FILE_SYSTEM_CONTROL
279  */
280 #define IRP_MN_USER_FS_REQUEST          0x00
281 #define IRP_MN_MOUNT_VOLUME             0x01
282 #define IRP_MN_VERIFY_VOLUME            0x02
283 #define IRP_MN_LOAD_FILE_SYSTEM         0x03
284
285 /*
286  * Minor function numbers for IRP_MJ_SCSI
287  */
288 #define IRP_MN_SCSI_CLASS                   0x01
289
290 /*
291  * Minor function codes for IRP_MJ_POWER
292  */
293 #define IRP_MN_WAIT_WAKE        0x00
294 #define IRP_MN_POWER_SEQUENCE   0x01
295 #define IRP_MN_SET_POWER        0x02
296 #define IRP_MN_QUERY_POWER      0x03
297
298 /*
299  * Minor function codes for IRP_MJ_PNP
300  */
301 #define IRP_MN_START_DEVICE                 0x00
302 #define IRP_MN_QUERY_REMOVE_DEVICE          0x01
303 #define IRP_MN_REMOVE_DEVICE                0x02
304 #define IRP_MN_CANCEL_REMOVE_DEVICE         0x03
305 #define IRP_MN_STOP_DEVICE                  0x04
306 #define IRP_MN_QUERY_STOP_DEVICE            0x05
307 #define IRP_MN_CANCEL_STOP_DEVICE           0x06
308 #define IRP_MN_QUERY_DEVICE_RELATIONS       0x07
309 #define IRP_MN_QUERY_INTERFACE              0x08
310 #define IRP_MN_QUERY_CAPABILITIES           0x09
311 #define IRP_MN_QUERY_RESOURCES              0x0A
312 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS  0x0B
313 #define IRP_MN_QUERY_DEVICE_TEXT            0x0C
314 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
315 #define IRP_MN_READ_CONFIG                  0x0F
316 #define IRP_MN_WRITE_CONFIG                 0x10
317 #define IRP_MN_EJECT                        0x11
318 #define IRP_MN_SET_LOCK                     0x12
319 #define IRP_MN_QUERY_ID                     0x13
320 #define IRP_MN_QUERY_PNP_DEVICE_STATE       0x14
321 #define IRP_MN_QUERY_BUS_INFORMATION        0x15
322 #define IRP_MN_DEVICE_USAGE_NOTIFICATION    0x16
323 #define IRP_MN_SURPRISE_REMOVAL             0x17
324 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
325
326
327 /*
328  * Priority increments
329  */
330 #define EVENT_INCREMENT                 1
331 #define IO_NO_INCREMENT                 0
332 #define IO_CD_ROM_INCREMENT             1
333 #define IO_DISK_INCREMENT               4
334 #define IO_KEYBOARD_INCREMENT           6
335 #define IO_MAILSLOT_INCREMENT           2
336 #define IO_MOUSE_INCREMENT              6
337 #define IO_NAMED_PIPE_INCREMENT         2
338 #define IO_NETWORK_INCREMENT            2
339 #define IO_PARALLEL_INCREMENT           1
340 #define IO_SERIAL_INCREMENT             2
341 #define IO_SOUND_INCREMENT              8
342 #define IO_VIDEO_INCREMENT              1
343 #define MUTANT_INCREMENT                1
344 #define SEMAPHORE_INCREMENT             1
345
346 #define FILE_BYTE_ALIGNMENT             0x00000000
347 #define FILE_WORD_ALIGNMENT             0x00000001
348 #define FILE_LONG_ALIGNMENT             0x00000003
349 #define FILE_QUAD_ALIGNMENT             0x00000007
350 #define FILE_OCTA_ALIGNMENT             0x0000000f
351 #define FILE_32_BYTE_ALIGNMENT          0x0000001f
352 #define FILE_64_BYTE_ALIGNMENT          0x0000003f
353 #define FILE_128_BYTE_ALIGNMENT         0x0000007f
354 #define FILE_256_BYTE_ALIGNMENT         0x000000ff
355 #define FILE_512_BYTE_ALIGNMENT         0x000001ff
356
357 /*
358  * File disposition values
359  */
360 #define  FILE_SUPERSEDED      0x0000
361 #define  FILE_OPENED          0x0001
362 #define  FILE_CREATED         0x0002
363 #define  FILE_OVERWRITTEN     0x0003
364 #define  FILE_EXISTS          0x0004
365 #define  FILE_DOES_NOT_EXIST  0x0005
366
367
368 /*
369  * file creation flags 
370  */
371 #define FILE_DIRECTORY_FILE                     0x00000001
372 #define FILE_WRITE_THROUGH                      0x00000002
373 #define FILE_SEQUENTIAL_ONLY                    0x00000004
374 #define FILE_NO_INTERMEDIATE_BUFFERING          0x00000008
375
376 #define FILE_SYNCHRONOUS_IO_ALERT               0x00000010
377 #define FILE_SYNCHRONOUS_IO_NONALERT            0x00000020
378 #define FILE_NON_DIRECTORY_FILE                 0x00000040
379 #define FILE_CREATE_TREE_CONNECTION             0x00000080
380
381 #define FILE_COMPLETE_IF_OPLOCKED               0x00000100
382 #define FILE_NO_EA_KNOWLEDGE                    0x00000200
383 #define FILE_OPEN_FOR_RECOVERY                  0x00000400
384 #define FILE_RANDOM_ACCESS                      0x00000800
385
386 #define FILE_DELETE_ON_CLOSE                    0x00001000
387 #define FILE_OPEN_BY_FILE_ID                    0x00002000
388 #define FILE_OPEN_FOR_BACKUP_INTENT             0x00004000
389 #define FILE_NO_COMPRESSION                     0x00008000
390
391 #define FILE_RESERVE_OPFILTER                   0x00100000
392 #define FILE_TRANSACTED_MODE                    0x00200000
393 #define FILE_OPEN_OFFLINE_FILE                  0x00400000
394
395 #define FILE_VALID_OPTION_FLAGS                 0x007fffff
396 #define FILE_VALID_PIPE_OPTION_FLAGS            0x00000032
397 #define FILE_VALID_MAILSLOT_OPTION_FLAGS        0x00000032
398 #define FILE_VALID_SET_FLAGS                    0x00001036
399
400
401 typedef ULONG FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
402
403 /*
404  * file system information class values
405  */
406 #define FileFsVolumeInformation                 1
407 #define FileFsLabelInformation                  2
408 #define FileFsSizeInformation                   3
409 #define FileFsDeviceInformation                 4
410 #define FileFsAttributeInformation              5
411 #define FileFsControlInformation                6
412 #define FileFsQuotaQueryInformation             7
413 #define FileFsQuotaSetInformation               8
414 #define FileFsMaximumInformation                9
415
416 #define IRP_MN_QUERY_DIRECTORY          0x01
417 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY  0x02
418
419 #endif