1 /* $Id: iotypes.h,v 1.22 2001/01/08 02:14:05 dwelch 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
52 * FIXME: Definition needed
54 typedef struct _SHARE_ACCESS
56 } SHARE_ACCESS
, *PSHARE_ACCESS
;
58 /* FUNCTION TYPES ************************************************************/
60 typedef VOID (*PDRIVER_REINITIALIZE
)(struct _DRIVER_OBJECT
* DriverObject
,
64 typedef NTSTATUS (*PIO_QUERY_DEVICE_ROUTINE
)(PVOID Context
,
65 PUNICODE_STRING Pathname
,
66 INTERFACE_TYPE BusType
,
68 PKEY_VALUE_FULL_INFORMATION
* BI
,
69 CONFIGURATION_TYPE ControllerType
,
70 ULONG ControllerNumber
,
71 PKEY_VALUE_FULL_INFORMATION
* CI
,
72 CONFIGURATION_TYPE PeripheralType
,
73 ULONG PeripheralNumber
,
74 PKEY_VALUE_FULL_INFORMATION
* PI
);
76 typedef NTSTATUS (*PIO_COMPLETION_ROUTINE
)(struct _DEVICE_OBJECT
* DeviceObject
,
80 typedef VOID (*PIO_APC_ROUTINE
) (PVOID ApcContext
,
81 struct _IO_STATUS_BLOCK
* IoStatusBlock
,
85 /* STRUCTURE TYPES ***********************************************************/
87 typedef struct _ADAPTER_OBJECT
89 } ADAPTER_OBJECT
, *PADAPTER_OBJECT
;
92 * PURPOSE: Special timer associated with each device
93 * NOTES: This is a guess
95 typedef struct _IO_TIMER
99 } IO_TIMER
, *PIO_TIMER
;
101 typedef struct _IO_SECURITY_CONTEXT
103 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
104 PACCESS_STATE AccessState
;
105 ACCESS_MASK DesiredAccess
;
106 ULONG FullCreateOptions
;
107 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
110 * PURPOSE: IRP stack location
112 typedef struct _IO_STACK_LOCATION
123 PIO_SECURITY_CONTEXT SecurityContext
;
125 USHORT FileAttributes
;
133 LARGE_INTEGER ByteOffset
;
139 LARGE_INTEGER ByteOffset
;
143 ULONG OutputBufferLength
;
144 ULONG InputBufferLength
;
146 PVOID Type3InputBuffer
;
150 ULONG OutputBufferLength
;
151 ULONG InputBufferLength
;
153 PVOID Type3InputBuffer
;
158 struct _DEVICE_OBJECT
* DeviceObject
;
162 FILE_INFORMATION_CLASS FileInformationClass
;
166 FS_INFORMATION_CLASS FileInformationClass
;
170 FS_INFORMATION_CLASS FileInformationClass
;
174 FILE_INFORMATION_CLASS FileInformationClass
;
175 struct _FILE_OBJECT
* FileObject
;
178 BOOLEAN ReplaceIfExists
;
188 PUNICODE_STRING FileName
;
189 FILE_INFORMATION_CLASS FileInformationClass
;
195 ULONG CreateDisposition;
198 BOOLEAN WriteModeMessage;
199 BOOLEAN ReadModeMessage;
204 LARGE_INTEGER TimeOut;
209 struct _DEVICE_OBJECT
* DeviceObject
;
210 struct _FILE_OBJECT
* FileObject
;
212 PIO_COMPLETION_ROUTINE CompletionRoutine
;
213 PVOID CompletionContext
;
215 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
217 typedef struct _IO_STATUS_BLOCK
221 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
224 * Driver entry point declaration
226 typedef NTSTATUS (*PDRIVER_INITIALIZE
)(struct _DRIVER_OBJECT
* DriverObject
,
227 PUNICODE_STRING RegistryPath
);
230 * Driver cancel declaration
232 typedef NTSTATUS (*PDRIVER_CANCEL
)(struct _DEVICE_OBJECT
* DeviceObject
,
233 struct _IRP
* RegistryPath
);
236 typedef struct _SECTION_OBJECT_POINTERS
238 PVOID DataSectionObject
;
239 PVOID SharedCacheMap
;
240 PVOID ImageSectionObject
;
241 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
243 typedef struct _IO_COMPLETION_CONTEXT
247 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
249 #define FO_FILE_OPEN 0x00000001
250 #define FO_SYNCHRONOUS_IO 0x00000002
251 #define FO_ALERTABLE_IO 0x00000004
252 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
253 #define FO_WRITE_THROUGH 0x00000010
254 #define FO_SEQUENTIAL_ONLY 0x00000020
255 #define FO_CACHE_SUPPORTED 0x00000040
256 #define FO_NAMED_PIPE 0x00000080
257 #define FO_STREAM_FILE 0x00000100
258 #define FO_MAILSLOT 0x00000200
259 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
260 #define FO_DIRECT_DEVICE_OPEN 0x00000800
261 #define FO_FILE_MODIFIED 0x00001000
262 #define FO_FILE_SIZE_CHANGED 0x00002000
263 #define FO_CLEANUP_COMPLETE 0x00004000
264 #define FO_TEMPORARY_FILE 0x00008000
265 #define FO_DELETE_ON_CLOSE 0x00010000
266 #define FO_OPENED_CASE_SENSITIVE 0x00020000
267 #define FO_HANDLE_CREATED 0x00040000
268 #define FO_FILE_FAST_IO_READ 0x00080000
271 * ReactOS specific flags
273 #define FO_DIRECT_CACHE_READ 0x72000001
274 #define FO_DIRECT_CACHE_WRITE 0x72000002
275 #define FO_DIRECT_CACHE_PAGING_READ 0x72000004
276 #define FO_DIRECT_CACHE_PAGING_WRITE 0x72000008
277 #define FO_FCB_IS_VALID 0x72000010
279 typedef struct _FILE_OBJECT
283 struct _DEVICE_OBJECT
* DeviceObject
;
287 PSECTION_OBJECT_POINTERS SectionObjectPointers
;
288 PVOID PrivateCacheMap
;
289 NTSTATUS FinalStatus
;
290 struct _FILE_OBJECT
* RelatedFileObject
;
291 BOOLEAN LockOperation
;
292 BOOLEAN DeletePending
;
295 BOOLEAN DeleteAccess
;
298 BOOLEAN SharedDelete
;
300 UNICODE_STRING FileName
;
301 LARGE_INTEGER CurrentByteOffset
;
307 PIO_COMPLETION_CONTEXT CompletionContext
;
308 } FILE_OBJECT
, *PFILE_OBJECT
;
319 struct _IRP
* MasterIrp
;
323 LIST_ENTRY ThreadListEntry
;
324 IO_STATUS_BLOCK IoStatus
;
325 KPROCESSOR_MODE RequestorMode
;
326 BOOLEAN PendingReturned
;
328 CHAR CurrentLocation
;
331 CCHAR ApcEnvironment
;// CCHAR or PVOID?
332 UCHAR AllocationFlags
;//UCHAR or ULONG?
333 PIO_STATUS_BLOCK UserIosb
;
339 PIO_APC_ROUTINE UserApcRoutine
;
340 PVOID UserApcContext
;
341 } AsynchronousParameters
;
342 LARGE_INTEGER AllocationSize
;
344 PDRIVER_CANCEL CancelRoutine
;
350 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
351 struct _ETHREAD
* Thread
;
352 PCHAR AuxiliaryBuffer
;
353 LIST_ENTRY ListEntry
;
354 struct _IO_STACK_LOCATION
* CurrentStackLocation
;
355 PFILE_OBJECT OriginalFileObject
;
360 IO_STACK_LOCATION Stack
[1];
363 #define VPB_MOUNTED 0x00000001
364 #define VPB_LOCKED 0x00000002
365 #define VPB_PERSISTENT 0x00000004
366 #define VPB_REMOVE_PENDING 0x00000008
373 USHORT VolumeLabelLength
;
374 struct _DEVICE_OBJECT
* DeviceObject
;
375 struct _DEVICE_OBJECT
* RealDevice
;
377 ULONG ReferenceCount
;
378 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
];
382 typedef struct _DEVICE_OBJECT
387 struct _DRIVER_OBJECT
* DriverObject
;
388 struct _DEVICE_OBJECT
* NextDevice
;
389 struct _DEVICE_OBJECT
* AttachedDevice
;
390 struct _IRP
* CurrentIrp
;
393 ULONG Characteristics
;
395 PVOID DeviceExtension
;
396 DEVICE_TYPE DeviceType
;
401 WAIT_CONTEXT_BLOCK Wcb
;
403 ULONG AlignmentRequirement
;
404 KDEVICE_QUEUE DeviceQueue
;
406 ULONG ActiveThreadCount
;
407 PSECURITY_DESCRIPTOR SecurityDescriptor
;
411 struct _DEVOBJ_EXTENSION
* DeviceObjectExtension
;
413 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
416 * Dispatch routine type declaration
418 typedef NTSTATUS
STDCALL (*PDRIVER_DISPATCH
)(struct _DEVICE_OBJECT
*, IRP
*);
422 * Fast i/o routine type declaration
424 //typedef NTSTATUS (*PFAST_IO_DISPATCH)(struct _DEVICE_OBJECT*, IRP*);
425 //FIXME : this type is ok for read and write, but not for all routines
426 typedef BOOLEAN
STDCALL (*PFAST_IO_ROUTINE
) (
427 IN
struct _FILE_OBJECT
*FileObject
,
428 IN PLARGE_INTEGER FileOffset
,
433 OUT PIO_STATUS_BLOCK IoStatus
,
434 IN
struct _DEVICE_OBJECT
*DeviceObject
437 typedef struct _FAST_IO_DISPATCH
{
438 ULONG SizeOfFastIoDispatch
;
439 PFAST_IO_ROUTINE FastIoCheckIfPossible
;
440 PFAST_IO_ROUTINE FastIoRead
;
441 PFAST_IO_ROUTINE FastIoWrite
;
442 PFAST_IO_ROUTINE FastIoQueryBasicInfo
;
443 PFAST_IO_ROUTINE FastIoQueryStandardInfo
;
444 PFAST_IO_ROUTINE FastIoLock
;
445 PFAST_IO_ROUTINE FastIoUnlockSingle
;
446 PFAST_IO_ROUTINE FastIoUnlockAll
;
447 PFAST_IO_ROUTINE FastIoUnlockAllByKey
;
448 PFAST_IO_ROUTINE FastIoDeviceControl
;
449 PFAST_IO_ROUTINE AcquireFileForNtCreateSection
;
450 PFAST_IO_ROUTINE ReleaseFileForNtCreateSection
;
451 PFAST_IO_ROUTINE FastIoDetachDevice
;
452 PFAST_IO_ROUTINE FastIoQueryNetworkOpenInfo
;
453 PFAST_IO_ROUTINE AcquireForModWrite
;
454 PFAST_IO_ROUTINE MdlRead
;
455 PFAST_IO_ROUTINE MdlReadComplete
;
456 PFAST_IO_ROUTINE PrepareMdlWrite
;
457 PFAST_IO_ROUTINE MdlWriteComplete
;
458 PFAST_IO_ROUTINE FastIoReadCompressed
;
459 PFAST_IO_ROUTINE FastIoWriteCompressed
;
460 PFAST_IO_ROUTINE MdlReadCompleteCompressed
;
461 PFAST_IO_ROUTINE MdlWriteCompleteCompressed
;
462 PFAST_IO_ROUTINE FastIoQueryOpen
;
463 PFAST_IO_ROUTINE ReleaseForModWrite
;
464 PFAST_IO_ROUTINE AcquireForCcFlush
;
465 PFAST_IO_ROUTINE ReleaseForCcFlush
;
466 } FAST_IO_DISPATCH
, *PFAST_IO_DISPATCH
;
469 * Dispatch routine type declaration
471 typedef VOID
STDCALL (*PDRIVER_STARTIO
)(IN PDEVICE_OBJECT DeviceObject
, IN PIRP Irp
);
474 * Dispatch routine type declaration
476 typedef NTSTATUS (*PDRIVER_UNLOAD
)(struct _DRIVER_OBJECT
*);
478 typedef struct _DRIVER_EXTENSION
480 struct _DRIVER_OBJECT
* DriverObject
;
481 PDRIVER_ADD_DEVICE AddDevice
;
483 UNICODE_STRING ServiceKeyName
;
484 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
488 struct _FAST_IO_DISPATCH_TABLE
491 PFAST_IO_DISPATCH Dispatch
;
493 } FAST_IO_DISPATCH_TABLE
, * PFAST_IO_DISPATCH_TABLE
;
496 typedef struct _DRIVER_OBJECT
500 PDEVICE_OBJECT DeviceObject
;
505 PDRIVER_EXTENSION DriverExtension
;
506 UNICODE_STRING DriverName
;
507 PUNICODE_STRING HardwareDatabase
;
509 PFAST_IO_DISPATCH_TABLE FastIoDispatch
;
511 PFAST_IO_DISPATCH FastIoDispatch
;
513 PDRIVER_INITIALIZE DriverInit
;
514 PDRIVER_STARTIO DriverStartIo
;
515 PDRIVER_UNLOAD DriverUnload
;
516 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
517 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
520 typedef struct _CONFIGURATION_INFORMATION
529 BOOLEAN AtDiskPrimaryAddressClaimed
;
530 BOOLEAN AtDiskSecondaryAddressClaimed
;
531 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
533 typedef VOID (*PIO_DPC_ROUTINE
)(PKDPC Dpc
,
534 PDEVICE_OBJECT DeviceObject
,
538 typedef VOID (*PIO_TIMER_ROUTINE
)(PDEVICE_OBJECT DeviceObject
,
541 #if WINDOWS_STRUCTS_DOESNT_ALREADY_DEFINE_THIS
542 typedef struct _PARTITION_INFORMATION
544 LARGE_INTEGER StartingOffset
;
545 LARGE_INTEGER PartitionLength
;
547 ULONG PartitionNumber
;
549 BOOLEAN BootIndicator
;
550 BOOLEAN RecognizedPartition
;
551 BOOLEAN RewritePartition
;
552 } PARTITION_INFORMATION
, *PPARTITION_INFORMATION
;
555 typedef struct _DRIVER_LAYOUT_INFORMATION
557 ULONG PartitionCount
;
559 PARTITION_INFORMATION PartitionEntry
[1];
560 } DRIVER_LAYOUT_INFORMATION
, *PDRIVER_LAYOUT_INFORMATION
;
566 typedef struct _IO_RESOURCE_DESCRIPTOR
570 UCHAR SharedDisposition
;
573 * Reserved for system use
580 * Reserved for system use
590 PHYSICAL_ADDRESS MinimumAddress
;
591 PHYSICAL_ADDRESS MaximumAddress
;
597 PHYSICAL_ADDRESS MinimumAddress
;
598 PHYSICAL_ADDRESS MaximumAddress
;
607 ULONG MinimumChannel
;
608 ULONG MaximumChannel
;
611 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
613 typedef struct _IO_RESOURCE_LIST
618 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
619 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
621 typedef struct _IO_RESOURCES_REQUIREMENTS_LIST
629 * System defined enum for the bus
631 INTERFACE_TYPE InterfaceType
;
636 ULONG AlternativeLists
;
637 IO_RESOURCE_LIST List
[1];
638 } IO_RESOURCES_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
643 UCHAR ShareDisposition
;
649 PHYSICAL_ADDRESS Start
;
660 PHYSICAL_ADDRESS Start
;
674 } DeviceSpecificData
;
676 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
683 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
684 } CM_PARTIAL_RESOURCE_LIST
;
688 INTERFACE_TYPE InterfaceType
;
690 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
691 } CM_FULL_RESOURCE_DESCRIPTOR
;
696 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
697 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
703 PDEVICE_OBJECT DeviceObject
,
705 PVOID MapRegisterBase
,
708 #if (_WIN32_WINNT >= 0x0400)
711 (*PFSDNOTIFICATIONPROC
) (
712 IN PDEVICE_OBJECT PtrTargetFileSystemDeviceObject
,
713 IN BOOLEAN DriverActive
715 #endif // (_WIN32_WINNT >= 0x0400)
717 #endif __INCLUDE_DDK_IOTYPES_H