1 /* $Id: iotypes.h,v 1.17 2000/05/13 13:50:55 dwelch Exp $
5 #ifndef __INCLUDE_DDK_IOTYPES_H
6 #define __INCLUDE_DDK_IOTYPES_H
9 extern POBJECT_TYPE EXPORTED IoAdapterObjectType
;
10 extern POBJECT_TYPE EXPORTED IoDeviceHandlerObjectType
;
11 extern POBJECT_TYPE EXPORTED IoDeviceObjectType
;
12 extern POBJECT_TYPE EXPORTED IoDriverObjectType
;
13 extern POBJECT_TYPE EXPORTED IoFileObjectType
;
15 extern POBJECT_TYPE IMPORTED IoAdapterObjectType
;
16 extern POBJECT_TYPE IMPORTED IoDeviceHandlerObjectType
;
17 extern POBJECT_TYPE IMPORTED IoDeviceObjectType
;
18 extern POBJECT_TYPE IMPORTED IoDriverObjectType
;
19 extern POBJECT_TYPE IMPORTED IoFileObjectType
;
23 * These are referenced before they can be fully defined
25 struct _DRIVER_OBJECT
;
27 struct _DEVICE_OBJECT
;
29 struct _IO_STATUS_BLOCK
;
31 /* SIMPLE TYPES *************************************************************/
40 typedef enum _CREATE_FILE_TYPE
43 CreateFileTypeNamedPipe
,
44 CreateFileTypeMailslot
49 * FIXME: Definition needed
51 typedef struct _SHARE_ACCESS
53 } SHARE_ACCESS
, *PSHARE_ACCESS
;
55 /* FUNCTION TYPES ************************************************************/
57 typedef VOID (*PDRIVER_REINITIALIZE
)(struct _DRIVER_OBJECT
* DriverObject
,
61 typedef NTSTATUS (*PIO_QUERY_DEVICE_ROUTINE
)(PVOID Context
,
62 PUNICODE_STRING Pathname
,
63 INTERFACE_TYPE BusType
,
65 PKEY_VALUE_FULL_INFORMATION
* BI
,
66 CONFIGURATION_TYPE ControllerType
,
67 ULONG ControllerNumber
,
68 PKEY_VALUE_FULL_INFORMATION
* CI
,
69 CONFIGURATION_TYPE PeripheralType
,
70 ULONG PeripheralNumber
,
71 PKEY_VALUE_FULL_INFORMATION
* PI
);
73 typedef NTSTATUS (*PIO_COMPLETION_ROUTINE
)(struct _DEVICE_OBJECT
* DeviceObject
,
77 typedef VOID (*PIO_APC_ROUTINE
) (PVOID ApcContext
,
78 struct _IO_STATUS_BLOCK
* IoStatusBlock
,
82 /* STRUCTURE TYPES ***********************************************************/
84 typedef struct _ADAPTER_OBJECT
86 } ADAPTER_OBJECT
, *PADAPTER_OBJECT
;
89 * PURPOSE: Special timer associated with each device
90 * NOTES: This is a guess
92 typedef struct _IO_TIMER
96 } IO_TIMER
, *PIO_TIMER
;
98 typedef struct _IO_SECURITY_CONTEXT
100 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
101 PACCESS_STATE AccessState
;
102 ACCESS_MASK DesiredAccess
;
103 ULONG FullCreateOptions
;
104 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
107 * PURPOSE: IRP stack location
109 typedef struct _IO_STACK_LOCATION
120 PIO_SECURITY_CONTEXT SecurityContext
;
122 USHORT FileAttributes
;
130 LARGE_INTEGER ByteOffset
;
136 LARGE_INTEGER ByteOffset
;
140 ULONG OutputBufferLength
;
141 ULONG InputBufferLength
;
143 PVOID Type3InputBuffer
;
147 ULONG OutputBufferLength
;
148 ULONG InputBufferLength
;
150 PVOID Type3InputBuffer
;
155 struct _DEVICE_OBJECT
* DeviceObject
;
159 FILE_INFORMATION_CLASS FileInformationClass
;
163 FS_INFORMATION_CLASS FileInformationClass
;
167 FS_INFORMATION_CLASS FileInformationClass
;
171 FILE_INFORMATION_CLASS FileInformationClass
;
172 struct _FILE_OBJECT
* FileObject
;
175 BOOLEAN ReplaceIfExists
;
185 PUNICODE_STRING FileName
;
186 FILE_INFORMATION_CLASS FileInformationClass
;
191 ULONG CreateDisposition
;
194 BOOLEAN WriteModeMessage
;
195 BOOLEAN ReadModeMessage
;
200 LARGE_INTEGER TimeOut
;
204 PIO_COMPLETION_ROUTINE CompletionRoutine
;
205 PVOID CompletionContext
;
207 struct _DEVICE_OBJECT
* DeviceObject
;
209 struct _FILE_OBJECT
* FileObject
;
210 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
212 typedef struct _IO_STATUS_BLOCK
216 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
219 * Driver entry point declaration
221 typedef NTSTATUS (*PDRIVER_INITIALIZE
)(struct _DRIVER_OBJECT
* DriverObject
,
222 PUNICODE_STRING RegistryPath
);
225 * Driver cancel declaration
227 typedef NTSTATUS (*PDRIVER_CANCEL
)(struct _DEVICE_OBJECT
* DeviceObject
,
228 struct _IRP
* RegistryPath
);
231 typedef struct _SECTION_OBJECT_POINTERS
233 PVOID DataSectionObject
;
234 PVOID SharedCacheMap
;
235 PVOID ImageSectionObject
;
236 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
238 typedef struct _IO_COMPLETION_CONTEXT
242 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
244 #define FO_FILE_OPEN 0x00000001
245 #define FO_SYNCHRONOUS_IO 0x00000002
246 #define FO_ALERTABLE_IO 0x00000004
247 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
248 #define FO_WRITE_THROUGH 0x00000010
249 #define FO_SEQUENTIAL_ONLY 0x00000020
250 #define FO_CACHE_SUPPORTED 0x00000040
251 #define FO_NAMED_PIPE 0x00000080
252 #define FO_STREAM_FILE 0x00000100
253 #define FO_MAILSLOT 0x00000200
254 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
255 #define FO_DIRECT_DEVICE_OPEN 0x00000800
256 #define FO_FILE_MODIFIED 0x00001000
257 #define FO_FILE_SIZE_CHANGED 0x00002000
258 #define FO_CLEANUP_COMPLETE 0x00004000
259 #define FO_TEMPORARY_FILE 0x00008000
260 #define FO_DELETE_ON_CLOSE 0x00010000
261 #define FO_OPENED_CASE_SENSITIVE 0x00020000
262 #define FO_HANDLE_CREATED 0x00040000
263 #define FO_FILE_FAST_IO_READ 0x00080000
265 typedef struct _FILE_OBJECT
269 struct _DEVICE_OBJECT
* DeviceObject
;
273 PSECTION_OBJECT_POINTERS SectionObjectPointers
;
274 PVOID PrivateCacheMap
;
275 NTSTATUS FinalStatus
;
276 struct _FILE_OBJECT
* RelatedFileObject
;
277 BOOLEAN LockOperation
;
278 BOOLEAN DeletePending
;
281 BOOLEAN DeleteAccess
;
284 BOOLEAN SharedDelete
;
286 UNICODE_STRING FileName
;
287 LARGE_INTEGER CurrentByteOffset
;
293 PIO_COMPLETION_CONTEXT CompletionContext
;
294 } FILE_OBJECT
, *PFILE_OBJECT
;
305 struct _IRP
* MasterIrp
;
309 LIST_ENTRY ThreadListEntry
;
310 IO_STATUS_BLOCK IoStatus
;
311 KPROCESSOR_MODE RequestorMode
;
312 BOOLEAN PendingReturned
;
315 PDRIVER_CANCEL CancelRoutine
;
317 PVOID ApcEnvironment
;
318 ULONG AllocationFlags
;
319 PIO_STATUS_BLOCK UserIosb
;
325 PIO_APC_ROUTINE UserApcRoutine
;
326 PVOID UserApcContext
;
327 } AsynchronousParameters
;
328 LARGE_INTEGER AllocationSize
;
334 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
335 struct _ETHREAD
* Thread
;
336 PCHAR AuxiliaryBuffer
;
337 LIST_ENTRY ListEntry
;
338 struct _IO_STACK_LOCATION
* CurrentStackLocation
;
339 PFILE_OBJECT OriginalFileObject
;
345 CHAR CurrentLocation
;
346 IO_STACK_LOCATION Stack
[1];
349 #define VPB_MOUNTED 0x00000001
350 #define VPB_LOCKED 0x00000002
351 #define VPB_PERSISTENT 0x00000004
352 #define VPB_REMOVE_PENDING 0x00000008
359 USHORT VolumeLabelLength
;
360 struct _DEVICE_OBJECT
* DeviceObject
;
361 struct _DEVICE_OBJECT
* RealDevice
;
363 ULONG ReferenceCount
;
364 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
];
368 typedef struct _DEVICE_OBJECT
373 struct _DRIVER_OBJECT
* DriverObject
;
374 struct _DEVICE_OBJECT
* NextDevice
;
375 struct _DEVICE_OBJECT
* AttachedDevice
;
376 struct _IRP
* CurrentIrp
;
379 ULONG Characteristics
;
381 PVOID DeviceExtension
;
382 DEVICE_TYPE DeviceType
;
387 WAIT_CONTEXT_BLOCK Wcb
;
389 ULONG AlignmentRequirement
;
390 KDEVICE_QUEUE DeviceQueue
;
392 ULONG ActiveThreadCount
;
393 PSECURITY_DESCRIPTOR SecurityDescriptor
;
397 struct _DEVOBJ_EXTENSION
* DeviceObjectExtension
;
399 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
402 * Dispatch routine type declaration
404 typedef NTSTATUS (*PDRIVER_DISPATCH
)(struct _DEVICE_OBJECT
*, IRP
*);
407 * Fast i/o routine type declaration
409 typedef NTSTATUS (*PFAST_IO_DISPATCH
)(struct _DEVICE_OBJECT
*, IRP
*);
412 * Dispatch routine type declaration
414 typedef VOID (*PDRIVER_STARTIO
)(struct _DEVICE_OBJECT
*, IRP
*);
417 * Dispatch routine type declaration
419 typedef NTSTATUS (*PDRIVER_UNLOAD
)(struct _DRIVER_OBJECT
*);
421 typedef struct _DRIVER_EXTENSION
423 struct _DRIVER_OBJECT
* DriverObject
;
424 PDRIVER_ADD_DEVICE AddDevice
;
426 UNICODE_STRING ServiceKeyName
;
427 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
431 struct _FAST_IO_DISPATCH_TABLE
434 PFAST_IO_DISPATCH Dispatch
;
436 } FAST_IO_DISPATCH_TABLE
, * PFAST_IO_DISPATCH_TABLE
;
439 typedef struct _DRIVER_OBJECT
443 PDEVICE_OBJECT DeviceObject
;
448 PDRIVER_EXTENSION DriverExtension
;
449 UNICODE_STRING DriverName
;
450 PUNICODE_STRING HardwareDatabase
;
452 PFAST_IO_DISPATCH_TABLE FastIoDispatch
;
454 PFAST_IO_DISPATCH FastIoDispatch
;
456 PDRIVER_INITIALIZE DriverInit
;
457 PDRIVER_STARTIO DriverStartIo
;
458 PDRIVER_UNLOAD DriverUnload
;
459 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
460 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
463 typedef struct _CONFIGURATION_INFORMATION
472 BOOLEAN AtDiskPrimaryAddressClaimed
;
473 BOOLEAN AtDiskSecondaryAddressClaimed
;
474 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
476 typedef VOID (*PIO_DPC_ROUTINE
)(PKDPC Dpc
,
477 PDEVICE_OBJECT DeviceObject
,
481 typedef VOID (*PIO_TIMER_ROUTINE
)(PDEVICE_OBJECT DeviceObject
,
484 #if WINDOWS_STRUCTS_DOESNT_ALREADY_DEFINE_THIS
485 typedef struct _PARTITION_INFORMATION
487 LARGE_INTEGER StartingOffset
;
488 LARGE_INTEGER PartitionLength
;
490 ULONG PartitionNumber
;
492 BOOLEAN BootIndicator
;
493 BOOLEAN RecognizedPartition
;
494 BOOLEAN RewritePartition
;
495 } PARTITION_INFORMATION
, *PPARTITION_INFORMATION
;
498 typedef struct _DRIVER_LAYOUT_INFORMATION
500 ULONG PartitionCount
;
502 PARTITION_INFORMATION PartitionEntry
[1];
503 } DRIVER_LAYOUT_INFORMATION
, *PDRIVER_LAYOUT_INFORMATION
;
509 typedef struct _IO_RESOURCE_DESCRIPTOR
513 UCHAR SharedDisposition
;
516 * Reserved for system use
523 * Reserved for system use
533 PHYSICAL_ADDRESS MinimumAddress
;
534 PHYSICAL_ADDRESS MaximumAddress
;
540 PHYSICAL_ADDRESS MinimumAddress
;
541 PHYSICAL_ADDRESS MaximumAddress
;
550 ULONG MinimumChannel
;
551 ULONG MaximumChannel
;
554 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
556 typedef struct _IO_RESOURCE_LIST
561 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
562 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
564 typedef struct _IO_RESOURCES_REQUIREMENTS_LIST
572 * System defined enum for the bus
574 INTERFACE_TYPE InterfaceType
;
579 ULONG AlternativeLists
;
580 IO_RESOURCE_LIST List
[1];
581 } IO_RESOURCES_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
586 UCHAR ShareDisposition
;
592 PHYSICAL_ADDRESS Start
;
603 PHYSICAL_ADDRESS Start
;
617 } DeviceSpecificData
;
619 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
626 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
627 } CM_PARTIAL_RESOURCE_LIST
;
631 INTERFACE_TYPE InterfaceType
;
633 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
634 } CM_FULL_RESOURCE_DESCRIPTOR
;
639 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
640 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
646 PDEVICE_OBJECT DeviceObject
,
648 PVOID MapRegisterBase
,
651 #if (_WIN32_WINNT >= 0x0400)
654 (*PFSDNOTIFICATIONPROC
) (
655 IN PDEVICE_OBJECT PtrTargetFileSystemDeviceObject
,
656 IN BOOLEAN DriverActive
658 #endif // (_WIN32_WINNT >= 0x0400)
665 #endif __INCLUDE_DDK_IOTYPES_H