1 /* $Id: iotypes.h,v 1.14 2000/03/26 19:38:13 ea Exp $
5 #ifndef __INCLUDE_DDK_IOTYPES_H
6 #define __INCLUDE_DDK_IOTYPES_H
9 * These are referenced before they can be fully defined
11 struct _DRIVER_OBJECT
;
13 struct _DEVICE_OBJECT
;
15 struct _IO_STATUS_BLOCK
;
17 /* SIMPLE TYPES *************************************************************/
26 typedef enum _CREATE_FILE_TYPE
29 CreateFileTypeNamedPipe
,
30 CreateFileTypeMailslot
35 * FIXME: Definition needed
37 typedef struct _SHARE_ACCESS
39 } SHARE_ACCESS
, *PSHARE_ACCESS
;
41 /* FUNCTION TYPES ************************************************************/
43 typedef VOID (*PDRIVER_REINITIALIZE
)(struct _DRIVER_OBJECT
* DriverObject
,
47 typedef NTSTATUS (*PIO_QUERY_DEVICE_ROUTINE
)(PVOID Context
,
48 PUNICODE_STRING Pathname
,
49 INTERFACE_TYPE BusType
,
51 PKEY_VALUE_FULL_INFORMATION
* BI
,
52 CONFIGURATION_TYPE ControllerType
,
53 ULONG ControllerNumber
,
54 PKEY_VALUE_FULL_INFORMATION
* CI
,
55 CONFIGURATION_TYPE PeripheralType
,
56 ULONG PeripheralNumber
,
57 PKEY_VALUE_FULL_INFORMATION
* PI
);
59 typedef NTSTATUS (*PIO_COMPLETION_ROUTINE
)(struct _DEVICE_OBJECT
* DeviceObject
,
63 typedef VOID (*PIO_APC_ROUTINE
) (PVOID ApcContext
,
64 struct _IO_STATUS_BLOCK
* IoStatusBlock
,
68 /* STRUCTURE TYPES ***********************************************************/
70 typedef struct _ADAPTER_OBJECT
72 } ADAPTER_OBJECT
, *PADAPTER_OBJECT
;
75 * PURPOSE: Special timer associated with each device
76 * NOTES: This is a guess
78 typedef struct _IO_TIMER
82 } IO_TIMER
, *PIO_TIMER
;
84 typedef struct _IO_SECURITY_CONTEXT
86 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
87 PACCESS_STATE AccessState
;
88 ACCESS_MASK DesiredAccess
;
89 ULONG FullCreateOptions
;
90 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
93 * PURPOSE: IRP stack location
95 typedef struct _IO_STACK_LOCATION
106 PIO_SECURITY_CONTEXT SecurityContext
;
108 USHORT FileAttributes
;
116 LARGE_INTEGER ByteOffset
;
122 LARGE_INTEGER ByteOffset
;
126 ULONG OutputBufferLength
;
127 ULONG InputBufferLength
;
129 PVOID Type3InputBuffer
;
134 struct _DEVICE_OBJECT
* DeviceObject
;
138 FILE_INFORMATION_CLASS FileInformationClass
;
142 FS_INFORMATION_CLASS FileInformationClass
;
146 FS_INFORMATION_CLASS FileInformationClass
;
150 FILE_INFORMATION_CLASS FileInformationClass
;
151 struct _FILE_OBJECT
* FileObject
;
154 BOOLEAN ReplaceIfExists
;
164 PUNICODE_STRING FileName
;
165 FILE_INFORMATION_CLASS FileInformationClass
;
170 PIO_COMPLETION_ROUTINE CompletionRoutine
;
171 PVOID CompletionContext
;
173 struct _DEVICE_OBJECT
* DeviceObject
;
175 struct _FILE_OBJECT
* FileObject
;
176 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
178 typedef struct _IO_STATUS_BLOCK
182 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
185 * Driver entry point declaration
187 typedef NTSTATUS (*PDRIVER_INITIALIZE
)(struct _DRIVER_OBJECT
* DriverObject
,
188 PUNICODE_STRING RegistryPath
);
191 * Driver cancel declaration
193 typedef NTSTATUS (*PDRIVER_CANCEL
)(struct _DEVICE_OBJECT
* DeviceObject
,
194 struct _IRP
* RegistryPath
);
197 typedef struct _SECTION_OBJECT_POINTERS
199 PVOID DataSectionObject
;
200 PVOID SharedCacheMap
;
201 PVOID ImageSectionObject
;
202 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
204 typedef struct _IO_COMPLETION_CONTEXT
208 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
210 #define FO_FILE_OPEN 0x00000001
211 #define FO_SYNCHRONOUS_IO 0x00000002
212 #define FO_ALERTABLE_IO 0x00000004
213 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
214 #define FO_WRITE_THROUGH 0x00000010
215 #define FO_SEQUENTIAL_ONLY 0x00000020
216 #define FO_CACHE_SUPPORTED 0x00000040
217 #define FO_NAMED_PIPE 0x00000080
218 #define FO_STREAM_FILE 0x00000100
219 #define FO_MAILSLOT 0x00000200
220 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
221 #define FO_DIRECT_DEVICE_OPEN 0x00000800
222 #define FO_FILE_MODIFIED 0x00001000
223 #define FO_FILE_SIZE_CHANGED 0x00002000
224 #define FO_CLEANUP_COMPLETE 0x00004000
225 #define FO_TEMPORARY_FILE 0x00008000
226 #define FO_DELETE_ON_CLOSE 0x00010000
227 #define FO_OPENED_CASE_SENSITIVE 0x00020000
228 #define FO_HANDLE_CREATED 0x00040000
229 #define FO_FILE_FAST_IO_READ 0x00080000
231 typedef struct _FILE_OBJECT
235 struct _DEVICE_OBJECT
* DeviceObject
;
239 PSECTION_OBJECT_POINTERS SectionObjectPointers
;
240 PVOID PrivateCacheMap
;
241 NTSTATUS FinalStatus
;
242 struct _FILE_OBJECT
* RelatedFileObject
;
243 BOOLEAN LockOperation
;
244 BOOLEAN DeletePending
;
247 BOOLEAN DeleteAccess
;
250 BOOLEAN SharedDelete
;
252 UNICODE_STRING FileName
;
253 LARGE_INTEGER CurrentByteOffset
;
259 PIO_COMPLETION_CONTEXT CompletionContext
;
260 } FILE_OBJECT
, *PFILE_OBJECT
;
271 struct _IRP
* MasterIrp
;
275 LIST_ENTRY ThreadListEntry
;
276 IO_STATUS_BLOCK IoStatus
;
277 KPROCESSOR_MODE RequestorMode
;
278 BOOLEAN PendingReturned
;
281 PDRIVER_CANCEL CancelRoutine
;
283 PVOID ApcEnvironment
;
284 ULONG AllocationFlags
;
285 PIO_STATUS_BLOCK UserIosb
;
291 PIO_APC_ROUTINE UserApcRoutine
;
292 PVOID UserApcContext
;
293 } AsynchronousParameters
;
294 LARGE_INTEGER AllocationSize
;
300 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
301 struct _ETHREAD
* Thread
;
302 PCHAR AuxiliaryBuffer
;
303 LIST_ENTRY ListEntry
;
304 struct _IO_STACK_LOCATION
* CurrentStackLocation
;
305 PFILE_OBJECT OriginalFileObject
;
311 CHAR CurrentLocation
;
312 IO_STACK_LOCATION Stack
[1];
315 #define VPB_MOUNTED 0x00000001
316 #define VPB_LOCKED 0x00000002
317 #define VPB_PERSISTENT 0x00000004
318 #define VPB_REMOVE_PENDING 0x00000008
325 USHORT VolumeLabelLength
;
326 struct _DEVICE_OBJECT
* DeviceObject
;
327 struct _DEVICE_OBJECT
* RealDevice
;
329 ULONG ReferenceCount
;
330 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
];
334 typedef struct _DEVICE_OBJECT
339 struct _DRIVER_OBJECT
* DriverObject
;
340 struct _DEVICE_OBJECT
* NextDevice
;
341 struct _DEVICE_OBJECT
* AttachedDevice
;
342 struct _IRP
* CurrentIrp
;
345 ULONG Characteristics
;
347 PVOID DeviceExtension
;
348 DEVICE_TYPE DeviceType
;
353 WAIT_CONTEXT_BLOCK Wcb
;
355 ULONG AlignmentRequirement
;
356 KDEVICE_QUEUE DeviceQueue
;
358 ULONG ActiveThreadCount
;
359 PSECURITY_DESCRIPTOR SecurityDescriptor
;
363 struct _DEVOBJ_EXTENSION
* DeviceObjectExtension
;
365 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
368 * Dispatch routine type declaration
370 typedef NTSTATUS (*PDRIVER_DISPATCH
)(struct _DEVICE_OBJECT
*, IRP
*);
373 * Fast i/o routine type declaration
375 typedef NTSTATUS (*PFAST_IO_DISPATCH
)(struct _DEVICE_OBJECT
*, IRP
*);
378 * Dispatch routine type declaration
380 typedef VOID (*PDRIVER_STARTIO
)(struct _DEVICE_OBJECT
*, IRP
*);
383 * Dispatch routine type declaration
385 typedef NTSTATUS (*PDRIVER_UNLOAD
)(struct _DRIVER_OBJECT
*);
387 typedef struct _DRIVER_EXTENSION
389 struct _DRIVER_OBJECT
* DriverObject
;
390 PDRIVER_ADD_DEVICE AddDevice
;
392 UNICODE_STRING ServiceKeyName
;
393 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
397 struct _FAST_IO_DISPATCH_TABLE
400 PFAST_IO_DISPATCH Dispatch
;
402 } FAST_IO_DISPATCH_TABLE
, * PFAST_IO_DISPATCH_TABLE
;
405 typedef struct _DRIVER_OBJECT
409 PDEVICE_OBJECT DeviceObject
;
414 PDRIVER_EXTENSION DriverExtension
;
415 UNICODE_STRING DriverName
;
416 PUNICODE_STRING HardwareDatabase
;
418 PFAST_IO_DISPATCH_TABLE FastIoDispatch
;
420 PFAST_IO_DISPATCH FastIoDispatch
;
422 PDRIVER_INITIALIZE DriverInit
;
423 PDRIVER_STARTIO DriverStartIo
;
424 PDRIVER_UNLOAD DriverUnload
;
425 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
426 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
429 typedef struct _CONFIGURATION_INFORMATION
438 BOOLEAN AtDiskPrimaryAddressClaimed
;
439 BOOLEAN AtDiskSecondaryAddressClaimed
;
440 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
442 typedef VOID (*PIO_DPC_ROUTINE
)(PKDPC Dpc
,
443 PDEVICE_OBJECT DeviceObject
,
447 typedef VOID (*PIO_TIMER_ROUTINE
)(PDEVICE_OBJECT DeviceObject
,
450 #if WINDOWS_STRUCTS_DOESNT_ALREADY_DEFINE_THIS
451 typedef struct _PARTITION_INFORMATION
453 LARGE_INTEGER StartingOffset
;
454 LARGE_INTEGER PartitionLength
;
456 ULONG PartitionNumber
;
458 BOOLEAN BootIndicator
;
459 BOOLEAN RecognizedPartition
;
460 BOOLEAN RewritePartition
;
461 } PARTITION_INFORMATION
, *PPARTITION_INFORMATION
;
464 typedef struct _DRIVER_LAYOUT_INFORMATION
466 ULONG PartitionCount
;
468 PARTITION_INFORMATION PartitionEntry
[1];
469 } DRIVER_LAYOUT_INFORMATION
, *PDRIVER_LAYOUT_INFORMATION
;
475 typedef struct _IO_RESOURCE_DESCRIPTOR
479 UCHAR SharedDisposition
;
482 * Reserved for system use
489 * Reserved for system use
499 PHYSICAL_ADDRESS MinimumAddress
;
500 PHYSICAL_ADDRESS MaximumAddress
;
506 PHYSICAL_ADDRESS MinimumAddress
;
507 PHYSICAL_ADDRESS MaximumAddress
;
516 ULONG MinimumChannel
;
517 ULONG MaximumChannel
;
520 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
522 typedef struct _IO_RESOURCE_LIST
527 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
528 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
530 typedef struct _IO_RESOURCES_REQUIREMENTS_LIST
538 * System defined enum for the bus
540 INTERFACE_TYPE InterfaceType
;
545 ULONG AlternativeLists
;
546 IO_RESOURCE_LIST List
[1];
547 } IO_RESOURCES_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
552 UCHAR ShareDisposition
;
558 PHYSICAL_ADDRESS Start
;
569 PHYSICAL_ADDRESS Start
;
583 } DeviceSpecificData
;
585 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
592 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
593 } CM_PARTIAL_RESOURCE_LIST
;
597 INTERFACE_TYPE InterfaceType
;
599 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
600 } CM_FULL_RESOURCE_DESCRIPTOR
;
605 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
606 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
612 PDEVICE_OBJECT DeviceObject
,
614 PVOID MapRegisterBase
,
617 #if (_WIN32_WINNT >= 0x0400)
620 (*PFSDNOTIFICATIONPROC
) (
621 IN PDEVICE_OBJECT PtrTargetFileSystemDeviceObject
,
622 IN BOOLEAN DriverActive
624 #endif // (_WIN32_WINNT >= 0x0400)
631 #endif __INCLUDE_DDK_IOTYPES_H