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