1 /* $Id: iotypes.h,v 1.32 2002/01/21 22:28:45 hbirr Exp $
5 #ifndef __INCLUDE_DDK_IOTYPES_H
6 #define __INCLUDE_DDK_IOTYPES_H
12 extern POBJECT_TYPE EXPORTED IoAdapterObjectType
;
13 extern POBJECT_TYPE EXPORTED IoDeviceHandlerObjectType
;
14 extern POBJECT_TYPE EXPORTED IoDeviceObjectType
;
15 extern POBJECT_TYPE EXPORTED IoDriverObjectType
;
16 extern POBJECT_TYPE EXPORTED IoFileObjectType
;
18 extern POBJECT_TYPE IMPORTED IoAdapterObjectType
;
19 extern POBJECT_TYPE IMPORTED IoDeviceHandlerObjectType
;
20 extern POBJECT_TYPE IMPORTED IoDeviceObjectType
;
21 extern POBJECT_TYPE IMPORTED IoDriverObjectType
;
22 extern POBJECT_TYPE IMPORTED IoFileObjectType
;
26 * These are referenced before they can be fully defined
28 struct _DRIVER_OBJECT
;
30 struct _DEVICE_OBJECT
;
32 struct _IO_STATUS_BLOCK
;
34 /* SIMPLE TYPES *************************************************************/
43 typedef enum _CREATE_FILE_TYPE
46 CreateFileTypeNamedPipe
,
47 CreateFileTypeMailslot
51 typedef struct _SHARE_ACCESS
60 } SHARE_ACCESS
, *PSHARE_ACCESS
;
62 /* FUNCTION TYPES ************************************************************/
65 (*PDRIVER_REINITIALIZE
)(struct _DRIVER_OBJECT
* DriverObject
,
69 typedef NTSTATUS STDCALL
70 (*PIO_QUERY_DEVICE_ROUTINE
)(PVOID Context
,
71 PUNICODE_STRING Pathname
,
72 INTERFACE_TYPE BusType
,
74 PKEY_VALUE_FULL_INFORMATION
* BI
,
75 CONFIGURATION_TYPE ControllerType
,
76 ULONG ControllerNumber
,
77 PKEY_VALUE_FULL_INFORMATION
* CI
,
78 CONFIGURATION_TYPE PeripheralType
,
79 ULONG PeripheralNumber
,
80 PKEY_VALUE_FULL_INFORMATION
* PI
);
82 typedef NTSTATUS STDCALL
83 (*PIO_COMPLETION_ROUTINE
)(struct _DEVICE_OBJECT
* DeviceObject
,
88 (*PIO_APC_ROUTINE
)(PVOID ApcContext
,
89 struct _IO_STATUS_BLOCK
* IoStatusBlock
,
93 /* STRUCTURE TYPES ***********************************************************/
95 typedef struct _ADAPTER_OBJECT ADAPTER_OBJECT
, *PADAPTER_OBJECT
;
98 * PURPOSE: Special timer associated with each device
99 * NOTES: This is a guess
101 typedef struct _IO_TIMER
105 } IO_TIMER
, *PIO_TIMER
;
107 typedef struct _IO_SECURITY_CONTEXT
109 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
110 PACCESS_STATE AccessState
;
111 ACCESS_MASK DesiredAccess
;
112 ULONG FullCreateOptions
;
113 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
116 typedef struct _IO_RESOURCE_DESCRIPTOR
120 UCHAR ShareDisposition
;
123 * Reserved for system use
130 * Reserved for system use
140 PHYSICAL_ADDRESS MinimumAddress
;
141 PHYSICAL_ADDRESS MaximumAddress
;
147 PHYSICAL_ADDRESS MinimumAddress
;
148 PHYSICAL_ADDRESS MaximumAddress
;
157 ULONG MinimumChannel
;
158 ULONG MaximumChannel
;
161 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
163 // IO_RESOURCE_DESCRIPTOR Options
164 #define IO_RESOURCE_REQUIRED 0x00
165 #define IO_RESOURCE_PREFERRED 0x01
166 #define IO_RESOURCE_DEFAULT 0x02
167 #define IO_RESOURCE_ALTERNATIVE 0x08
169 typedef struct _IO_RESOURCE_LIST
174 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
175 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
177 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST
185 * System defined enum for the bus
187 INTERFACE_TYPE InterfaceType
;
192 ULONG AlternativeLists
;
193 IO_RESOURCE_LIST List
[1];
194 } IO_RESOURCE_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
199 UCHAR ShareDisposition
;
205 PHYSICAL_ADDRESS Start
;
216 PHYSICAL_ADDRESS Start
;
230 } DeviceSpecificData
;
232 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
239 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
240 } CM_PARTIAL_RESOURCE_LIST
;
244 INTERFACE_TYPE InterfaceType
;
246 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
247 } CM_FULL_RESOURCE_DESCRIPTOR
;
252 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
253 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
257 * PURPOSE: IRP stack location
259 typedef struct __attribute__((packed
)) _IO_STACK_LOCATION
270 PIO_SECURITY_CONTEXT SecurityContext
;
272 USHORT FileAttributes
;
280 LARGE_INTEGER ByteOffset
;
286 LARGE_INTEGER ByteOffset
;
290 ULONG OutputBufferLength
;
291 ULONG InputBufferLength
;
293 PVOID Type3InputBuffer
;
297 ULONG OutputBufferLength
;
298 ULONG InputBufferLength
;
300 PVOID Type3InputBuffer
;
305 struct _DEVICE_OBJECT
* DeviceObject
;
310 FILE_INFORMATION_CLASS FileInformationClass
;
315 FS_INFORMATION_CLASS FsInformationClass
;
320 FS_INFORMATION_CLASS FsInformationClass
;
325 FILE_INFORMATION_CLASS FileInformationClass
;
326 struct _FILE_OBJECT
* FileObject
;
331 BOOLEAN ReplaceIfExists
;
341 PUNICODE_STRING FileName
;
342 FILE_INFORMATION_CLASS FileInformationClass
;
346 // Parameters for IRP_MN_QUERY_DEVICE_RELATIONS
348 DEVICE_RELATION_TYPE Type
;
349 } QueryDeviceRelations
;
351 // Parameters for IRP_MN_QUERY_INTERFACE
353 CONST GUID
*InterfaceType
;
356 PINTERFACE Interface
;
357 PVOID InterfaceSpecificData
;
360 // Parameters for IRP_MN_QUERY_CAPABILITIES
362 PDEVICE_CAPABILITIES Capabilities
;
363 } DeviceCapabilities
;
365 // Parameters for IRP_MN_QUERY_ID
367 BUS_QUERY_ID_TYPE IdType
;
370 // Parameters for IRP_MN_QUERY_DEVICE_TEXT
372 DEVICE_TEXT_TYPE DeviceTextType
;
376 // Parameters for IRP_MN_DEVICE_USAGE_NOTIFICATION
380 DEVICE_USAGE_NOTIFICATION_TYPE Type
;
383 // Parameters for IRP_MN_WAIT_WAKE
385 SYSTEM_POWER_STATE PowerState
;
388 // Parameter for IRP_MN_POWER_SEQUENCE
390 PPOWER_SEQUENCE PowerSequence
;
393 // Parameters for IRP_MN_SET_POWER and IRP_MN_QUERY_POWER
396 POWER_STATE_TYPE Type
;
398 POWER_ACTION ShutdownType
;
401 // Parameters for IRP_MN_START_DEVICE
403 PCM_RESOURCE_LIST AllocatedResources
;
404 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
409 struct _DEVICE_OBJECT
* DeviceObject
;
410 struct _FILE_OBJECT
* FileObject
;
412 PIO_COMPLETION_ROUTINE CompletionRoutine
;
413 PVOID CompletionContext
;
415 } __attribute__((packed
)) IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
417 typedef struct _IO_STATUS_BLOCK
421 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
424 typedef struct _IO_PIPE_CREATE_BUFFER
426 BOOLEAN WriteModeMessage
;
427 BOOLEAN ReadModeMessage
;
432 LARGE_INTEGER TimeOut
;
433 } IO_PIPE_CREATE_BUFFER
, *PIO_PIPE_CREATE_BUFFER
;
436 typedef struct _IO_MAILSLOT_CREATE_BUFFER
438 ULONG Param
; /* ?? */
439 ULONG MaxMessageSize
;
440 LARGE_INTEGER TimeOut
;
441 } IO_MAILSLOT_CREATE_BUFFER
, *PIO_MAILSLOT_CREATE_BUFFER
;
445 * Driver entry point declaration
447 typedef NTSTATUS STDCALL
448 (*PDRIVER_INITIALIZE
)(struct _DRIVER_OBJECT
* DriverObject
,
449 PUNICODE_STRING RegistryPath
);
452 * Driver cancel declaration
454 typedef NTSTATUS STDCALL
455 (*PDRIVER_CANCEL
)(struct _DEVICE_OBJECT
* DeviceObject
,
456 struct _IRP
* RegistryPath
);
459 typedef struct _SECTION_OBJECT_POINTERS
461 PVOID DataSectionObject
;
462 PVOID SharedCacheMap
;
463 PVOID ImageSectionObject
;
464 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
466 typedef struct _IO_COMPLETION_CONTEXT
470 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
472 #define FO_FILE_OPEN 0x00000001
473 #define FO_SYNCHRONOUS_IO 0x00000002
474 #define FO_ALERTABLE_IO 0x00000004
475 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
476 #define FO_WRITE_THROUGH 0x00000010
477 #define FO_SEQUENTIAL_ONLY 0x00000020
478 #define FO_CACHE_SUPPORTED 0x00000040
479 #define FO_NAMED_PIPE 0x00000080
480 #define FO_STREAM_FILE 0x00000100
481 #define FO_MAILSLOT 0x00000200
482 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
483 #define FO_DIRECT_DEVICE_OPEN 0x00000800
484 #define FO_FILE_MODIFIED 0x00001000
485 #define FO_FILE_SIZE_CHANGED 0x00002000
486 #define FO_CLEANUP_COMPLETE 0x00004000
487 #define FO_TEMPORARY_FILE 0x00008000
488 #define FO_DELETE_ON_CLOSE 0x00010000
489 #define FO_OPENED_CASE_SENSITIVE 0x00020000
490 #define FO_HANDLE_CREATED 0x00040000
491 #define FO_FILE_FAST_IO_READ 0x00080000
494 * ReactOS specific flags
496 #define FO_DIRECT_CACHE_READ 0x72000001
497 #define FO_DIRECT_CACHE_WRITE 0x72000002
498 #define FO_DIRECT_CACHE_PAGING_READ 0x72000004
499 #define FO_DIRECT_CACHE_PAGING_WRITE 0x72000008
500 #define FO_FCB_IS_VALID 0x72000010
502 typedef struct _FILE_OBJECT
506 struct _DEVICE_OBJECT
* DeviceObject
;
510 PSECTION_OBJECT_POINTERS SectionObjectPointers
;
511 PVOID PrivateCacheMap
;
512 NTSTATUS FinalStatus
;
513 struct _FILE_OBJECT
* RelatedFileObject
;
514 BOOLEAN LockOperation
;
515 BOOLEAN DeletePending
;
518 BOOLEAN DeleteAccess
;
521 BOOLEAN SharedDelete
;
523 UNICODE_STRING FileName
;
524 LARGE_INTEGER CurrentByteOffset
;
530 PIO_COMPLETION_CONTEXT CompletionContext
;
531 } FILE_OBJECT
, *PFILE_OBJECT
;
542 struct _IRP
* MasterIrp
;
546 LIST_ENTRY ThreadListEntry
;
547 IO_STATUS_BLOCK IoStatus
;
548 KPROCESSOR_MODE RequestorMode
;
549 BOOLEAN PendingReturned
;
551 CHAR CurrentLocation
;
554 CCHAR ApcEnvironment
;// CCHAR or PVOID?
555 UCHAR AllocationFlags
;//UCHAR or ULONG?
556 PIO_STATUS_BLOCK UserIosb
;
562 PIO_APC_ROUTINE UserApcRoutine
;
563 PVOID UserApcContext
;
564 } AsynchronousParameters
;
565 LARGE_INTEGER AllocationSize
;
567 PDRIVER_CANCEL CancelRoutine
;
574 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
575 PVOID DriverContext
[4];
577 struct _ETHREAD
* Thread
;
578 PCHAR AuxiliaryBuffer
;
579 LIST_ENTRY ListEntry
;
580 struct _IO_STACK_LOCATION
* CurrentStackLocation
;
581 PFILE_OBJECT OriginalFileObject
;
586 IO_STACK_LOCATION Stack
[1];
589 #define VPB_MOUNTED 0x00000001
590 #define VPB_LOCKED 0x00000002
591 #define VPB_PERSISTENT 0x00000004
592 #define VPB_REMOVE_PENDING 0x00000008
599 USHORT VolumeLabelLength
;
600 struct _DEVICE_OBJECT
* DeviceObject
;
601 struct _DEVICE_OBJECT
* RealDevice
;
603 ULONG ReferenceCount
;
604 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
];
608 typedef struct _DEVICE_OBJECT
613 struct _DRIVER_OBJECT
* DriverObject
;
614 struct _DEVICE_OBJECT
* NextDevice
;
615 struct _DEVICE_OBJECT
* AttachedDevice
;
616 struct _IRP
* CurrentIrp
;
619 ULONG Characteristics
;
621 PVOID DeviceExtension
;
622 DEVICE_TYPE DeviceType
;
627 WAIT_CONTEXT_BLOCK Wcb
;
629 ULONG AlignmentRequirement
;
630 KDEVICE_QUEUE DeviceQueue
;
632 ULONG ActiveThreadCount
;
633 PSECURITY_DESCRIPTOR SecurityDescriptor
;
637 struct _DEVOBJ_EXTENSION
* DeviceObjectExtension
;
639 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
642 * Dispatch routine type declaration
644 typedef NTSTATUS STDCALL
645 (*PDRIVER_DISPATCH
)(struct _DEVICE_OBJECT
*,
650 * Fast i/o routine type declaration
652 //typedef NTSTATUS (*PFAST_IO_DISPATCH)(struct _DEVICE_OBJECT*, IRP*);
653 //FIXME : this type is ok for read and write, but not for all routines
654 typedef BOOLEAN STDCALL
655 (*PFAST_IO_ROUTINE
)(IN
struct _FILE_OBJECT
*FileObject
,
656 IN PLARGE_INTEGER FileOffset
,
661 OUT PIO_STATUS_BLOCK IoStatus
,
662 IN
struct _DEVICE_OBJECT
*DeviceObject
);
664 typedef struct _FAST_IO_DISPATCH
{
665 ULONG SizeOfFastIoDispatch
;
666 PFAST_IO_ROUTINE FastIoCheckIfPossible
;
667 PFAST_IO_ROUTINE FastIoRead
;
668 PFAST_IO_ROUTINE FastIoWrite
;
669 PFAST_IO_ROUTINE FastIoQueryBasicInfo
;
670 PFAST_IO_ROUTINE FastIoQueryStandardInfo
;
671 PFAST_IO_ROUTINE FastIoLock
;
672 PFAST_IO_ROUTINE FastIoUnlockSingle
;
673 PFAST_IO_ROUTINE FastIoUnlockAll
;
674 PFAST_IO_ROUTINE FastIoUnlockAllByKey
;
675 PFAST_IO_ROUTINE FastIoDeviceControl
;
676 PFAST_IO_ROUTINE AcquireFileForNtCreateSection
;
677 PFAST_IO_ROUTINE ReleaseFileForNtCreateSection
;
678 PFAST_IO_ROUTINE FastIoDetachDevice
;
679 PFAST_IO_ROUTINE FastIoQueryNetworkOpenInfo
;
680 PFAST_IO_ROUTINE AcquireForModWrite
;
681 PFAST_IO_ROUTINE MdlRead
;
682 PFAST_IO_ROUTINE MdlReadComplete
;
683 PFAST_IO_ROUTINE PrepareMdlWrite
;
684 PFAST_IO_ROUTINE MdlWriteComplete
;
685 PFAST_IO_ROUTINE FastIoReadCompressed
;
686 PFAST_IO_ROUTINE FastIoWriteCompressed
;
687 PFAST_IO_ROUTINE MdlReadCompleteCompressed
;
688 PFAST_IO_ROUTINE MdlWriteCompleteCompressed
;
689 PFAST_IO_ROUTINE FastIoQueryOpen
;
690 PFAST_IO_ROUTINE ReleaseForModWrite
;
691 PFAST_IO_ROUTINE AcquireForCcFlush
;
692 PFAST_IO_ROUTINE ReleaseForCcFlush
;
693 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
696 * Dispatch routine type declaration
699 (*PDRIVER_STARTIO
)(IN PDEVICE_OBJECT DeviceObject
,
703 * Dispatch routine type declaration
705 typedef NTSTATUS STDCALL
706 (*PDRIVER_UNLOAD
)(struct _DRIVER_OBJECT
*);
708 typedef NTSTATUS STDCALL
709 (*PDRIVER_ADD_DEVICE
)(IN
struct _DRIVER_OBJECT
*DriverObject
,
710 IN
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
713 typedef struct _DRIVER_EXTENSION
715 struct _DRIVER_OBJECT
* DriverObject
;
716 PDRIVER_ADD_DEVICE AddDevice
;
718 UNICODE_STRING ServiceKeyName
;
719 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
723 struct _FAST_IO_DISPATCH_TABLE
726 PFAST_IO_DISPATCH Dispatch
;
728 } FAST_IO_DISPATCH_TABLE
, * PFAST_IO_DISPATCH_TABLE
;
731 typedef struct _DRIVER_OBJECT
735 PDEVICE_OBJECT DeviceObject
;
740 PDRIVER_EXTENSION DriverExtension
;
741 UNICODE_STRING DriverName
;
742 PUNICODE_STRING HardwareDatabase
;
744 PFAST_IO_DISPATCH_TABLE FastIoDispatch
;
746 PFAST_IO_DISPATCH FastIoDispatch
;
748 PDRIVER_INITIALIZE DriverInit
;
749 PDRIVER_STARTIO DriverStartIo
;
750 PDRIVER_UNLOAD DriverUnload
;
751 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
752 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
755 typedef struct _CONFIGURATION_INFORMATION
764 BOOLEAN AtDiskPrimaryAddressClaimed
;
765 BOOLEAN AtDiskSecondaryAddressClaimed
;
766 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
769 (*PIO_DPC_ROUTINE
)(PKDPC Dpc
,
770 PDEVICE_OBJECT DeviceObject
,
775 (*PIO_TIMER_ROUTINE
)(PDEVICE_OBJECT DeviceObject
,
778 #if WINDOWS_STRUCTS_DOESNT_ALREADY_DEFINE_THIS
779 typedef struct _PARTITION_INFORMATION
781 LARGE_INTEGER StartingOffset
;
782 LARGE_INTEGER PartitionLength
;
784 ULONG PartitionNumber
;
786 BOOLEAN BootIndicator
;
787 BOOLEAN RecognizedPartition
;
788 BOOLEAN RewritePartition
;
789 } PARTITION_INFORMATION
, *PPARTITION_INFORMATION
;
792 typedef struct _DRIVER_LAYOUT_INFORMATION
794 ULONG PartitionCount
;
796 PARTITION_INFORMATION PartitionEntry
[1];
797 } DRIVER_LAYOUT_INFORMATION
, *PDRIVER_LAYOUT_INFORMATION
;
800 typedef IO_ALLOCATION_ACTION STDCALL
801 (*PDRIVER_CONTROL
)(PDEVICE_OBJECT DeviceObject
,
803 PVOID MapRegisterBase
,
805 #if (_WIN32_WINNT >= 0x0400)
807 (*PFSDNOTIFICATIONPROC
)(IN PDEVICE_OBJECT PtrTargetFileSystemDeviceObject
,
808 IN BOOLEAN DriverActive
);
809 #endif // (_WIN32_WINNT >= 0x0400)
811 #endif /* __INCLUDE_DDK_IOTYPES_H */