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 #ifndef _IOTYPES_H 19 #define _IOTYPES_H 20 21 // 22 // Dependencies 23 // 24 #include <umtypes.h> 25 #include <ifssupp.h> 26 #include <potypes.h> 27 28 // 29 // I/O Completion Access Rights 30 // 31 #define IO_COMPLETION_QUERY_STATE 0x0001 32 #ifndef NTOS_MODE_USER 33 #define IO_COMPLETION_MODIFY_STATE 0x0002 34 #define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ 35 SYNCHRONIZE | \ 36 0x3) 37 38 // 39 // Kernel Exported Object Types 40 // 41 extern POBJECT_TYPE NTSYSAPI IoAdapterObjectType; 42 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType; 43 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType; 44 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType; 45 46 #else 47 48 // 49 // Symbolic Link Access Rights 50 // 51 #define SYMBOLIC_LINK_QUERY 0x0001 52 #define SYMBOLIC_LINK_ALL_ACCESS STANDARD_RIGHTS_REQUIRED | 0x0001 53 #endif 54 55 #ifdef NTOS_MODE_USER 56 57 /* File System Attributes Flags */ 58 #define FILE_READ_ONLY_VOLUME 0x00080000 59 60 #endif 61 62 // 63 // NtCreateFile Result Flags 64 // 65 #define FILE_SUPERSEDED 0x00000000 66 #define FILE_OPENED 0x00000001 67 #define FILE_CREATED 0x00000002 68 #define FILE_OVERWRITTEN 0x00000003 69 #define FILE_EXISTS 0x00000004 70 #define FILE_DOES_NOT_EXIST 0x00000005 71 72 // 73 // Pipe Flags 74 // 75 #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000 76 #define FILE_PIPE_MESSAGE_TYPE 0x00000001 77 #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000 78 #define FILE_PIPE_MESSAGE_MODE 0x00000001 79 #define FILE_PIPE_QUEUE_OPERATION 0x00000000 80 #define FILE_PIPE_COMPLETE_OPERATION 0x00000001 81 #define FILE_PIPE_INBOUND 0x00000000 82 #define FILE_PIPE_OUTBOUND 0x00000001 83 #define FILE_PIPE_FULL_DUPLEX 0x00000002 84 #define FILE_PIPE_CLIENT_END 0x00000000 85 #define FILE_PIPE_SERVER_END 0x00000001 86 87 // 88 // NtCreateFile Attributes 89 // 90 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7 91 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7 92 93 // 94 // NtCreateFile OpenType Flags 95 // 96 #define FILE_SUPERSEDE 0x00000000 97 #define FILE_OPEN 0x00000001 98 #define FILE_CREATE 0x00000002 99 #define FILE_OPEN_IF 0x00000003 100 #define FILE_OVERWRITE 0x00000004 101 #define FILE_OVERWRITE_IF 0x00000005 102 #define FILE_MAXIMUM_DISPOSITION 0x00000005 103 104 // 105 // NtCreateFile Flags 106 // 107 #define FILE_DIRECTORY_FILE 0x00000001 108 #define FILE_WRITE_THROUGH 0x00000002 109 #define FILE_SEQUENTIAL_ONLY 0x00000004 110 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008 111 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 112 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 113 #define FILE_NON_DIRECTORY_FILE 0x00000040 114 #define FILE_CREATE_TREE_CONNECTION 0x00000080 115 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100 116 #define FILE_NO_EA_KNOWLEDGE 0x00000200 117 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400 118 #define FILE_RANDOM_ACCESS 0x00000800 119 #define FILE_DELETE_ON_CLOSE 0x00001000 120 #define FILE_OPEN_BY_FILE_ID 0x00002000 121 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000 122 #define FILE_NO_COMPRESSION 0x00008000 123 #define FILE_RESERVE_OPFILTER 0x00100000 124 #define FILE_OPEN_REPARSE_POINT 0x00200000 125 #define FILE_OPEN_NO_RECALL 0x00400000 126 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000 127 128 // 129 // Device Charactertics 130 // 131 #define FILE_REMOVABLE_MEDIA 0x00000001 132 #define FILE_READ_ONLY_DEVICE 0x00000002 133 #define FILE_FLOPPY_DISKETTE 0x00000004 134 #define FILE_WRITE_ONCE_MEDIA 0x00000008 135 #define FILE_REMOTE_DEVICE 0x00000010 136 #define FILE_DEVICE_IS_MOUNTED 0x00000020 137 #define FILE_VIRTUAL_VOLUME 0x00000040 138 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080 139 #define FILE_DEVICE_SECURE_OPEN 0x00000100 140 141 // 142 // File Object Flags 143 // 144 #define FO_FILE_OBJECT_HAS_EXTENSION 0x00800000 145 146 // 147 // Device Object Extension Flags 148 // 149 #define DOE_UNLOAD_PENDING 0x1 150 #define DOE_DELETE_PENDING 0x2 151 #define DOE_REMOVE_PENDING 0x4 152 #define DOE_REMOVE_PROCESSED 0x8 153 #define DOE_START_PENDING 0x10 154 155 // 156 // Device Object StartIo Flags 157 // 158 #define DOE_SIO_NO_KEY 0x20 159 #define DOE_SIO_WITH_KEY 0x40 160 #define DOE_SIO_CANCELABLE 0x80 161 #define DOE_SIO_DEFERRED 0x100 162 #define DOE_SIO_NO_CANCEL 0x200 163 164 // 165 // Device Node Flags 166 // 167 168 // this set of flags is relevant for w2k3 and newer 169 // w2k has a completely different set of flags 170 #define DNF_MADEUP 0x00000001 171 #define DNF_DUPLICATE 0x00000002 172 #define DNF_HAL_NODE 0x00000004 173 #define DNF_REENUMERATE 0x00000008 174 #define DNF_ENUMERATED 0x00000010 175 #define DNF_IDS_QUERIED 0x00000020 176 #define DNF_HAS_BOOT_CONFIG 0x00000040 177 #define DNF_BOOT_CONFIG_RESERVED 0x00000080 178 #define DNF_NO_RESOURCE_REQUIRED 0x00000100 179 #define DNF_RESOURCE_REQUIREMENTS_NEED_FILTERED 0x00000200 180 #define DNF_RESOURCE_REQUIREMENTS_CHANGED 0x00000400 181 #define DNF_NON_STOPPED_REBALANCE 0x00000800 182 #define DNF_LEGACY_DRIVER 0x00001000 183 #define DNF_HAS_PROBLEM 0x00002000 184 #define DNF_HAS_PRIVATE_PROBLEM 0x00004000 185 #define DNF_HARDWARE_VERIFICATION 0x00008000 186 #define DNF_DEVICE_GONE 0x00010000 187 #define DNF_LEGACY_RESOURCE_DEVICENODE 0x00020000 188 #define DNF_NEEDS_REBALANCE 0x00040000 189 #define DNF_LOCKED_FOR_EJECT 0x00080000 190 #define DNF_DRIVER_BLOCKED 0x00100000 191 #define DNF_CHILD_WITH_INVALID_ID 0x00200000 192 193 // these flags were added in Vista or later 194 #define DNF_ASYNC_START_NOT_SUPPORTED 0x00400000 195 #define DNF_ASYNC_ENUMERATION_NOT_SUPPORTED 0x00800000 196 #define DNF_LOCKED_FOR_REBALANCE 0x01000000 197 #define DNF_UNINSTALLED 0x02000000 198 #define DNF_NO_LOWER_DEVICE_FILTERS 0x04000000 199 #define DNF_NO_LOWER_CLASS_FILTERS 0x08000000 200 #define DNF_NO_SERVICE 0x10000000 201 #define DNF_NO_UPPER_DEVICE_FILTERS 0x20000000 202 #define DNF_NO_UPPER_CLASS_FILTERS 0x40000000 203 #define DNF_WAITING_FOR_FDO 0x80000000 204 205 // 206 // Device Node User Flags 207 // 208 #define DNUF_WILL_BE_REMOVED 0x0001 209 #define DNUF_DONT_SHOW_IN_UI 0x0002 210 #define DNUF_NEED_RESTART 0x0004 211 #define DNUF_NOT_DISABLEABLE 0x0008 212 #define DNUF_SHUTDOWN_QUERIED 0x0010 213 #define DNUF_SHUTDOWN_SUBTREE_DONE 0x0020 214 215 // 216 // Internal Option Flags 217 // 218 #define IO_ATTACH_DEVICE_API 0x80000000 219 220 // 221 // Undocumented WMI Registration Flags 222 // 223 #define WMIREG_FLAG_TRACE_PROVIDER 0x00010000 224 #define WMIREG_FLAG_TRACE_NOTIFY_MASK 0x00F00000 225 #define WMIREG_NOTIFY_DISK_IO 0x00100000 226 #define WMIREG_NOTIFY_TDI_IO 0x00200000 227 228 // 229 // I/O Completion Information Class for NtQueryIoCompletionInformation 230 // 231 typedef enum _IO_COMPLETION_INFORMATION_CLASS 232 { 233 IoCompletionBasicInformation 234 } IO_COMPLETION_INFORMATION_CLASS; 235 236 #ifdef NTOS_MODE_USER 237 238 // 239 // Hardware Interface Type 240 // 241 typedef enum _INTERFACE_TYPE 242 { 243 InterfaceTypeUndefined = -1, 244 Internal, 245 Isa, 246 Eisa, 247 MicroChannel, 248 TurboChannel, 249 PCIBus, 250 VMEBus, 251 NuBus, 252 PCMCIABus, 253 CBus, 254 MPIBus, 255 MPSABus, 256 ProcessorInternal, 257 InternalPowerBus, 258 PNPISABus, 259 PNPBus, 260 MaximumInterfaceType 261 }INTERFACE_TYPE, *PINTERFACE_TYPE; 262 263 typedef enum _BUS_DATA_TYPE 264 { 265 ConfigurationSpaceUndefined = -1, 266 Cmos, 267 EisaConfiguration, 268 Pos, 269 CbusConfiguration, 270 PCIConfiguration, 271 VMEConfiguration, 272 NuBusConfiguration, 273 PCMCIAConfiguration, 274 MPIConfiguration, 275 MPSAConfiguration, 276 PNPISAConfiguration, 277 SgiInternalConfiguration, 278 MaximumBusDataType 279 } BUS_DATA_TYPE, *PBUS_DATA_TYPE; 280 281 #if defined(NT_PROCESSOR_GROUPS) 282 283 typedef USHORT IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY; 284 285 enum _IRQ_DEVICE_POLICY_USHORT { 286 IrqPolicyMachineDefault = 0, 287 IrqPolicyAllCloseProcessors = 1, 288 IrqPolicyOneCloseProcessor = 2, 289 IrqPolicyAllProcessorsInMachine = 3, 290 IrqPolicyAllProcessorsInGroup = 3, 291 IrqPolicySpecifiedProcessors = 4, 292 IrqPolicySpreadMessagesAcrossAllProcessors = 5}; 293 294 #else /* defined(NT_PROCESSOR_GROUPS) */ 295 296 typedef enum _IRQ_DEVICE_POLICY { 297 IrqPolicyMachineDefault = 0, 298 IrqPolicyAllCloseProcessors, 299 IrqPolicyOneCloseProcessor, 300 IrqPolicyAllProcessorsInMachine, 301 IrqPolicySpecifiedProcessors, 302 IrqPolicySpreadMessagesAcrossAllProcessors 303 } IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY; 304 305 #endif 306 307 typedef enum _IRQ_PRIORITY { 308 IrqPriorityUndefined = 0, 309 IrqPriorityLow, 310 IrqPriorityNormal, 311 IrqPriorityHigh 312 } IRQ_PRIORITY, *PIRQ_PRIORITY; 313 314 #define IO_RESOURCE_PREFERRED 0x01 315 #define IO_RESOURCE_DEFAULT 0x02 316 #define IO_RESOURCE_ALTERNATIVE 0x08 317 318 typedef struct _IO_RESOURCE_DESCRIPTOR { 319 UCHAR Option; 320 UCHAR Type; 321 UCHAR ShareDisposition; 322 UCHAR Spare1; 323 USHORT Flags; 324 USHORT Spare2; 325 union { 326 struct { 327 ULONG Length; 328 ULONG Alignment; 329 PHYSICAL_ADDRESS MinimumAddress; 330 PHYSICAL_ADDRESS MaximumAddress; 331 } Port; 332 struct { 333 ULONG Length; 334 ULONG Alignment; 335 PHYSICAL_ADDRESS MinimumAddress; 336 PHYSICAL_ADDRESS MaximumAddress; 337 } Memory; 338 struct { 339 ULONG MinimumVector; 340 ULONG MaximumVector; 341 #if defined(NT_PROCESSOR_GROUPS) 342 IRQ_DEVICE_POLICY AffinityPolicy; 343 USHORT Group; 344 #else 345 IRQ_DEVICE_POLICY AffinityPolicy; 346 #endif 347 IRQ_PRIORITY PriorityPolicy; 348 KAFFINITY TargetedProcessors; 349 } Interrupt; 350 struct { 351 ULONG MinimumChannel; 352 ULONG MaximumChannel; 353 } Dma; 354 struct { 355 ULONG Length; 356 ULONG Alignment; 357 PHYSICAL_ADDRESS MinimumAddress; 358 PHYSICAL_ADDRESS MaximumAddress; 359 } Generic; 360 struct { 361 ULONG Data[3]; 362 } DevicePrivate; 363 struct { 364 ULONG Length; 365 ULONG MinBusNumber; 366 ULONG MaxBusNumber; 367 ULONG Reserved; 368 } BusNumber; 369 struct { 370 ULONG Priority; 371 ULONG Reserved1; 372 ULONG Reserved2; 373 } ConfigData; 374 } u; 375 } IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR; 376 377 typedef struct _IO_RESOURCE_LIST { 378 USHORT Version; 379 USHORT Revision; 380 ULONG Count; 381 IO_RESOURCE_DESCRIPTOR Descriptors[1]; 382 } IO_RESOURCE_LIST, *PIO_RESOURCE_LIST; 383 384 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST { 385 ULONG ListSize; 386 INTERFACE_TYPE InterfaceType; 387 ULONG BusNumber; 388 ULONG SlotNumber; 389 ULONG Reserved[3]; 390 ULONG AlternativeLists; 391 IO_RESOURCE_LIST List[1]; 392 } IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST; 393 394 // 395 // File Information Classes for NtQueryInformationFile 396 // 397 typedef enum _FILE_INFORMATION_CLASS 398 { 399 FileDirectoryInformation = 1, 400 FileFullDirectoryInformation = 2, 401 FileBothDirectoryInformation = 3, 402 FileBasicInformation = 4, 403 FileStandardInformation = 5, 404 FileInternalInformation = 6, 405 FileEaInformation = 7, 406 FileAccessInformation = 8, 407 FileNameInformation = 9, 408 FileRenameInformation = 10, 409 FileLinkInformation = 11, 410 FileNamesInformation = 12, 411 FileDispositionInformation = 13, 412 FilePositionInformation = 14, 413 FileFullEaInformation = 15, 414 FileModeInformation = 16, 415 FileAlignmentInformation = 17, 416 FileAllInformation = 18, 417 FileAllocationInformation = 19, 418 FileEndOfFileInformation = 20, 419 FileAlternateNameInformation = 21, 420 FileStreamInformation = 22, 421 FilePipeInformation = 23, 422 FilePipeLocalInformation = 24, 423 FilePipeRemoteInformation = 25, 424 FileMailslotQueryInformation = 26, 425 FileMailslotSetInformation = 27, 426 FileCompressionInformation = 28, 427 FileObjectIdInformation = 29, 428 FileCompletionInformation = 30, 429 FileMoveClusterInformation = 31, 430 FileQuotaInformation = 32, 431 FileReparsePointInformation = 33, 432 FileNetworkOpenInformation = 34, 433 FileAttributeTagInformation = 35, 434 FileTrackingInformation = 36, 435 FileIdBothDirectoryInformation = 37, 436 FileIdFullDirectoryInformation = 38, 437 FileValidDataLengthInformation = 39, 438 FileShortNameInformation = 40, 439 FileIoCompletionNotificationInformation = 41, 440 #if (NTDDI_VERSION >= NTDDI_VISTA) || defined(__REACTOS__) 441 FileIoStatusBlockRangeInformation = 42, 442 FileIoPriorityHintInformation = 43, 443 FileSfioReserveInformation = 44, 444 FileSfioVolumeInformation = 45, 445 FileHardLinkInformation = 46, 446 FileProcessIdsUsingFileInformation = 47, 447 FileNormalizedNameInformation = 48, 448 FileNetworkPhysicalNameInformation = 49, 449 #endif 450 #if (NTDDI_VERSION >= NTDDI_WIN7) || defined(__REACTOS__) 451 FileIdGlobalTxDirectoryInformation = 50, 452 FileIsRemoteDeviceInformation = 51, 453 FileAttributeCacheInformation = 52, // FileUnusedInformation since Windows 8.1 454 FileNumaNodeInformation = 53, 455 FileStandardLinkInformation = 54, 456 FileRemoteProtocolInformation = 55, 457 #endif 458 #if (NTDDI_VERSION >= NTDDI_WIN8) || defined(__REACTOS__) 459 FileRenameInformationBypassAccessCheck = 56, 460 FileLinkInformationBypassAccessCheck = 57, 461 FileVolumeNameInformation = 58, 462 FileIdInformation = 59, 463 FileIdExtdDirectoryInformation = 60, 464 #endif 465 #if (NTDDI_VERSION >= NTDDI_WINBLUE) || defined(__REACTOS__) 466 FileReplaceCompletionInformation = 61, 467 FileHardLinkFullIdInformation = 62, 468 FileIdExtdBothDirectoryInformation = 63, // Update 1 469 #endif 470 #if (NTDDI_VERSION >= NTDDI_WIN10_RS1) || defined(__REACTOS__) 471 FileDispositionInformationEx = 64, 472 FileRenameInformationEx = 65, 473 FileRenameInformationExBypassAccessCheck = 66, 474 #endif 475 #if (NTDDI_VERSION >= NTDDI_WIN10_RS2) || defined(__REACTOS__) 476 FileDesiredStorageClassInformation = 67, 477 FileStatInformation = 68, 478 #endif 479 #if (NTDDI_VERSION >= NTDDI_WIN10_RS3) || defined(__REACTOS__) 480 FileMemoryPartitionInformation = 69, 481 #endif 482 #if (NTDDI_VERSION >= NTDDI_WIN10_RS4) || defined(__REACTOS__) 483 FileStatLxInformation = 70, 484 FileCaseSensitiveInformation = 71, 485 #endif 486 #if (NTDDI_VERSION >= NTDDI_WIN10_RS5) || defined(__REACTOS__) 487 FileLinkInformationEx = 72, 488 FileLinkInformationExBypassAccessCheck = 73, 489 FileStorageReserveIdInformation = 74, 490 FileCaseSensitiveInformationForceAccessCheck = 75, 491 #endif 492 #if (NTDDI_VERSION >= NTDDI_WIN11) || defined(__REACTOS__) // 10.0.20150.1000 493 FileKnownFolderInformation = 76, 494 #endif 495 FileMaximumInformation 496 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; 497 498 // 499 // File Information Classes for NtQueryInformationFileSystem 500 // 501 typedef enum _FSINFOCLASS 502 { 503 FileFsVolumeInformation = 1, 504 FileFsLabelInformation, 505 FileFsSizeInformation, 506 FileFsDeviceInformation, 507 FileFsAttributeInformation, 508 FileFsControlInformation, 509 FileFsFullSizeInformation, 510 FileFsObjectIdInformation, 511 FileFsDriverPathInformation, 512 FileFsMaximumInformation 513 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; 514 515 #endif 516 517 // 518 // Dock Profile Status 519 // 520 typedef enum _PROFILE_STATUS 521 { 522 DOCK_NOTDOCKDEVICE, 523 DOCK_QUIESCENT, 524 DOCK_ARRIVING, 525 DOCK_DEPARTING, 526 DOCK_EJECTIRP_COMPLETED 527 } PROFILE_STATUS, *PPROFILE_STATUS; 528 529 // 530 // Device Node States 531 // 532 typedef enum _PNP_DEVNODE_STATE 533 { 534 DeviceNodeUnspecified = 0x300, 535 DeviceNodeUninitialized = 0x301, 536 DeviceNodeInitialized = 0x302, 537 DeviceNodeDriversAdded = 0x303, 538 DeviceNodeResourcesAssigned = 0x304, 539 DeviceNodeStartPending = 0x305, 540 DeviceNodeStartCompletion = 0x306, 541 DeviceNodeStartPostWork = 0x307, 542 DeviceNodeStarted = 0x308, 543 DeviceNodeQueryStopped = 0x309, 544 DeviceNodeStopped = 0x30a, 545 DeviceNodeRestartCompletion = 0x30b, 546 DeviceNodeEnumeratePending = 0x30c, 547 DeviceNodeEnumerateCompletion = 0x30d, 548 DeviceNodeAwaitingQueuedDeletion = 0x30e, 549 DeviceNodeAwaitingQueuedRemoval = 0x30f, 550 DeviceNodeQueryRemoved = 0x310, 551 DeviceNodeRemovePendingCloses = 0x311, 552 DeviceNodeRemoved = 0x312, 553 DeviceNodeDeletePendingCloses = 0x313, 554 DeviceNodeDeleted = 0x314, 555 MaxDeviceNodeState = 0x315, 556 } PNP_DEVNODE_STATE; 557 558 #ifdef NTOS_MODE_USER 559 560 // 561 // I/O Status Block 562 // 563 typedef struct _IO_STATUS_BLOCK 564 { 565 union 566 { 567 NTSTATUS Status; 568 PVOID Pointer; 569 }; 570 ULONG_PTR Information; 571 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; 572 573 // 574 // File Information structures for NtQueryInformationFile 575 // 576 typedef struct _FILE_BASIC_INFORMATION 577 { 578 LARGE_INTEGER CreationTime; 579 LARGE_INTEGER LastAccessTime; 580 LARGE_INTEGER LastWriteTime; 581 LARGE_INTEGER ChangeTime; 582 ULONG FileAttributes; 583 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; 584 585 typedef struct _FILE_STANDARD_INFORMATION 586 { 587 LARGE_INTEGER AllocationSize; 588 LARGE_INTEGER EndOfFile; 589 ULONG NumberOfLinks; 590 BOOLEAN DeletePending; 591 BOOLEAN Directory; 592 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; 593 594 typedef struct _FILE_STREAM_INFORMATION 595 { 596 ULONG NextEntryOffset; 597 ULONG StreamNameLength; 598 LARGE_INTEGER StreamSize; 599 LARGE_INTEGER StreamAllocationSize; 600 WCHAR StreamName[1]; 601 } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION; 602 603 typedef struct _FILE_NETWORK_OPEN_INFORMATION 604 { 605 LARGE_INTEGER CreationTime; 606 LARGE_INTEGER LastAccessTime; 607 LARGE_INTEGER LastWriteTime; 608 LARGE_INTEGER ChangeTime; 609 LARGE_INTEGER AllocationSize; 610 LARGE_INTEGER EndOfFile; 611 ULONG FileAttributes; 612 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION; 613 614 typedef struct _FILE_EA_INFORMATION 615 { 616 ULONG EaSize; 617 } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION; 618 619 typedef struct _FILE_ACCESS_INFORMATION 620 { 621 ACCESS_MASK AccessFlags; 622 } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION; 623 624 typedef struct _FILE_COMPRESSION_INFORMATION 625 { 626 LARGE_INTEGER CompressedFileSize; 627 USHORT CompressionFormat; 628 UCHAR CompressionUnitShift; 629 UCHAR ChunkShift; 630 UCHAR ClusterShift; 631 UCHAR Reserved[3]; 632 } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION; 633 634 typedef struct _FILE_POSITION_INFORMATION 635 { 636 LARGE_INTEGER CurrentByteOffset; 637 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; 638 639 typedef struct _FILE_DISPOSITION_INFORMATION 640 { 641 BOOLEAN DeleteFile; 642 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; 643 644 typedef struct _FILE_FULL_EA_INFORMATION 645 { 646 ULONG NextEntryOffset; 647 UCHAR Flags; 648 UCHAR EaNameLength; 649 USHORT EaValueLength; 650 CHAR EaName[1]; 651 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION; 652 653 typedef struct _FILE_QUOTA_INFORMATION 654 { 655 ULONG NextEntryOffset; 656 ULONG SidLength; 657 LARGE_INTEGER ChangeTime; 658 LARGE_INTEGER QuotaUsed; 659 LARGE_INTEGER QuotaThreshold; 660 LARGE_INTEGER QuotaLimit; 661 SID Sid; 662 } FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION; 663 664 typedef struct _FILE_INTERNAL_INFORMATION 665 { 666 LARGE_INTEGER IndexNumber; 667 } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION; 668 669 typedef struct _FILE_RENAME_INFORMATION 670 { 671 BOOLEAN ReplaceIfExists; 672 HANDLE RootDirectory; 673 ULONG FileNameLength; 674 WCHAR FileName[1]; 675 } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION; 676 677 typedef struct _FILE_PIPE_INFORMATION 678 { 679 ULONG ReadMode; 680 ULONG CompletionMode; 681 } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION; 682 683 typedef struct _FILE_PIPE_LOCAL_INFORMATION 684 { 685 ULONG NamedPipeType; 686 ULONG NamedPipeConfiguration; 687 ULONG MaximumInstances; 688 ULONG CurrentInstances; 689 ULONG InboundQuota; 690 ULONG ReadDataAvailable; 691 ULONG OutboundQuota; 692 ULONG WriteQuotaAvailable; 693 ULONG NamedPipeState; 694 ULONG NamedPipeEnd; 695 } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; 696 697 typedef struct _FILE_PIPE_REMOTE_INFORMATION 698 { 699 LARGE_INTEGER CollectDataTime; 700 ULONG MaximumCollectionCount; 701 } FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION; 702 703 typedef struct _FILE_MAILSLOT_QUERY_INFORMATION 704 { 705 ULONG MaximumMessageSize; 706 ULONG MailslotQuota; 707 ULONG NextMessageSize; 708 ULONG MessagesAvailable; 709 LARGE_INTEGER ReadTimeout; 710 } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION; 711 712 typedef struct _FILE_MAILSLOT_SET_INFORMATION 713 { 714 PLARGE_INTEGER ReadTimeout; 715 } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION; 716 717 typedef struct _FILE_FULL_DIR_INFORMATION 718 { 719 ULONG NextEntryOffset; 720 ULONG FileIndex; 721 LARGE_INTEGER CreationTime; 722 LARGE_INTEGER LastAccessTime; 723 LARGE_INTEGER LastWriteTime; 724 LARGE_INTEGER ChangeTime; 725 LARGE_INTEGER EndOfFile; 726 LARGE_INTEGER AllocationSize; 727 ULONG FileAttributes; 728 ULONG FileNameLength; 729 ULONG EaSize; 730 WCHAR FileName[1]; 731 } FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION; 732 733 typedef struct _FILE_BOTH_DIR_INFORMATION 734 { 735 ULONG NextEntryOffset; 736 ULONG FileIndex; 737 LARGE_INTEGER CreationTime; 738 LARGE_INTEGER LastAccessTime; 739 LARGE_INTEGER LastWriteTime; 740 LARGE_INTEGER ChangeTime; 741 LARGE_INTEGER EndOfFile; 742 LARGE_INTEGER AllocationSize; 743 ULONG FileAttributes; 744 ULONG FileNameLength; 745 ULONG EaSize; 746 CCHAR ShortNameLength; 747 WCHAR ShortName[12]; 748 WCHAR FileName[1]; 749 } FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION; 750 751 typedef struct _FILE_COMPLETION_INFORMATION 752 { 753 HANDLE Port; 754 PVOID Key; 755 } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION; 756 757 typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION 758 { 759 ULONG Flags; 760 } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION; 761 762 typedef struct _FILE_LINK_INFORMATION 763 { 764 BOOLEAN ReplaceIfExists; 765 HANDLE RootDirectory; 766 ULONG FileNameLength; 767 WCHAR FileName[1]; 768 } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION; 769 770 typedef struct _FILE_NAME_INFORMATION 771 { 772 ULONG FileNameLength; 773 WCHAR FileName[1]; 774 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; 775 776 typedef struct _FILE_ALLOCATION_INFORMATION 777 { 778 LARGE_INTEGER AllocationSize; 779 } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION; 780 781 typedef struct _FILE_END_OF_FILE_INFORMATION 782 { 783 LARGE_INTEGER EndOfFile; 784 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; 785 786 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION 787 { 788 LARGE_INTEGER ValidDataLength; 789 } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION; 790 791 typedef struct _FILE_DIRECTORY_INFORMATION 792 { 793 ULONG NextEntryOffset; 794 ULONG FileIndex; 795 LARGE_INTEGER CreationTime; 796 LARGE_INTEGER LastAccessTime; 797 LARGE_INTEGER LastWriteTime; 798 LARGE_INTEGER ChangeTime; 799 LARGE_INTEGER EndOfFile; 800 LARGE_INTEGER AllocationSize; 801 ULONG FileAttributes; 802 ULONG FileNameLength; 803 WCHAR FileName[1]; 804 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION; 805 806 typedef struct _FILE_IO_COMPLETION_INFORMATION 807 { 808 PVOID KeyContext; 809 PVOID ApcContext; 810 IO_STATUS_BLOCK IoStatusBlock; 811 } FILE_IO_COMPLETION_INFORMATION, *PFILE_IO_COMPLETION_INFORMATION; 812 813 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION 814 { 815 ULONG FileAttributes; 816 ULONG ReparseTag; 817 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION; 818 819 typedef struct _FILE_TRACKING_INFORMATION 820 { 821 HANDLE DestinationFile; 822 ULONG ObjectInformationLength; 823 CHAR ObjectInformation[1]; 824 } FILE_TRACKING_INFORMATION, *PFILE_TRACKING_INFORMATION; 825 826 // 827 // File System Information structures for NtQueryInformationFile 828 // 829 typedef struct _FILE_FS_DEVICE_INFORMATION 830 { 831 DEVICE_TYPE DeviceType; 832 ULONG Characteristics; 833 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; 834 835 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION 836 { 837 ULONG FileSystemAttributes; 838 ULONG MaximumComponentNameLength; 839 ULONG FileSystemNameLength; 840 WCHAR FileSystemName[1]; 841 } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION; 842 843 typedef struct _FILE_FS_SIZE_INFORMATION 844 { 845 LARGE_INTEGER TotalAllocationUnits; 846 LARGE_INTEGER AvailableAllocationUnits; 847 ULONG SectorsPerAllocationUnit; 848 ULONG BytesPerSector; 849 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION; 850 851 typedef struct _FILE_FS_FULL_SIZE_INFORMATION 852 { 853 LARGE_INTEGER TotalAllocationUnits; 854 LARGE_INTEGER CallerAvailableAllocationUnits; 855 LARGE_INTEGER ActualAvailableAllocationUnits; 856 ULONG SectorsPerAllocationUnit; 857 ULONG BytesPerSector; 858 } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION; 859 860 typedef struct _FILE_FS_LABEL_INFORMATION 861 { 862 ULONG VolumeLabelLength; 863 WCHAR VolumeLabel[1]; 864 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION; 865 866 typedef struct _FILE_FS_VOLUME_INFORMATION 867 { 868 LARGE_INTEGER VolumeCreationTime; 869 ULONG VolumeSerialNumber; 870 ULONG VolumeLabelLength; 871 BOOLEAN SupportsObjects; 872 WCHAR VolumeLabel[1]; 873 } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION; 874 875 // 876 // Pipe Structures for IOCTL_PIPE_XXX 877 // 878 typedef struct _FILE_PIPE_WAIT_FOR_BUFFER 879 { 880 LARGE_INTEGER Timeout; 881 ULONG NameLength; 882 BOOLEAN TimeoutSpecified; 883 WCHAR Name[1]; 884 } FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER; 885 886 typedef struct _FILE_PIPE_PEEK_BUFFER 887 { 888 ULONG NamedPipeState; 889 ULONG ReadDataAvailable; 890 ULONG NumberOfMessages; 891 ULONG MessageLength; 892 CHAR Data[1]; 893 } FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER; 894 895 typedef struct _FILE_MODE_INFORMATION 896 { 897 ULONG Mode; 898 } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION; 899 900 // 901 // I/O Error Log Structures 902 // 903 typedef struct _IO_ERROR_LOG_PACKET 904 { 905 UCHAR MajorFunctionCode; 906 UCHAR RetryCount; 907 USHORT DumpDataSize; 908 USHORT NumberOfStrings; 909 USHORT StringOffset; 910 USHORT EventCategory; 911 NTSTATUS ErrorCode; 912 ULONG UniqueErrorValue; 913 NTSTATUS FinalStatus; 914 ULONG SequenceNumber; 915 ULONG IoControlCode; 916 LARGE_INTEGER DeviceOffset; 917 ULONG DumpData[1]; 918 } IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET; 919 920 typedef struct _IO_ERROR_LOG_MESSAGE 921 { 922 USHORT Type; 923 USHORT Size; 924 USHORT DriverNameLength; 925 LARGE_INTEGER TimeStamp; 926 ULONG DriverNameOffset; 927 IO_ERROR_LOG_PACKET EntryData; 928 } IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE; 929 930 #endif 931 932 // 933 // I/O Completion Information structures 934 // 935 typedef struct _IO_COMPLETION_BASIC_INFORMATION 936 { 937 LONG Depth; 938 } IO_COMPLETION_BASIC_INFORMATION, *PIO_COMPLETION_BASIC_INFORMATION; 939 940 // 941 // Parameters for NtCreateMailslotFile/NtCreateNamedPipeFile 942 // 943 typedef struct _MAILSLOT_CREATE_PARAMETERS 944 { 945 ULONG MailslotQuota; 946 ULONG MaximumMessageSize; 947 LARGE_INTEGER ReadTimeout; 948 BOOLEAN TimeoutSpecified; 949 } MAILSLOT_CREATE_PARAMETERS, *PMAILSLOT_CREATE_PARAMETERS; 950 951 typedef struct _NAMED_PIPE_CREATE_PARAMETERS 952 { 953 ULONG NamedPipeType; 954 ULONG ReadMode; 955 ULONG CompletionMode; 956 ULONG MaximumInstances; 957 ULONG InboundQuota; 958 ULONG OutboundQuota; 959 LARGE_INTEGER DefaultTimeout; 960 BOOLEAN TimeoutSpecified; 961 } NAMED_PIPE_CREATE_PARAMETERS, *PNAMED_PIPE_CREATE_PARAMETERS; 962 963 #ifndef NTOS_MODE_USER 964 965 // 966 // I/O Timer Object 967 // 968 typedef struct _IO_TIMER 969 { 970 USHORT Type; 971 USHORT TimerEnabled; 972 LIST_ENTRY IoTimerList; 973 PIO_TIMER_ROUTINE TimerRoutine; 974 PVOID Context; 975 PDEVICE_OBJECT DeviceObject; 976 } IO_TIMER; 977 978 // 979 // Driver Extension 980 // 981 typedef struct _IO_CLIENT_EXTENSION 982 { 983 struct _IO_CLIENT_EXTENSION *NextExtension; 984 PVOID ClientIdentificationAddress; 985 } IO_CLIENT_EXTENSION, *PIO_CLIENT_EXTENSION; 986 987 #define DEVNODE_HISTORY_SIZE 20 988 989 // 990 // Device Node 991 // 992 typedef struct _DEVICE_NODE 993 { 994 struct _DEVICE_NODE *Sibling; 995 struct _DEVICE_NODE *Child; 996 struct _DEVICE_NODE *Parent; 997 struct _DEVICE_NODE *LastChild; 998 ULONG Level; 999 struct _PO_DEVICE_NOTIFY *Notify; 1000 PO_IRP_MANAGER PoIrpManager; 1001 PNP_DEVNODE_STATE State; 1002 PNP_DEVNODE_STATE PreviousState; 1003 PNP_DEVNODE_STATE StateHistory[DEVNODE_HISTORY_SIZE]; 1004 ULONG StateHistoryEntry; 1005 NTSTATUS CompletionStatus; 1006 PIRP PendingIrp; 1007 ULONG Flags; 1008 ULONG UserFlags; 1009 ULONG Problem; 1010 PDEVICE_OBJECT PhysicalDeviceObject; 1011 PCM_RESOURCE_LIST ResourceList; 1012 PCM_RESOURCE_LIST ResourceListTranslated; 1013 UNICODE_STRING InstancePath; 1014 UNICODE_STRING ServiceName; 1015 PDEVICE_OBJECT DuplicatePDO; 1016 PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements; 1017 INTERFACE_TYPE InterfaceType; 1018 ULONG BusNumber; 1019 INTERFACE_TYPE ChildInterfaceType; 1020 ULONG ChildBusNumber; 1021 USHORT ChildBusTypeIndex; 1022 UCHAR RemovalPolicy; 1023 UCHAR HardwareRemovalPolicy; 1024 LIST_ENTRY TargetDeviceNotify; 1025 LIST_ENTRY DeviceArbiterList; 1026 LIST_ENTRY DeviceTranslatorList; 1027 USHORT NoTranslatorMask; 1028 USHORT QueryTranslatorMask; 1029 USHORT NoArbiterMask; 1030 USHORT QueryArbiterMask; 1031 union 1032 { 1033 struct _DEVICE_NODE *LegacyDeviceNode; 1034 PDEVICE_RELATIONS PendingDeviceRelations; 1035 } OverUsed1; 1036 union 1037 { 1038 struct _DEVICE_NODE *NextResourceDeviceNode; 1039 } OverUsed2; 1040 PCM_RESOURCE_LIST BootResources; 1041 #if (NTDDI_VERSION >= NTDDI_LONGHORN) 1042 PCM_RESOURCE_LIST BootResourcesTranslated; 1043 #endif 1044 ULONG CapabilityFlags; 1045 struct 1046 { 1047 PROFILE_STATUS DockStatus; 1048 LIST_ENTRY ListEntry; 1049 WCHAR *SerialNumber; 1050 } DockInfo; 1051 ULONG DisableableDepends; 1052 LIST_ENTRY PendedSetInterfaceState; 1053 LIST_ENTRY LegacyBusListEntry; 1054 ULONG DriverUnloadRetryCount; 1055 struct _DEVICE_NODE *PreviousParent; 1056 ULONG DeletedChildren; 1057 #if (NTDDI_VERSION >= NTDDI_LONGHORN) 1058 ULONG NumaNodeIndex; 1059 #endif 1060 } DEVICE_NODE, *PDEVICE_NODE; 1061 1062 // 1063 // Resource Aribtrer Entry 1064 // 1065 typedef struct _PI_RESOURCE_ARBITER_ENTRY 1066 { 1067 LIST_ENTRY DeviceArbiterList; 1068 UCHAR ResourceType; 1069 PARBITER_INTERFACE ArbiterInterface; 1070 ULONG Level; 1071 LIST_ENTRY ResourceList; 1072 LIST_ENTRY BestResourceList; 1073 LIST_ENTRY BestConfig; 1074 LIST_ENTRY ActiveArbiterList; 1075 UCHAR State; 1076 UCHAR ResourcesChanged; 1077 } PI_RESOURCE_ARBITER_ENTRY, *PPI_RESOURCE_ARBITER_ENTRY; 1078 1079 // 1080 // Extended Device Object Extension Structure 1081 // 1082 typedef struct _EXTENDED_DEVOBJ_EXTENSION 1083 { 1084 CSHORT Type; 1085 USHORT Size; 1086 PDEVICE_OBJECT DeviceObject; 1087 ULONG PowerFlags; 1088 struct _DEVICE_OBJECT_POWER_EXTENSION *Dope; 1089 ULONG ExtensionFlags; 1090 struct _DEVICE_NODE *DeviceNode; 1091 PDEVICE_OBJECT AttachedTo; 1092 LONG StartIoCount; 1093 LONG StartIoKey; 1094 ULONG StartIoFlags; 1095 struct _VPB *Vpb; 1096 } EXTENDED_DEVOBJ_EXTENSION, *PEXTENDED_DEVOBJ_EXTENSION; 1097 1098 // 1099 // Extended Driver Object Extension Structure 1100 // 1101 typedef struct _EXTENDED_DRIVER_EXTENSION 1102 { 1103 struct _DRIVER_OBJECT *DriverObject; 1104 PDRIVER_ADD_DEVICE AddDevice; 1105 ULONG Count; 1106 UNICODE_STRING ServiceKeyName; 1107 PIO_CLIENT_EXTENSION ClientDriverExtension; 1108 PFS_FILTER_CALLBACKS FsFilterCallbacks; 1109 } EXTENDED_DRIVER_EXTENSION, *PEXTENDED_DRIVER_EXTENSION; 1110 1111 #endif // !NTOS_MODE_USER 1112 1113 // 1114 // Firmware Boot File Path 1115 // 1116 typedef struct _FILE_PATH 1117 { 1118 ULONG Version; 1119 ULONG Length; 1120 ULONG Type; 1121 CHAR FilePath[1]; 1122 } FILE_PATH, *PFILE_PATH; 1123 1124 // 1125 // Firmware Boot Options 1126 // 1127 typedef struct _BOOT_OPTIONS 1128 { 1129 ULONG Version; 1130 ULONG Length; 1131 ULONG Timeout; 1132 ULONG CurrentBootEntryId; 1133 ULONG NextBootEntryId; 1134 WCHAR HeadlessRedirection[1]; 1135 } BOOT_OPTIONS, *PBOOT_OPTIONS; 1136 1137 // 1138 // Firmware Boot Entry 1139 // 1140 typedef struct _BOOT_ENTRY 1141 { 1142 ULONG Version; 1143 ULONG Length; 1144 ULONG Id; 1145 ULONG Attributes; 1146 ULONG FriendlyNameOffset; 1147 ULONG BootFilePathOffset; 1148 ULONG OsOptionsLength; 1149 CHAR OsOptions[1]; 1150 } BOOT_ENTRY, *PBOOT_ENTRY; 1151 1152 // 1153 // Firmware Driver Entry 1154 // 1155 typedef struct _EFI_DRIVER_ENTRY 1156 { 1157 ULONG Version; 1158 ULONG Length; 1159 ULONG Id; 1160 ULONG Attributes; 1161 ULONG FriendlyNameOffset; 1162 ULONG DriverFilePathOffset; 1163 } EFI_DRIVER_ENTRY, *PEFI_DRIVER_ENTRY; 1164 1165 #ifdef NTOS_MODE_USER 1166 1167 // 1168 // APC Callback for NtReadFile, NtWriteFile 1169 // 1170 typedef VOID 1171 (NTAPI *PIO_APC_ROUTINE)( 1172 _In_ PVOID ApcContext, 1173 _In_ PIO_STATUS_BLOCK IoStatusBlock, 1174 _In_ ULONG Reserved); 1175 1176 // 1177 // Mailslot IOCTL Codes 1178 // 1179 #define FSCTL_MAILSLOT_PEEK \ 1180 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA) 1181 1182 // 1183 // Pipe IOCTL Codes 1184 // 1185 #define FSCTL_PIPE_ASSIGN_EVENT \ 1186 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) 1187 #define FSCTL_PIPE_DISCONNECT \ 1188 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS) 1189 #define FSCTL_PIPE_LISTEN \ 1190 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS) 1191 #define FSCTL_PIPE_PEEK \ 1192 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA) 1193 #define FSCTL_PIPE_QUERY_EVENT \ 1194 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS) 1195 #define FSCTL_PIPE_TRANSCEIVE \ 1196 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA) 1197 #define FSCTL_PIPE_WAIT \ 1198 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS) 1199 #define FSCTL_PIPE_IMPERSONATE \ 1200 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS) 1201 #define FSCTL_PIPE_SET_CLIENT_PROCESS \ 1202 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) 1203 #define FSCTL_PIPE_QUERY_CLIENT_PROCESS \ 1204 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS) 1205 #define FSCTL_PIPE_INTERNAL_READ \ 1206 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA) 1207 #define FSCTL_PIPE_INTERNAL_WRITE \ 1208 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA) 1209 #define FSCTL_PIPE_INTERNAL_TRANSCEIVE \ 1210 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA) 1211 #define FSCTL_PIPE_INTERNAL_READ_OVFLOW \ 1212 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA) 1213 1214 // 1215 // Tape IOCTL Codes 1216 // 1217 #define IOCTL_TAPE_ERASE \ 1218 CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 1219 #define IOCTL_TAPE_PREPARE \ 1220 CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS) 1221 #define IOCTL_TAPE_WRITE_MARKS \ 1222 CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 1223 #define IOCTL_TAPE_GET_POSITION \ 1224 CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS) 1225 #define IOCTL_TAPE_SET_POSITION \ 1226 CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS) 1227 #define IOCTL_TAPE_GET_DRIVE_PARAMS \ 1228 CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS) 1229 #define IOCTL_TAPE_SET_DRIVE_PARAMS \ 1230 CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 1231 #define IOCTL_TAPE_GET_MEDIA_PARAMS \ 1232 CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS) 1233 #define IOCTL_TAPE_SET_MEDIA_PARAMS \ 1234 CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS) 1235 #define IOCTL_TAPE_GET_STATUS \ 1236 CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS) 1237 #define IOCTL_TAPE_CREATE_PARTITION \ 1238 CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) 1239 1240 // 1241 // Reparse points 1242 // 1243 1244 #define SYMLINK_FLAG_RELATIVE 1 1245 1246 typedef struct _REPARSE_DATA_BUFFER { 1247 ULONG ReparseTag; 1248 USHORT ReparseDataLength; 1249 USHORT Reserved; 1250 _ANONYMOUS_UNION union { 1251 struct { 1252 USHORT SubstituteNameOffset; 1253 USHORT SubstituteNameLength; 1254 USHORT PrintNameOffset; 1255 USHORT PrintNameLength; 1256 ULONG Flags; 1257 WCHAR PathBuffer[1]; 1258 } SymbolicLinkReparseBuffer; 1259 struct { 1260 USHORT SubstituteNameOffset; 1261 USHORT SubstituteNameLength; 1262 USHORT PrintNameOffset; 1263 USHORT PrintNameLength; 1264 WCHAR PathBuffer[1]; 1265 } MountPointReparseBuffer; 1266 struct { 1267 UCHAR DataBuffer[1]; 1268 } GenericReparseBuffer; 1269 } DUMMYUNIONNAME; 1270 } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; 1271 1272 #endif // NTOS_MODE_USER 1273 1274 #endif 1275