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