merge trunk rev : 25663 and 25664 to 0.3.1 branch - update freetype, take care of...
[reactos.git] / reactos / include / ndk / iotypes.h
1 /*++ NDK Version: 0098
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 iotypes.h
8
9 Abstract:
10
11 Type definitions for the I/O Manager.
12
13 Author:
14
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
16
17 --*/
18
19 #ifndef _IOTYPES_H
20 #define _IOTYPES_H
21
22 //
23 // Dependencies
24 //
25 #include <umtypes.h>
26 #if !defined(_NTIFS_)
27 typedef PVOID PFS_FILTER_CALLBACKS;
28 #endif
29
30 //
31 // I/O Completion Access Rights
32 //
33 #define IO_COMPLETION_QUERY_STATE 0x0001
34 #ifndef NTOS_MODE_USER
35 #define IO_COMPLETION_MODIFY_STATE 0x0002
36 #define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
37 SYNCHRONIZE | \
38 0x3)
39
40 //
41 // Kernel Exported Object Types
42 //
43 extern POBJECT_TYPE NTSYSAPI IoAdapterObjectType;
44 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType;
45 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType;
46 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType;
47
48 #else
49
50 //
51 // Symbolic Link Access Rights
52 //
53 #define SYMBOLIC_LINK_QUERY 0x0001
54 #define SYMBOLIC_LINK_ALL_ACCESS STANDARD_RIGHTS_REQUIRED | 0x0001
55 #endif
56
57 //
58 // NtCreateFile Result Flags
59 //
60 #define FILE_SUPERSEDED 0x00000000
61 #define FILE_OPENED 0x00000001
62 #define FILE_CREATED 0x00000002
63 #define FILE_OVERWRITTEN 0x00000003
64 #define FILE_EXISTS 0x00000004
65 #define FILE_DOES_NOT_EXIST 0x00000005
66
67 //
68 // Pipe Flags
69 //
70 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
71 #define FILE_PIPE_MESSAGE_TYPE 0x00000001
72 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
73 #define FILE_PIPE_MESSAGE_MODE 0x00000001
74 #define FILE_PIPE_QUEUE_OPERATION 0x00000000
75 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
76 #define FILE_PIPE_INBOUND 0x00000000
77 #define FILE_PIPE_OUTBOUND 0x00000001
78 #define FILE_PIPE_FULL_DUPLEX 0x00000002
79 #define FILE_PIPE_CLIENT_END 0x00000000
80 #define FILE_PIPE_SERVER_END 0x00000001
81
82 //
83 // NtCreateFile Attributes
84 //
85 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
86 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
87
88 //
89 // NtCreateFile OpenType Flags
90 //
91 #define FILE_SUPERSEDE 0x00000000
92 #define FILE_OPEN 0x00000001
93 #define FILE_CREATE 0x00000002
94 #define FILE_OPEN_IF 0x00000003
95 #define FILE_OVERWRITE 0x00000004
96 #define FILE_OVERWRITE_IF 0x00000005
97 #define FILE_MAXIMUM_DISPOSITION 0x00000005
98
99 //
100 // NtCreateFile Flags
101 //
102 #define FILE_DIRECTORY_FILE 0x00000001
103 #define FILE_WRITE_THROUGH 0x00000002
104 #define FILE_SEQUENTIAL_ONLY 0x00000004
105 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
106 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
107 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
108 #define FILE_NON_DIRECTORY_FILE 0x00000040
109 #define FILE_CREATE_TREE_CONNECTION 0x00000080
110 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
111 #define FILE_NO_EA_KNOWLEDGE 0x00000200
112 #define FILE_OPEN_FOR_RECOVERY 0x00000400
113 #define FILE_RANDOM_ACCESS 0x00000800
114 #define FILE_DELETE_ON_CLOSE 0x00001000
115 #define FILE_OPEN_BY_FILE_ID 0x00002000
116 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
117 #define FILE_NO_COMPRESSION 0x00008000
118 #define FILE_RESERVE_OPFILTER 0x00100000
119 #define FILE_OPEN_REPARSE_POINT 0x00200000
120 #define FILE_OPEN_NO_RECALL 0x00400000
121 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
122
123 //
124 // Device Charactertics
125 //
126 #define FILE_REMOVABLE_MEDIA 0x00000001
127 #define FILE_REMOTE_DEVICE 0x00000010
128
129 //
130 // Device Object Extension Flags
131 //
132 #define DOE_UNLOAD_PENDING 0x1
133 #define DOE_DELETE_PENDING 0x2
134 #define DOE_REMOVE_PENDING 0x4
135 #define DOE_REMOVE_PROCESSED 0x8
136 #define DOE_START_PENDING 0x10
137
138 //
139 // Device Object StartIo Flags
140 //
141 #define DOE_SIO_NO_KEY 0x20
142 #define DOE_SIO_WITH_KEY 0x40
143 #define DOE_SIO_CANCELABLE 0x80
144 #define DOE_SIO_DEFERRED 0x100
145 #define DOE_SIO_NO_CANCEL 0x200
146
147 //
148 // Device Node Flags
149 //
150 #define DNF_PROCESSED 0x00000001
151 #define DNF_STARTED 0x00000002
152 #define DNF_START_FAILED 0x00000004
153 #define DNF_ENUMERATED 0x00000008
154 #define DNF_DELETED 0x00000010
155 #define DNF_MADEUP 0x00000020
156 #define DNF_START_REQUEST_PENDING 0x00000040
157 #define DNF_NO_RESOURCE_REQUIRED 0x00000080
158 #define DNF_INSUFFICIENT_RESOURCES 0x00000100
159 #define DNF_RESOURCE_ASSIGNED 0x00000200
160 #define DNF_RESOURCE_REPORTED 0x00000400
161 #define DNF_HAL_NODE 0x00000800 // ???
162 #define DNF_ADDED 0x00001000
163 #define DNF_ADD_FAILED 0x00002000
164 #define DNF_LEGACY_DRIVER 0x00004000
165 #define DNF_STOPPED 0x00008000
166 #define DNF_WILL_BE_REMOVED 0x00010000
167 #define DNF_NEED_TO_ENUM 0x00020000
168 #define DNF_NOT_CONFIGURED 0x00040000
169 #define DNF_REINSTALL 0x00080000
170 #define DNF_RESOURCE_REQUIREMENTS_NEED_FILTERED 0x00100000 // ???
171 #define DNF_DISABLED 0x00200000
172 #define DNF_RESTART_OK 0x00400000
173 #define DNF_NEED_RESTART 0x00800000
174 #define DNF_VISITED 0x01000000
175 #define DNF_ASSIGNING_RESOURCES 0x02000000
176 #define DNF_BEEING_ENUMERATED 0x04000000
177 #define DNF_NEED_ENUMERATION_ONLY 0x08000000
178 #define DNF_LOCKED 0x10000000
179 #define DNF_HAS_BOOT_CONFIG 0x20000000
180 #define DNF_BOOT_CONFIG_RESERVED 0x40000000
181 #define DNF_HAS_PROBLEM 0x80000000 // ???
182
183 //
184 // Device Node User Flags
185 //
186 #define DNUF_DONT_SHOW_IN_UI 0x0002
187 #define DNUF_NOT_DISABLEABLE 0x0008
188
189 //
190 // Internal Option Flags
191 //
192 #define IO_ATTACH_DEVICE_API 0x80000000
193
194 //
195 // Undocumented WMI Registration Flags
196 //
197 #define WMIREG_FLAG_TRACE_PROVIDER 0x00010000
198 #define WMIREG_FLAG_TRACE_NOTIFY_MASK 0x00F00000
199 #define WMIREG_NOTIFY_DISK_IO 0x00100000
200 #define WMIREG_NOTIFY_TDI_IO 0x00200000
201
202 //
203 // I/O Completion Information Class for NtQueryIoCompletionInformation
204 //
205 typedef enum _IO_COMPLETION_INFORMATION_CLASS
206 {
207 IoCompletionBasicInformation
208 } IO_COMPLETION_INFORMATION_CLASS;
209
210 #ifdef NTOS_MODE_USER
211
212 //
213 // Hardware Interface Type
214 //
215 typedef enum _INTERFACE_TYPE
216 {
217 InterfaceTypeUndefined = -1,
218 Internal,
219 Isa,
220 Eisa,
221 MicroChannel,
222 TurboChannel,
223 PCIBus,
224 VMEBus,
225 NuBus,
226 PCMCIABus,
227 CBus,
228 MPIBus,
229 MPSABus,
230 ProcessorInternal,
231 InternalPowerBus,
232 PNPISABus,
233 PNPBus,
234 MaximumInterfaceType
235 }INTERFACE_TYPE, *PINTERFACE_TYPE;
236
237 typedef enum _BUS_DATA_TYPE
238 {
239 ConfigurationSpaceUndefined = -1,
240 Cmos,
241 EisaConfiguration,
242 Pos,
243 CbusConfiguration,
244 PCIConfiguration,
245 VMEConfiguration,
246 NuBusConfiguration,
247 PCMCIAConfiguration,
248 MPIConfiguration,
249 MPSAConfiguration,
250 PNPISAConfiguration,
251 SgiInternalConfiguration,
252 MaximumBusDataType
253 } BUS_DATA_TYPE, *PBUS_DATA_TYPE;
254
255 //
256 // File Information Classes for NtQueryInformationFile
257 //
258 typedef enum _FILE_INFORMATION_CLASS
259 {
260 FileDirectoryInformation = 1,
261 FileFullDirectoryInformation,
262 FileBothDirectoryInformation,
263 FileBasicInformation,
264 FileStandardInformation,
265 FileInternalInformation,
266 FileEaInformation,
267 FileAccessInformation,
268 FileNameInformation,
269 FileRenameInformation,
270 FileLinkInformation,
271 FileNamesInformation,
272 FileDispositionInformation,
273 FilePositionInformation,
274 FileFullEaInformation,
275 FileModeInformation,
276 FileAlignmentInformation,
277 FileAllInformation,
278 FileAllocationInformation,
279 FileEndOfFileInformation,
280 FileAlternateNameInformation,
281 FileStreamInformation,
282 FilePipeInformation,
283 FilePipeLocalInformation,
284 FilePipeRemoteInformation,
285 FileMailslotQueryInformation,
286 FileMailslotSetInformation,
287 FileCompressionInformation,
288 FileObjectIdInformation,
289 FileCompletionInformation,
290 FileMoveClusterInformation,
291 FileQuotaInformation,
292 FileReparsePointInformation,
293 FileNetworkOpenInformation,
294 FileAttributeTagInformation,
295 FileTrackingInformation,
296 FileIdBothDirectoryInformation,
297 FileIdFullDirectoryInformation,
298 FileValidDataLengthInformation,
299 FileShortNameInformation,
300 FileMaximumInformation
301 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
302
303 //
304 // File Information Classes for NtQueryInformationFileSystem
305 //
306 typedef enum _FSINFOCLASS
307 {
308 FileFsVolumeInformation = 1,
309 FileFsLabelInformation,
310 FileFsSizeInformation,
311 FileFsDeviceInformation,
312 FileFsAttributeInformation,
313 FileFsControlInformation,
314 FileFsFullSizeInformation,
315 FileFsObjectIdInformation,
316 FileFsDriverPathInformation,
317 FileFsMaximumInformation
318 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
319
320 #endif
321
322 //
323 // Device Node States
324 //
325 typedef enum _PNP_DEVNODE_STATE
326 {
327 DeviceNodeUnspecified = 0x300,
328 DeviceNodeUninitialized = 0x301,
329 DeviceNodeInitialized = 0x302,
330 DeviceNodeDriversAdded = 0x303,
331 DeviceNodeResourcesAssigned = 0x304,
332 DeviceNodeStartPending = 0x305,
333 DeviceNodeStartCompletion = 0x306,
334 DeviceNodeStartPostWork = 0x307,
335 DeviceNodeStarted = 0x308,
336 DeviceNodeQueryStopped = 0x309,
337 DeviceNodeStopped = 0x30a,
338 DeviceNodeRestartCompletion = 0x30b,
339 DeviceNodeEnumeratePending = 0x30c,
340 DeviceNodeEnumerateCompletion = 0x30d,
341 DeviceNodeAwaitingQueuedDeletion = 0x30e,
342 DeviceNodeAwaitingQueuedRemoval = 0x30f,
343 DeviceNodeQueryRemoved = 0x310,
344 DeviceNodeRemovePendingCloses = 0x311,
345 DeviceNodeRemoved = 0x312,
346 DeviceNodeDeletePendingCloses = 0x313,
347 DeviceNodeDeleted = 0x314,
348 MaxDeviceNodeState = 0x315,
349 } PNP_DEVNODE_STATE;
350
351 #ifdef NTOS_MODE_USER
352
353 //
354 // File Information structures for NtQueryInformationFile
355 //
356 typedef struct _FILE_BASIC_INFORMATION
357 {
358 LARGE_INTEGER CreationTime;
359 LARGE_INTEGER LastAccessTime;
360 LARGE_INTEGER LastWriteTime;
361 LARGE_INTEGER ChangeTime;
362 ULONG FileAttributes;
363 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
364
365 typedef struct _FILE_STANDARD_INFORMATION
366 {
367 LARGE_INTEGER AllocationSize;
368 LARGE_INTEGER EndOfFile;
369 ULONG NumberOfLinks;
370 BOOLEAN DeletePending;
371 BOOLEAN Directory;
372 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
373
374 typedef struct _FILE_STREAM_INFORMATION
375 {
376 ULONG NextEntryOffset;
377 ULONG StreamNameLength;
378 LARGE_INTEGER StreamSize;
379 LARGE_INTEGER StreamAllocationSize;
380 WCHAR StreamName[1];
381 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
382
383 typedef struct _FILE_NETWORK_OPEN_INFORMATION
384 {
385 LARGE_INTEGER CreationTime;
386 LARGE_INTEGER LastAccessTime;
387 LARGE_INTEGER LastWriteTime;
388 LARGE_INTEGER ChangeTime;
389 LARGE_INTEGER AllocationSize;
390 LARGE_INTEGER EndOfFile;
391 ULONG FileAttributes;
392 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
393
394 typedef struct _FILE_EA_INFORMATION
395 {
396 ULONG EaSize;
397 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
398
399 typedef struct _FILE_COMPRESSION_INFORMATION
400 {
401 LARGE_INTEGER CompressedFileSize;
402 USHORT CompressionFormat;
403 UCHAR CompressionUnitShift;
404 UCHAR ChunkShift;
405 UCHAR ClusterShift;
406 UCHAR Reserved[3];
407 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
408
409 typedef struct _FILE_POSITION_INFORMATION
410 {
411 LARGE_INTEGER CurrentByteOffset;
412 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
413
414 typedef struct _FILE_DISPOSITION_INFORMATION
415 {
416 BOOLEAN DeleteFile;
417 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
418
419 typedef struct _FILE_FULL_EA_INFORMATION
420 {
421 ULONG NextEntryOffset;
422 UCHAR Flags;
423 UCHAR EaNameLength;
424 USHORT EaValueLength;
425 CHAR EaName[1];
426 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
427
428 typedef struct _FILE_QUOTA_INFORMATION
429 {
430 ULONG NextEntryOffset;
431 ULONG SidLength;
432 LARGE_INTEGER ChangeTime;
433 LARGE_INTEGER QuotaUsed;
434 LARGE_INTEGER QuotaThreshold;
435 LARGE_INTEGER QuotaLimit;
436 SID Sid;
437 } FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
438
439 typedef struct _FILE_INTERNAL_INFORMATION
440 {
441 LARGE_INTEGER IndexNumber;
442 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
443
444 typedef struct _FILE_RENAME_INFORMATION
445 {
446 BOOLEAN ReplaceIfExists;
447 HANDLE RootDirectory;
448 ULONG FileNameLength;
449 WCHAR FileName[1];
450 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
451
452 typedef struct _FILE_PIPE_INFORMATION
453 {
454 ULONG ReadMode;
455 ULONG CompletionMode;
456 } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
457
458 typedef struct _FILE_PIPE_LOCAL_INFORMATION
459 {
460 ULONG NamedPipeType;
461 ULONG NamedPipeConfiguration;
462 ULONG MaximumInstances;
463 ULONG CurrentInstances;
464 ULONG InboundQuota;
465 ULONG ReadDataAvailable;
466 ULONG OutboundQuota;
467 ULONG WriteQuotaAvailable;
468 ULONG NamedPipeState;
469 ULONG NamedPipeEnd;
470 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
471
472 typedef struct _FILE_PIPE_REMOTE_INFORMATION
473 {
474 LARGE_INTEGER CollectDataTime;
475 ULONG MaximumCollectionCount;
476 } FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
477
478 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
479 {
480 ULONG MaximumMessageSize;
481 ULONG MailslotQuota;
482 ULONG NextMessageSize;
483 ULONG MessagesAvailable;
484 LARGE_INTEGER ReadTimeout;
485 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
486
487 typedef struct _FILE_MAILSLOT_SET_INFORMATION
488 {
489 PLARGE_INTEGER ReadTimeout;
490 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
491
492 typedef struct _FILE_BOTH_DIR_INFORMATION
493 {
494 ULONG NextEntryOffset;
495 ULONG FileIndex;
496 LARGE_INTEGER CreationTime;
497 LARGE_INTEGER LastAccessTime;
498 LARGE_INTEGER LastWriteTime;
499 LARGE_INTEGER ChangeTime;
500 LARGE_INTEGER EndOfFile;
501 LARGE_INTEGER AllocationSize;
502 ULONG FileAttributes;
503 ULONG FileNameLength;
504 ULONG EaSize;
505 CCHAR ShortNameLength;
506 WCHAR ShortName[12];
507 WCHAR FileName[1];
508 } FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
509
510 typedef struct _FILE_COMPLETION_INFORMATION
511 {
512 HANDLE Port;
513 PVOID Key;
514 } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
515
516 typedef struct _FILE_LINK_INFORMATION
517 {
518 BOOLEAN ReplaceIfExists;
519 HANDLE RootDirectory;
520 ULONG FileNameLength;
521 WCHAR FileName[1];
522 } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
523
524 typedef struct _FILE_NAME_INFORMATION
525 {
526 ULONG FileNameLength;
527 WCHAR FileName[1];
528 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
529
530 typedef struct _FILE_ALLOCATION_INFORMATION
531 {
532 LARGE_INTEGER AllocationSize;
533 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
534
535 typedef struct _FILE_END_OF_FILE_INFORMATION
536 {
537 LARGE_INTEGER EndOfFile;
538 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
539
540 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
541 {
542 LARGE_INTEGER ValidDataLength;
543 } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
544
545 typedef struct _FILE_DIRECTORY_INFORMATION
546 {
547 ULONG NextEntryOffset;
548 ULONG FileIndex;
549 LARGE_INTEGER CreationTime;
550 LARGE_INTEGER LastAccessTime;
551 LARGE_INTEGER LastWriteTime;
552 LARGE_INTEGER ChangeTime;
553 LARGE_INTEGER EndOfFile;
554 LARGE_INTEGER AllocationSize;
555 ULONG FileAttributes;
556 ULONG FileNameLength;
557 WCHAR FileName[1];
558 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
559
560 //
561 // File System Information structures for NtQueryInformationFile
562 //
563 typedef struct _FILE_FS_DEVICE_INFORMATION
564 {
565 DEVICE_TYPE DeviceType;
566 ULONG Characteristics;
567 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
568
569 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
570 {
571 ULONG FileSystemAttributes;
572 ULONG MaximumComponentNameLength;
573 ULONG FileSystemNameLength;
574 WCHAR FileSystemName[1];
575 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
576
577 typedef struct _FILE_FS_SIZE_INFORMATION
578 {
579 LARGE_INTEGER TotalAllocationUnits;
580 LARGE_INTEGER AvailableAllocationUnits;
581 ULONG SectorsPerAllocationUnit;
582 ULONG BytesPerSector;
583 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
584
585 typedef struct _FILE_FS_LABEL_INFORMATION
586 {
587 ULONG VolumeLabelLength;
588 WCHAR VolumeLabel[1];
589 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
590
591 typedef struct _FILE_FS_VOLUME_INFORMATION
592 {
593 LARGE_INTEGER VolumeCreationTime;
594 ULONG VolumeSerialNumber;
595 ULONG VolumeLabelLength;
596 BOOLEAN SupportsObjects;
597 WCHAR VolumeLabel[1];
598 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
599
600 //
601 // Pipe Structures for IOCTL_PIPE_XXX
602 //
603 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
604 {
605 LARGE_INTEGER Timeout;
606 ULONG NameLength;
607 BOOLEAN TimeoutSpecified;
608 WCHAR Name[1];
609 } FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
610
611 typedef struct _FILE_PIPE_PEEK_BUFFER
612 {
613 ULONG NamedPipeState;
614 ULONG ReadDataAvailable;
615 ULONG NumberOfMessages;
616 ULONG MessageLength;
617 CHAR Data[1];
618 } FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
619
620 //
621 // I/O Status Block
622 //
623 typedef struct _IO_STATUS_BLOCK
624 {
625 union
626 {
627 NTSTATUS Status;
628 PVOID Pointer;
629 };
630 ULONG_PTR Information;
631 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
632
633 //
634 // I/O Error Log Structures
635 //
636 typedef struct _IO_ERROR_LOG_PACKET
637 {
638 UCHAR MajorFunctionCode;
639 UCHAR RetryCount;
640 USHORT DumpDataSize;
641 USHORT NumberOfStrings;
642 USHORT StringOffset;
643 USHORT EventCategory;
644 NTSTATUS ErrorCode;
645 ULONG UniqueErrorValue;
646 NTSTATUS FinalStatus;
647 ULONG SequenceNumber;
648 ULONG IoControlCode;
649 LARGE_INTEGER DeviceOffset;
650 ULONG DumpData[1];
651 }IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;
652
653 typedef struct _IO_ERROR_LOG_MESSAGE
654 {
655 USHORT Type;
656 USHORT Size;
657 USHORT DriverNameLength;
658 LARGE_INTEGER TimeStamp;
659 ULONG DriverNameOffset;
660 IO_ERROR_LOG_PACKET EntryData;
661 } IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE;
662
663 #endif
664
665 //
666 // I/O Completion Information structures
667 //
668 typedef struct _IO_COMPLETION_BASIC_INFORMATION
669 {
670 LONG Depth;
671 } IO_COMPLETION_BASIC_INFORMATION, *PIO_COMPLETION_BASIC_INFORMATION;
672
673 //
674 // Parameters for NtCreateMailslotFile/NtCreateNamedPipeFile
675 //
676 typedef struct _MAILSLOT_CREATE_PARAMETERS
677 {
678 ULONG MailslotQuota;
679 ULONG MaximumMessageSize;
680 LARGE_INTEGER ReadTimeout;
681 BOOLEAN TimeoutSpecified;
682 } MAILSLOT_CREATE_PARAMETERS, *PMAILSLOT_CREATE_PARAMETERS;
683
684 typedef struct _NAMED_PIPE_CREATE_PARAMETERS
685 {
686 ULONG NamedPipeType;
687 ULONG ReadMode;
688 ULONG CompletionMode;
689 ULONG MaximumInstances;
690 ULONG InboundQuota;
691 ULONG OutboundQuota;
692 LARGE_INTEGER DefaultTimeout;
693 BOOLEAN TimeoutSpecified;
694 } NAMED_PIPE_CREATE_PARAMETERS, *PNAMED_PIPE_CREATE_PARAMETERS;
695
696 #ifndef NTOS_MODE_USER
697
698 //
699 // I/O Timer Object
700 //
701 typedef struct _IO_TIMER
702 {
703 USHORT Type;
704 USHORT TimerEnabled;
705 LIST_ENTRY IoTimerList;
706 PIO_TIMER_ROUTINE TimerRoutine;
707 PVOID Context;
708 PDEVICE_OBJECT DeviceObject;
709 } IO_TIMER, *PIO_TIMER;
710
711 //
712 // Driver Extension
713 //
714 typedef struct _IO_CLIENT_EXTENSION
715 {
716 struct _IO_CLIENT_EXTENSION *NextExtension;
717 PVOID ClientIdentificationAddress;
718 } IO_CLIENT_EXTENSION, *PIO_CLIENT_EXTENSION;
719
720 //
721 // Device Node
722 //
723 typedef struct _DEVICE_NODE
724 {
725 struct _DEVICE_NODE *Parent;
726 struct _DEVICE_NODE *PrevSibling;
727 struct _DEVICE_NODE *NextSibling;
728 struct _DEVICE_NODE *Child;
729 ULONG Level;
730 struct _PO_DEVICE_NOTIFY *Notify;
731 PNP_DEVNODE_STATE State;
732 PNP_DEVNODE_STATE PreviousState;
733 PNP_DEVNODE_STATE StateHistory[20];
734 ULONG StateHistoryEntry;
735 INT CompletionStatus;
736 PIRP PendingIrp;
737 ULONG Flags;
738 ULONG UserFlags;
739 ULONG Problem;
740 PDEVICE_OBJECT PhysicalDeviceObject;
741 PCM_RESOURCE_LIST ResourceList;
742 PCM_RESOURCE_LIST ResourceListTranslated;
743 UNICODE_STRING InstancePath;
744 UNICODE_STRING ServiceName;
745 PDEVICE_OBJECT DuplicatePDO;
746 PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements;
747 INTERFACE_TYPE InterfaceType;
748 ULONG BusNumber;
749 INTERFACE_TYPE ChildInterfaceType;
750 ULONG ChildBusNumber;
751 USHORT ChildBusTypeIndex;
752 UCHAR RemovalPolicy;
753 UCHAR HardwareRemovalPolicy;
754 LIST_ENTRY TargetDeviceNotify;
755 LIST_ENTRY DeviceArbiterList;
756 LIST_ENTRY DeviceTranslatorList;
757 USHORT NoTranslatorMask;
758 USHORT QueryTranslatorMask;
759 USHORT NoArbiterMask;
760 USHORT QueryArbiterMask;
761 union
762 {
763 struct _DEVICE_NODE *LegacyDeviceNode;
764 PDEVICE_RELATIONS PendingDeviceRelations;
765 } OverUsed1;
766 union
767 {
768 struct _DEVICE_NODE *NextResourceDeviceNode;
769 } OverUsed2;
770 PCM_RESOURCE_LIST BootResources;
771 ULONG CapabilityFlags;
772 struct
773 {
774 ULONG DockStatus;
775 LIST_ENTRY ListEntry;
776 WCHAR *SerialNumber;
777 } DockInfo;
778 ULONG DisableableDepends;
779 LIST_ENTRY PendedSetInterfaceState;
780 LIST_ENTRY LegacyBusListEntry;
781 ULONG DriverUnloadRetryCount;
782 struct _DEVICE_NODE *PreviousParent;
783 ULONG DeletedChidren;
784 } DEVICE_NODE, *PDEVICE_NODE;
785
786 //
787 // Resource Aribtrer Entry
788 //
789 typedef struct _PI_RESOURCE_ARBITER_ENTRY
790 {
791 LIST_ENTRY DeviceArbiterList;
792 UCHAR ResourceType;
793 PARBITER_INTERFACE ArbiterInterface;
794 ULONG Level;
795 LIST_ENTRY ResourceList;
796 LIST_ENTRY BestResourceList;
797 LIST_ENTRY BestConfig;
798 LIST_ENTRY ActiveArbiterList;
799 UCHAR State;
800 UCHAR ResourcesChanged;
801 } PI_RESOURCE_ARBITER_ENTRY, *PPI_RESOURCE_ARBITER_ENTRY;
802
803 //
804 // Extended Device Object Extension Structure
805 //
806 typedef struct _EXTENDED_DEVOBJ_EXTENSION
807 {
808 CSHORT Type;
809 USHORT Size;
810 PDEVICE_OBJECT DeviceObject;
811 ULONG PowerFlags;
812 struct DEVICE_OBJECT_POWER_EXTENSION *Dope;
813 ULONG ExtensionFlags;
814 struct _DEVICE_NODE *DeviceNode;
815 PDEVICE_OBJECT AttachedTo;
816 LONG StartIoCount;
817 LONG StartIoKey;
818 ULONG StartIoFlags;
819 struct _VPB *Vpb;
820 } EXTENDED_DEVOBJ_EXTENSION, *PEXTENDED_DEVOBJ_EXTENSION;
821
822 //
823 // Extended Driver Object Extension Structure
824 //
825 typedef struct _EXTENDED_DRIVER_EXTENSION
826 {
827 struct _DRIVER_OBJECT *DriverObject;
828 PDRIVER_ADD_DEVICE AddDevice;
829 ULONG Count;
830 UNICODE_STRING ServiceKeyName;
831 PIO_CLIENT_EXTENSION ClientDriverExtension;
832 PFS_FILTER_CALLBACKS FsFilterCallbacks;
833 } EXTENDED_DRIVER_EXTENSION, *PEXTENDED_DRIVER_EXTENSION;
834
835 //
836 // Extended I/O Stack Location Structure
837 //
838 #if !defined(_ALPHA_)
839 #include <pshpack4.h>
840 #endif
841 typedef struct _EXTENDED_IO_STACK_LOCATION
842 {
843 UCHAR MajorFunction;
844 UCHAR MinorFunction;
845 UCHAR Flags;
846 UCHAR Control;
847 union
848 {
849 struct
850 {
851 PIO_SECURITY_CONTEXT SecurityContext;
852 ULONG Options;
853 USHORT FileAttributes;
854 USHORT ShareAccess;
855 ULONG EaLength;
856 } Create;
857 struct
858 {
859 PIO_SECURITY_CONTEXT SecurityContext;
860 ULONG Options;
861 USHORT Reserved;
862 USHORT ShareAccess;
863 struct _NAMED_PIPE_CREATE_PARAMETERS *Parameters;
864 } CreatePipe;
865 struct
866 {
867 PIO_SECURITY_CONTEXT SecurityContext;
868 ULONG Options;
869 USHORT Reserved;
870 USHORT ShareAccess;
871 struct _MAILSLOT_CREATE_PARAMETERS *Parameters;
872 } CreateMailslot;
873 struct
874 {
875 ULONG Length;
876 ULONG Key;
877 LARGE_INTEGER ByteOffset;
878 } Read;
879 struct
880 {
881 ULONG Length;
882 ULONG Key;
883 LARGE_INTEGER ByteOffset;
884 } Write;
885 struct
886 {
887 ULONG Length;
888 PUNICODE_STRING FileName;
889 FILE_INFORMATION_CLASS FileInformationClass;
890 ULONG FileIndex;
891 } QueryDirectory;
892 struct
893 {
894 ULONG Length;
895 ULONG CompletionFilter;
896 } NotifyDirectory;
897 struct
898 {
899 ULONG Length;
900 FILE_INFORMATION_CLASS FileInformationClass;
901 } QueryFile;
902 struct
903 {
904 ULONG Length;
905 FILE_INFORMATION_CLASS FileInformationClass;
906 PFILE_OBJECT FileObject;
907 union
908 {
909 struct
910 {
911 BOOLEAN ReplaceIfExists;
912 BOOLEAN AdvanceOnly;
913 };
914 ULONG ClusterCount;
915 HANDLE DeleteHandle;
916 };
917 } SetFile;
918 struct
919 {
920 ULONG Length;
921 PVOID EaList;
922 ULONG EaListLength;
923 ULONG EaIndex;
924 } QueryEa;
925 struct
926 {
927 ULONG Length;
928 } SetEa;
929 struct
930 {
931 ULONG Length;
932 FS_INFORMATION_CLASS FsInformationClass;
933 } QueryVolume;
934 struct
935 {
936 ULONG Length;
937 FS_INFORMATION_CLASS FsInformationClass;
938 } SetVolume;
939 struct
940 {
941 ULONG OutputBufferLength;
942 ULONG InputBufferLength;
943 ULONG FsControlCode;
944 PVOID Type3InputBuffer;
945 } FileSystemControl;
946 struct
947 {
948 PLARGE_INTEGER Length;
949 ULONG Key;
950 LARGE_INTEGER ByteOffset;
951 } LockControl;
952 struct
953 {
954 ULONG OutputBufferLength;
955 ULONG InputBufferLength;
956 ULONG IoControlCode;
957 PVOID Type3InputBuffer;
958 } DeviceIoControl;
959 struct
960 {
961 SECURITY_INFORMATION SecurityInformation;
962 ULONG POINTER_ALIGNMENT Length;
963 } QuerySecurity;
964 struct
965 {
966 SECURITY_INFORMATION SecurityInformation;
967 PSECURITY_DESCRIPTOR SecurityDescriptor;
968 } SetSecurity;
969 struct
970 {
971 PVPB Vpb;
972 PDEVICE_OBJECT DeviceObject;
973 } MountVolume;
974 struct
975 {
976 PVPB Vpb;
977 PDEVICE_OBJECT DeviceObject;
978 } VerifyVolume;
979 struct
980 {
981 struct _SCSI_REQUEST_BLOCK *Srb;
982 } Scsi;
983 struct
984 {
985 ULONG Length;
986 PSID StartSid;
987 struct _FILE_GET_QUOTA_INFORMATION *SidList;
988 ULONG SidListLength;
989 } QueryQuota;
990 struct
991 {
992 ULONG Length;
993 } SetQuota;
994 struct
995 {
996 DEVICE_RELATION_TYPE Type;
997 } QueryDeviceRelations;
998 struct
999 {
1000 CONST GUID *InterfaceType;
1001 USHORT Size;
1002 USHORT Version;
1003 PINTERFACE Interface;
1004 PVOID InterfaceSpecificData;
1005 } QueryInterface;
1006 struct
1007 {
1008 PDEVICE_CAPABILITIES Capabilities;
1009 } DeviceCapabilities;
1010 struct
1011 {
1012 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
1013 } FilterResourceRequirements;
1014 struct
1015 {
1016 ULONG WhichSpace;
1017 PVOID Buffer;
1018 ULONG Offset;
1019 ULONG Length;
1020 } ReadWriteConfig;
1021 struct
1022 {
1023 BOOLEAN Lock;
1024 } SetLock;
1025 struct
1026 {
1027 BUS_QUERY_ID_TYPE IdType;
1028 } QueryId;
1029 struct
1030 {
1031 DEVICE_TEXT_TYPE DeviceTextType;
1032 LCID LocaleId;
1033 } QueryDeviceText;
1034 struct
1035 {
1036 BOOLEAN InPath;
1037 BOOLEAN Reserved[3];
1038 DEVICE_USAGE_NOTIFICATION_TYPE Type;
1039 } UsageNotification;
1040 struct
1041 {
1042 SYSTEM_POWER_STATE PowerState;
1043 } WaitWake;
1044 struct
1045 {
1046 PPOWER_SEQUENCE PowerSequence;
1047 } PowerSequence;
1048 struct
1049 {
1050 ULONG SystemContext;
1051 POWER_STATE_TYPE Type;
1052 POWER_STATE State;
1053 POWER_ACTION ShutdownType;
1054 } Power;
1055 struct
1056 {
1057 PCM_RESOURCE_LIST AllocatedResources;
1058 PCM_RESOURCE_LIST AllocatedResourcesTranslated;
1059 } StartDevice;
1060 struct
1061 {
1062 ULONG_PTR ProviderId;
1063 PVOID DataPath;
1064 ULONG BufferSize;
1065 PVOID Buffer;
1066 } WMI;
1067 struct
1068 {
1069 PVOID Argument1;
1070 PVOID Argument2;
1071 PVOID Argument3;
1072 PVOID Argument4;
1073 } Others;
1074 } Parameters;
1075 PDEVICE_OBJECT DeviceObject;
1076 PFILE_OBJECT FileObject;
1077 PIO_COMPLETION_ROUTINE CompletionRoutine;
1078 PVOID Context;
1079 } EXTENDED_IO_STACK_LOCATION, *PEXTENDED_IO_STACK_LOCATION;
1080 #if !defined(_ALPHA_)
1081 #include <poppack.h>
1082 #endif
1083 #endif
1084
1085 //
1086 // Firmware Boot File Path
1087 //
1088 typedef struct _FILE_PATH
1089 {
1090 ULONG Version;
1091 ULONG Length;
1092 ULONG Type;
1093 CHAR FilePath[1];
1094 } FILE_PATH, *PFILE_PATH;
1095
1096 //
1097 // Firmware Boot Options
1098 //
1099 typedef struct _BOOT_OPTIONS
1100 {
1101 ULONG Version;
1102 ULONG Length;
1103 ULONG Timeout;
1104 ULONG CurrentBootEntryId;
1105 ULONG NextBootEntryId;
1106 WCHAR HeadlessRedirection[1];
1107 } BOOT_OPTIONS, *PBOOT_OPTIONS;
1108
1109 //
1110 // Firmware Boot Entry
1111 //
1112 typedef struct _BOOT_ENTRY
1113 {
1114 ULONG Version;
1115 ULONG Length;
1116 ULONG Id;
1117 ULONG Attributes;
1118 ULONG FriendlyNameOffset;
1119 ULONG BootFilePathOffset;
1120 ULONG OsOptionsLength;
1121 CHAR OsOptions[1];
1122 } BOOT_ENTRY, *PBOOT_ENTRY;
1123
1124 //
1125 // Firmware Driver Entry
1126 //
1127 typedef struct _EFI_DRIVER_ENTRY
1128 {
1129 ULONG Version;
1130 ULONG Length;
1131 ULONG Id;
1132 ULONG Attributes;
1133 ULONG FriendlyNameOffset;
1134 ULONG DriverFilePathOffset;
1135 } EFI_DRIVER_ENTRY, *PEFI_DRIVER_ENTRY;
1136
1137 //
1138 // APC Callback for NtCreateFile
1139 //
1140 typedef VOID
1141 (NTAPI *PIO_APC_ROUTINE)(
1142 IN PVOID ApcContext,
1143 IN PIO_STATUS_BLOCK IoStatusBlock,
1144 IN ULONG Reserved);
1145
1146 #ifdef NTOS_MODE_USER
1147
1148 //
1149 // Mailslot IOCTL Codes
1150 //
1151 #define FSCTL_MAILSLOT_PEEK \
1152 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
1153
1154 //
1155 // Pipe IOCTL Codes
1156 //
1157 #define FSCTL_PIPE_ASSIGN_EVENT \
1158 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
1159 #define FSCTL_PIPE_DISCONNECT \
1160 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
1161 #define FSCTL_PIPE_LISTEN \
1162 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
1163 #define FSCTL_PIPE_PEEK \
1164 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
1165 #define FSCTL_PIPE_QUERY_EVENT \
1166 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
1167 #define FSCTL_PIPE_TRANSCEIVE \
1168 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1169 #define FSCTL_PIPE_WAIT \
1170 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
1171 #define FSCTL_PIPE_IMPERSONATE \
1172 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
1173 #define FSCTL_PIPE_SET_CLIENT_PROCESS \
1174 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
1175 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
1176 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
1177 #define FSCTL_PIPE_INTERNAL_READ \
1178 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
1179 #define FSCTL_PIPE_INTERNAL_WRITE \
1180 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
1181 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
1182 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
1183 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
1184 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
1185
1186 //
1187 // Tape IOCTL Codes
1188 //
1189 #define IOCTL_TAPE_ERASE \
1190 CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1191 #define IOCTL_TAPE_PREPARE \
1192 CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
1193 #define IOCTL_TAPE_WRITE_MARKS \
1194 CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1195 #define IOCTL_TAPE_GET_POSITION \
1196 CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
1197 #define IOCTL_TAPE_SET_POSITION \
1198 CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)
1199 #define IOCTL_TAPE_GET_DRIVE_PARAMS \
1200 CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)
1201 #define IOCTL_TAPE_SET_DRIVE_PARAMS \
1202 CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1203 #define IOCTL_TAPE_GET_MEDIA_PARAMS \
1204 CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)
1205 #define IOCTL_TAPE_SET_MEDIA_PARAMS \
1206 CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
1207 #define IOCTL_TAPE_GET_STATUS \
1208 CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
1209 #define IOCTL_TAPE_CREATE_PARTITION \
1210 CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
1211
1212 #endif // NTOS_MODE_USER
1213
1214 #endif