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