1 /* $Id: iotypes.h,v 1.45 2002/11/24 18:26:40 robd 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
;
33 struct _SCSI_REQUEST_BLOCK
;
35 /* SIMPLE TYPES *************************************************************/
44 typedef enum _CREATE_FILE_TYPE
47 CreateFileTypeNamedPipe
,
48 CreateFileTypeMailslot
52 typedef struct _SHARE_ACCESS
61 } SHARE_ACCESS
, *PSHARE_ACCESS
;
63 /* FUNCTION TYPES ************************************************************/
65 typedef VOID STDCALL_FUNC
66 (*PDRIVER_REINITIALIZE
)(struct _DRIVER_OBJECT
* DriverObject
,
70 typedef NTSTATUS STDCALL_FUNC
71 (*PIO_QUERY_DEVICE_ROUTINE
)(PVOID Context
,
72 PUNICODE_STRING Pathname
,
73 INTERFACE_TYPE BusType
,
75 PKEY_VALUE_FULL_INFORMATION
* BI
,
76 CONFIGURATION_TYPE ControllerType
,
77 ULONG ControllerNumber
,
78 PKEY_VALUE_FULL_INFORMATION
* CI
,
79 CONFIGURATION_TYPE PeripheralType
,
80 ULONG PeripheralNumber
,
81 PKEY_VALUE_FULL_INFORMATION
* PI
);
83 typedef NTSTATUS STDCALL_FUNC
84 (*PIO_COMPLETION_ROUTINE
)(struct _DEVICE_OBJECT
* DeviceObject
,
88 typedef VOID STDCALL_FUNC
89 (*PIO_APC_ROUTINE
)(PVOID ApcContext
,
90 struct _IO_STATUS_BLOCK
* IoStatusBlock
,
94 /* STRUCTURE TYPES ***********************************************************/
96 typedef struct _ADAPTER_OBJECT ADAPTER_OBJECT
, *PADAPTER_OBJECT
;
99 * PURPOSE: Special timer associated with each device
100 * NOTES: This is a guess
102 typedef struct _IO_TIMER
106 } IO_TIMER
, *PIO_TIMER
;
108 typedef struct _IO_SECURITY_CONTEXT
110 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
111 PACCESS_STATE AccessState
;
112 ACCESS_MASK DesiredAccess
;
113 ULONG FullCreateOptions
;
114 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
117 typedef struct _IO_RESOURCE_DESCRIPTOR
121 UCHAR ShareDisposition
;
124 * Reserved for system use
131 * Reserved for system use
141 PHYSICAL_ADDRESS MinimumAddress
;
142 PHYSICAL_ADDRESS MaximumAddress
;
148 PHYSICAL_ADDRESS MinimumAddress
;
149 PHYSICAL_ADDRESS MaximumAddress
;
158 ULONG MinimumChannel
;
159 ULONG MaximumChannel
;
162 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
164 // IO_RESOURCE_DESCRIPTOR Options
165 #define IO_RESOURCE_REQUIRED 0x00
166 #define IO_RESOURCE_PREFERRED 0x01
167 #define IO_RESOURCE_DEFAULT 0x02
168 #define IO_RESOURCE_ALTERNATIVE 0x08
170 typedef struct _IO_RESOURCE_LIST
175 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
176 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
178 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST
186 * System defined enum for the bus
188 INTERFACE_TYPE InterfaceType
;
193 ULONG AlternativeLists
;
194 IO_RESOURCE_LIST List
[1];
195 } IO_RESOURCE_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
200 UCHAR ShareDisposition
;
206 PHYSICAL_ADDRESS Start
;
208 } __attribute__((packed
)) Port
;
214 } __attribute__((packed
))Interrupt
;
217 PHYSICAL_ADDRESS Start
;
219 } __attribute__((packed
))Memory
;
225 } __attribute__((packed
))Dma
;
231 } __attribute__((packed
))DeviceSpecificData
;
232 } __attribute__((packed
)) u
;
233 } __attribute__((packed
)) CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
240 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
241 } __attribute__((packed
))CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
245 INTERFACE_TYPE InterfaceType
;
247 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
248 } __attribute__((packed
)) CM_FULL_RESOURCE_DESCRIPTOR
;
253 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
254 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
258 * PURPOSE: IRP stack location
260 typedef struct __attribute__((packed
)) _IO_STACK_LOCATION
271 PIO_SECURITY_CONTEXT SecurityContext
;
273 USHORT FileAttributes
;
281 LARGE_INTEGER ByteOffset
;
287 LARGE_INTEGER ByteOffset
;
291 ULONG OutputBufferLength
;
292 ULONG InputBufferLength
;
294 PVOID Type3InputBuffer
;
298 ULONG OutputBufferLength
;
299 ULONG InputBufferLength
;
301 PVOID Type3InputBuffer
;
306 struct _DEVICE_OBJECT
* DeviceObject
;
311 struct _DEVICE_OBJECT
* DeviceObject
;
316 FILE_INFORMATION_CLASS FileInformationClass
;
321 FS_INFORMATION_CLASS FsInformationClass
;
326 FS_INFORMATION_CLASS FsInformationClass
;
331 FILE_INFORMATION_CLASS FileInformationClass
;
332 struct _FILE_OBJECT
* FileObject
;
337 BOOLEAN ReplaceIfExists
;
347 PUNICODE_STRING FileName
;
348 FILE_INFORMATION_CLASS FileInformationClass
;
352 // Parameters for IRP_MN_QUERY_DEVICE_RELATIONS
355 DEVICE_RELATION_TYPE Type
;
356 } QueryDeviceRelations
;
358 // Parameters for IRP_MN_QUERY_INTERFACE
361 CONST GUID
*InterfaceType
;
364 PINTERFACE Interface
;
365 PVOID InterfaceSpecificData
;
368 // Parameters for IRP_MN_QUERY_CAPABILITIES
371 PDEVICE_CAPABILITIES Capabilities
;
372 } DeviceCapabilities
;
374 // Parameters for IRP_MN_FILTER_RESOURCE_REQUIREMENTS
377 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList
;
378 } FilterResourceRequirements
;
380 // Parameters for IRP_MN_QUERY_ID
383 BUS_QUERY_ID_TYPE IdType
;
386 // Parameters for IRP_MN_QUERY_DEVICE_TEXT
389 DEVICE_TEXT_TYPE DeviceTextType
;
393 // Parameters for IRP_MN_DEVICE_USAGE_NOTIFICATION
398 DEVICE_USAGE_NOTIFICATION_TYPE Type
;
401 // Parameters for IRP_MN_WAIT_WAKE
404 SYSTEM_POWER_STATE PowerState
;
407 // Parameter for IRP_MN_POWER_SEQUENCE
410 PPOWER_SEQUENCE PowerSequence
;
413 // Parameters for IRP_MN_SET_POWER and IRP_MN_QUERY_POWER
417 POWER_STATE_TYPE Type
;
419 POWER_ACTION ShutdownType
;
422 // Parameters for IRP_MN_START_DEVICE
425 PCM_RESOURCE_LIST AllocatedResources
;
426 PCM_RESOURCE_LIST AllocatedResourcesTranslated
;
429 /* Parameters for IRP_MN_SCSI_CLASS */
432 struct _SCSI_REQUEST_BLOCK
*Srb
;
435 //byte range file locking
438 PLARGE_INTEGER Length
;
440 LARGE_INTEGER ByteOffset
;
443 /* Paramters for other calls */
453 struct _DEVICE_OBJECT
* DeviceObject
;
454 struct _FILE_OBJECT
* FileObject
;
456 PIO_COMPLETION_ROUTINE CompletionRoutine
;
457 PVOID CompletionContext
;
459 } __attribute__((packed
)) IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
462 typedef struct _IO_STATUS_BLOCK
466 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
469 typedef struct _IO_PIPE_CREATE_BUFFER
471 BOOLEAN WriteModeMessage
;
472 BOOLEAN ReadModeMessage
;
477 LARGE_INTEGER TimeOut
;
478 } IO_PIPE_CREATE_BUFFER
, *PIO_PIPE_CREATE_BUFFER
;
481 typedef struct _IO_MAILSLOT_CREATE_BUFFER
483 ULONG Param
; /* ?? */
484 ULONG MaxMessageSize
;
485 LARGE_INTEGER TimeOut
;
486 } IO_MAILSLOT_CREATE_BUFFER
, *PIO_MAILSLOT_CREATE_BUFFER
;
490 * Driver entry point declaration
492 typedef NTSTATUS STDCALL_FUNC
493 (*PDRIVER_INITIALIZE
)(struct _DRIVER_OBJECT
* DriverObject
,
494 PUNICODE_STRING RegistryPath
);
497 * Driver cancel declaration
499 typedef NTSTATUS STDCALL_FUNC
500 (*PDRIVER_CANCEL
)(struct _DEVICE_OBJECT
* DeviceObject
,
501 struct _IRP
* RegistryPath
);
504 typedef struct _SECTION_OBJECT_POINTERS
506 PVOID DataSectionObject
;
507 PVOID SharedCacheMap
;
508 PVOID ImageSectionObject
;
509 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
511 typedef struct _IO_COMPLETION_CONTEXT
515 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
517 #define FO_FILE_OPEN 0x00000001
518 #define FO_SYNCHRONOUS_IO 0x00000002
519 #define FO_ALERTABLE_IO 0x00000004
520 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
521 #define FO_WRITE_THROUGH 0x00000010
522 #define FO_SEQUENTIAL_ONLY 0x00000020
523 #define FO_CACHE_SUPPORTED 0x00000040
524 #define FO_NAMED_PIPE 0x00000080
525 #define FO_STREAM_FILE 0x00000100
526 #define FO_MAILSLOT 0x00000200
527 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
528 #define FO_DIRECT_DEVICE_OPEN 0x00000800
529 #define FO_FILE_MODIFIED 0x00001000
530 #define FO_FILE_SIZE_CHANGED 0x00002000
531 #define FO_CLEANUP_COMPLETE 0x00004000
532 #define FO_TEMPORARY_FILE 0x00008000
533 #define FO_DELETE_ON_CLOSE 0x00010000
534 #define FO_OPENED_CASE_SENSITIVE 0x00020000
535 #define FO_HANDLE_CREATED 0x00040000
536 #define FO_FILE_FAST_IO_READ 0x00080000
539 * ReactOS specific flags
541 #define FO_DIRECT_CACHE_READ 0x72000001
542 #define FO_DIRECT_CACHE_WRITE 0x72000002
543 #define FO_DIRECT_CACHE_PAGING_READ 0x72000004
544 #define FO_DIRECT_CACHE_PAGING_WRITE 0x72000008
545 #define FO_FCB_IS_VALID 0x72000010
547 typedef struct _FILE_OBJECT
551 struct _DEVICE_OBJECT
* DeviceObject
;
555 PSECTION_OBJECT_POINTERS SectionObjectPointers
;
556 PVOID PrivateCacheMap
;
557 NTSTATUS FinalStatus
;
558 struct _FILE_OBJECT
* RelatedFileObject
;
559 BOOLEAN LockOperation
;
560 BOOLEAN DeletePending
;
563 BOOLEAN DeleteAccess
;
566 BOOLEAN SharedDelete
;
568 UNICODE_STRING FileName
;
569 LARGE_INTEGER CurrentByteOffset
;
575 PIO_COMPLETION_CONTEXT CompletionContext
;
576 } FILE_OBJECT
, *PFILE_OBJECT
;
587 struct _IRP
* MasterIrp
;
591 LIST_ENTRY ThreadListEntry
;
592 IO_STATUS_BLOCK IoStatus
;
593 KPROCESSOR_MODE RequestorMode
;
594 BOOLEAN PendingReturned
;
596 CHAR CurrentLocation
;
599 CCHAR ApcEnvironment
;// CCHAR or PVOID?
600 UCHAR AllocationFlags
;//UCHAR or ULONG?
601 PIO_STATUS_BLOCK UserIosb
;
607 PIO_APC_ROUTINE UserApcRoutine
;
608 PVOID UserApcContext
;
609 } AsynchronousParameters
;
610 LARGE_INTEGER AllocationSize
;
612 PDRIVER_CANCEL CancelRoutine
;
619 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
620 PVOID DriverContext
[4];
622 struct _ETHREAD
* Thread
;
623 PCHAR AuxiliaryBuffer
;
624 LIST_ENTRY ListEntry
;
625 struct _IO_STACK_LOCATION
* CurrentStackLocation
;
626 PFILE_OBJECT OriginalFileObject
;
631 IO_STACK_LOCATION Stack
[1];
634 #define VPB_MOUNTED 0x00000001
635 #define VPB_LOCKED 0x00000002
636 #define VPB_PERSISTENT 0x00000004
637 #define VPB_REMOVE_PENDING 0x00000008
644 USHORT VolumeLabelLength
;
645 struct _DEVICE_OBJECT
* DeviceObject
;
646 struct _DEVICE_OBJECT
* RealDevice
;
648 ULONG ReferenceCount
;
649 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
];
653 typedef struct _DEVICE_OBJECT
658 struct _DRIVER_OBJECT
* DriverObject
;
659 struct _DEVICE_OBJECT
* NextDevice
;
660 struct _DEVICE_OBJECT
* AttachedDevice
;
661 struct _IRP
* CurrentIrp
;
664 ULONG Characteristics
;
666 PVOID DeviceExtension
;
667 DEVICE_TYPE DeviceType
;
672 WAIT_CONTEXT_BLOCK Wcb
;
674 ULONG AlignmentRequirement
;
675 KDEVICE_QUEUE DeviceQueue
;
677 ULONG ActiveThreadCount
;
678 PSECURITY_DESCRIPTOR SecurityDescriptor
;
682 struct _DEVOBJ_EXTENSION
* DeviceObjectExtension
;
684 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
688 * Fast i/o routine type declaration
690 //typedef NTSTATUS (*PFAST_IO_DISPATCH)(struct _DEVICE_OBJECT*, IRP*);
691 //FIXME : this type is ok for read and write, but not for all routines
692 typedef BOOLEAN STDCALL_FUNC
693 (*PFAST_IO_ROUTINE
)(IN
struct _FILE_OBJECT
*FileObject
,
694 IN PLARGE_INTEGER FileOffset
,
699 OUT PIO_STATUS_BLOCK IoStatus
,
700 IN
struct _DEVICE_OBJECT
*DeviceObject
);
702 typedef struct _FAST_IO_DISPATCH
{
703 ULONG SizeOfFastIoDispatch
;
704 PFAST_IO_ROUTINE FastIoCheckIfPossible
;
705 PFAST_IO_ROUTINE FastIoRead
;
706 PFAST_IO_ROUTINE FastIoWrite
;
707 PFAST_IO_ROUTINE FastIoQueryBasicInfo
;
708 PFAST_IO_ROUTINE FastIoQueryStandardInfo
;
709 PFAST_IO_ROUTINE FastIoLock
;
710 PFAST_IO_ROUTINE FastIoUnlockSingle
;
711 PFAST_IO_ROUTINE FastIoUnlockAll
;
712 PFAST_IO_ROUTINE FastIoUnlockAllByKey
;
713 PFAST_IO_ROUTINE FastIoDeviceControl
;
714 PFAST_IO_ROUTINE AcquireFileForNtCreateSection
;
715 PFAST_IO_ROUTINE ReleaseFileForNtCreateSection
;
716 PFAST_IO_ROUTINE FastIoDetachDevice
;
717 PFAST_IO_ROUTINE FastIoQueryNetworkOpenInfo
;
718 PFAST_IO_ROUTINE AcquireForModWrite
;
719 PFAST_IO_ROUTINE MdlRead
;
720 PFAST_IO_ROUTINE MdlReadComplete
;
721 PFAST_IO_ROUTINE PrepareMdlWrite
;
722 PFAST_IO_ROUTINE MdlWriteComplete
;
723 PFAST_IO_ROUTINE FastIoReadCompressed
;
724 PFAST_IO_ROUTINE FastIoWriteCompressed
;
725 PFAST_IO_ROUTINE MdlReadCompleteCompressed
;
726 PFAST_IO_ROUTINE MdlWriteCompleteCompressed
;
727 PFAST_IO_ROUTINE FastIoQueryOpen
;
728 PFAST_IO_ROUTINE ReleaseForModWrite
;
729 PFAST_IO_ROUTINE AcquireForCcFlush
;
730 PFAST_IO_ROUTINE ReleaseForCcFlush
;
731 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
734 * Dispatch routine type declaration
736 typedef NTSTATUS STDCALL_FUNC
737 (*PDRIVER_DISPATCH
)(IN
struct _DEVICE_OBJECT
*DeviceObject
,
738 IN
struct _IRP
*Irp
);
741 * StartIo routine type declaration
743 typedef VOID STDCALL_FUNC
744 (*PDRIVER_STARTIO
)(IN PDEVICE_OBJECT DeviceObject
,
748 * Unload routine type declaration
750 typedef VOID STDCALL_FUNC
751 (*PDRIVER_UNLOAD
)(IN
struct _DRIVER_OBJECT
*DriverObject
);
754 * AddDevice routine type declaration
756 typedef NTSTATUS STDCALL_FUNC
757 (*PDRIVER_ADD_DEVICE
)(IN
struct _DRIVER_OBJECT
*DriverObject
,
758 IN
struct _DEVICE_OBJECT
*PhysicalDeviceObject
);
761 typedef struct _DRIVER_EXTENSION
763 struct _DRIVER_OBJECT
* DriverObject
;
764 PDRIVER_ADD_DEVICE AddDevice
;
766 UNICODE_STRING ServiceKeyName
;
767 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
771 struct _FAST_IO_DISPATCH_TABLE
774 PFAST_IO_DISPATCH Dispatch
;
776 } FAST_IO_DISPATCH_TABLE
, * PFAST_IO_DISPATCH_TABLE
;
779 typedef struct _DRIVER_OBJECT
783 PDEVICE_OBJECT DeviceObject
;
788 PDRIVER_EXTENSION DriverExtension
;
789 UNICODE_STRING DriverName
;
790 PUNICODE_STRING HardwareDatabase
;
792 PFAST_IO_DISPATCH_TABLE FastIoDispatch
;
794 PFAST_IO_DISPATCH FastIoDispatch
;
796 PDRIVER_INITIALIZE DriverInit
;
797 PDRIVER_STARTIO DriverStartIo
;
798 PDRIVER_UNLOAD DriverUnload
;
799 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
800 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
803 typedef struct _CONFIGURATION_INFORMATION
812 BOOLEAN AtDiskPrimaryAddressClaimed
;
813 BOOLEAN AtDiskSecondaryAddressClaimed
;
814 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
816 typedef VOID STDCALL_FUNC
817 (*PIO_DPC_ROUTINE
)(PKDPC Dpc
,
818 PDEVICE_OBJECT DeviceObject
,
822 typedef VOID STDCALL_FUNC
823 (*PIO_TIMER_ROUTINE
)(PDEVICE_OBJECT DeviceObject
,
826 typedef struct _IO_WORKITEM
*PIO_WORKITEM
;
827 typedef VOID (*PIO_WORKITEM_ROUTINE
)(IN PDEVICE_OBJECT DeviceObject
, IN PVOID Context
);
829 #if WINDOWS_STRUCTS_DOESNT_ALREADY_DEFINE_THIS
830 typedef struct _PARTITION_INFORMATION
832 LARGE_INTEGER StartingOffset
;
833 LARGE_INTEGER PartitionLength
;
835 ULONG PartitionNumber
;
837 BOOLEAN BootIndicator
;
838 BOOLEAN RecognizedPartition
;
839 BOOLEAN RewritePartition
;
840 } PARTITION_INFORMATION
, *PPARTITION_INFORMATION
;
843 typedef struct _DRIVER_LAYOUT_INFORMATION
845 ULONG PartitionCount
;
847 PARTITION_INFORMATION PartitionEntry
[1];
848 } DRIVER_LAYOUT_INFORMATION
, *PDRIVER_LAYOUT_INFORMATION
;
851 typedef IO_ALLOCATION_ACTION STDCALL_FUNC
852 (*PDRIVER_CONTROL
)(PDEVICE_OBJECT DeviceObject
,
854 PVOID MapRegisterBase
,
856 #if (_WIN32_WINNT >= 0x0400)
857 typedef VOID STDCALL_FUNC
858 (*PFSDNOTIFICATIONPROC
)(IN PDEVICE_OBJECT PtrTargetFileSystemDeviceObject
,
859 IN BOOLEAN DriverActive
);
860 #endif // (_WIN32_WINNT >= 0x0400)
862 #endif /* __INCLUDE_DDK_IOTYPES_H */