1 /* $Id: iotypes.h,v 1.15 2000/03/26 22:00:06 dwelch 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 ULONG FileAttributes
;
178 LARGE_INTEGER Timeout
;
182 PIO_COMPLETION_ROUTINE CompletionRoutine
;
183 PVOID CompletionContext
;
185 struct _DEVICE_OBJECT
* DeviceObject
;
187 struct _FILE_OBJECT
* FileObject
;
188 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
190 typedef struct _IO_STATUS_BLOCK
194 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
197 * Driver entry point declaration
199 typedef NTSTATUS (*PDRIVER_INITIALIZE
)(struct _DRIVER_OBJECT
* DriverObject
,
200 PUNICODE_STRING RegistryPath
);
203 * Driver cancel declaration
205 typedef NTSTATUS (*PDRIVER_CANCEL
)(struct _DEVICE_OBJECT
* DeviceObject
,
206 struct _IRP
* RegistryPath
);
209 typedef struct _SECTION_OBJECT_POINTERS
211 PVOID DataSectionObject
;
212 PVOID SharedCacheMap
;
213 PVOID ImageSectionObject
;
214 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
216 typedef struct _IO_COMPLETION_CONTEXT
220 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
222 #define FO_FILE_OPEN 0x00000001
223 #define FO_SYNCHRONOUS_IO 0x00000002
224 #define FO_ALERTABLE_IO 0x00000004
225 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
226 #define FO_WRITE_THROUGH 0x00000010
227 #define FO_SEQUENTIAL_ONLY 0x00000020
228 #define FO_CACHE_SUPPORTED 0x00000040
229 #define FO_NAMED_PIPE 0x00000080
230 #define FO_STREAM_FILE 0x00000100
231 #define FO_MAILSLOT 0x00000200
232 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
233 #define FO_DIRECT_DEVICE_OPEN 0x00000800
234 #define FO_FILE_MODIFIED 0x00001000
235 #define FO_FILE_SIZE_CHANGED 0x00002000
236 #define FO_CLEANUP_COMPLETE 0x00004000
237 #define FO_TEMPORARY_FILE 0x00008000
238 #define FO_DELETE_ON_CLOSE 0x00010000
239 #define FO_OPENED_CASE_SENSITIVE 0x00020000
240 #define FO_HANDLE_CREATED 0x00040000
241 #define FO_FILE_FAST_IO_READ 0x00080000
243 typedef struct _FILE_OBJECT
247 struct _DEVICE_OBJECT
* DeviceObject
;
251 PSECTION_OBJECT_POINTERS SectionObjectPointers
;
252 PVOID PrivateCacheMap
;
253 NTSTATUS FinalStatus
;
254 struct _FILE_OBJECT
* RelatedFileObject
;
255 BOOLEAN LockOperation
;
256 BOOLEAN DeletePending
;
259 BOOLEAN DeleteAccess
;
262 BOOLEAN SharedDelete
;
264 UNICODE_STRING FileName
;
265 LARGE_INTEGER CurrentByteOffset
;
271 PIO_COMPLETION_CONTEXT CompletionContext
;
272 } FILE_OBJECT
, *PFILE_OBJECT
;
283 struct _IRP
* MasterIrp
;
287 LIST_ENTRY ThreadListEntry
;
288 IO_STATUS_BLOCK IoStatus
;
289 KPROCESSOR_MODE RequestorMode
;
290 BOOLEAN PendingReturned
;
293 PDRIVER_CANCEL CancelRoutine
;
295 PVOID ApcEnvironment
;
296 ULONG AllocationFlags
;
297 PIO_STATUS_BLOCK UserIosb
;
303 PIO_APC_ROUTINE UserApcRoutine
;
304 PVOID UserApcContext
;
305 } AsynchronousParameters
;
306 LARGE_INTEGER AllocationSize
;
312 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
313 struct _ETHREAD
* Thread
;
314 PCHAR AuxiliaryBuffer
;
315 LIST_ENTRY ListEntry
;
316 struct _IO_STACK_LOCATION
* CurrentStackLocation
;
317 PFILE_OBJECT OriginalFileObject
;
323 CHAR CurrentLocation
;
324 IO_STACK_LOCATION Stack
[1];
327 #define VPB_MOUNTED 0x00000001
328 #define VPB_LOCKED 0x00000002
329 #define VPB_PERSISTENT 0x00000004
330 #define VPB_REMOVE_PENDING 0x00000008
337 USHORT VolumeLabelLength
;
338 struct _DEVICE_OBJECT
* DeviceObject
;
339 struct _DEVICE_OBJECT
* RealDevice
;
341 ULONG ReferenceCount
;
342 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
];
346 typedef struct _DEVICE_OBJECT
351 struct _DRIVER_OBJECT
* DriverObject
;
352 struct _DEVICE_OBJECT
* NextDevice
;
353 struct _DEVICE_OBJECT
* AttachedDevice
;
354 struct _IRP
* CurrentIrp
;
357 ULONG Characteristics
;
359 PVOID DeviceExtension
;
360 DEVICE_TYPE DeviceType
;
365 WAIT_CONTEXT_BLOCK Wcb
;
367 ULONG AlignmentRequirement
;
368 KDEVICE_QUEUE DeviceQueue
;
370 ULONG ActiveThreadCount
;
371 PSECURITY_DESCRIPTOR SecurityDescriptor
;
375 struct _DEVOBJ_EXTENSION
* DeviceObjectExtension
;
377 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
380 * Dispatch routine type declaration
382 typedef NTSTATUS (*PDRIVER_DISPATCH
)(struct _DEVICE_OBJECT
*, IRP
*);
385 * Fast i/o routine type declaration
387 typedef NTSTATUS (*PFAST_IO_DISPATCH
)(struct _DEVICE_OBJECT
*, IRP
*);
390 * Dispatch routine type declaration
392 typedef VOID (*PDRIVER_STARTIO
)(struct _DEVICE_OBJECT
*, IRP
*);
395 * Dispatch routine type declaration
397 typedef NTSTATUS (*PDRIVER_UNLOAD
)(struct _DRIVER_OBJECT
*);
399 typedef struct _DRIVER_EXTENSION
401 struct _DRIVER_OBJECT
* DriverObject
;
402 PDRIVER_ADD_DEVICE AddDevice
;
404 UNICODE_STRING ServiceKeyName
;
405 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
409 struct _FAST_IO_DISPATCH_TABLE
412 PFAST_IO_DISPATCH Dispatch
;
414 } FAST_IO_DISPATCH_TABLE
, * PFAST_IO_DISPATCH_TABLE
;
417 typedef struct _DRIVER_OBJECT
421 PDEVICE_OBJECT DeviceObject
;
426 PDRIVER_EXTENSION DriverExtension
;
427 UNICODE_STRING DriverName
;
428 PUNICODE_STRING HardwareDatabase
;
430 PFAST_IO_DISPATCH_TABLE FastIoDispatch
;
432 PFAST_IO_DISPATCH FastIoDispatch
;
434 PDRIVER_INITIALIZE DriverInit
;
435 PDRIVER_STARTIO DriverStartIo
;
436 PDRIVER_UNLOAD DriverUnload
;
437 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
438 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
441 typedef struct _CONFIGURATION_INFORMATION
450 BOOLEAN AtDiskPrimaryAddressClaimed
;
451 BOOLEAN AtDiskSecondaryAddressClaimed
;
452 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
454 typedef VOID (*PIO_DPC_ROUTINE
)(PKDPC Dpc
,
455 PDEVICE_OBJECT DeviceObject
,
459 typedef VOID (*PIO_TIMER_ROUTINE
)(PDEVICE_OBJECT DeviceObject
,
462 #if WINDOWS_STRUCTS_DOESNT_ALREADY_DEFINE_THIS
463 typedef struct _PARTITION_INFORMATION
465 LARGE_INTEGER StartingOffset
;
466 LARGE_INTEGER PartitionLength
;
468 ULONG PartitionNumber
;
470 BOOLEAN BootIndicator
;
471 BOOLEAN RecognizedPartition
;
472 BOOLEAN RewritePartition
;
473 } PARTITION_INFORMATION
, *PPARTITION_INFORMATION
;
476 typedef struct _DRIVER_LAYOUT_INFORMATION
478 ULONG PartitionCount
;
480 PARTITION_INFORMATION PartitionEntry
[1];
481 } DRIVER_LAYOUT_INFORMATION
, *PDRIVER_LAYOUT_INFORMATION
;
487 typedef struct _IO_RESOURCE_DESCRIPTOR
491 UCHAR SharedDisposition
;
494 * Reserved for system use
501 * Reserved for system use
511 PHYSICAL_ADDRESS MinimumAddress
;
512 PHYSICAL_ADDRESS MaximumAddress
;
518 PHYSICAL_ADDRESS MinimumAddress
;
519 PHYSICAL_ADDRESS MaximumAddress
;
528 ULONG MinimumChannel
;
529 ULONG MaximumChannel
;
532 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
534 typedef struct _IO_RESOURCE_LIST
539 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
540 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
542 typedef struct _IO_RESOURCES_REQUIREMENTS_LIST
550 * System defined enum for the bus
552 INTERFACE_TYPE InterfaceType
;
557 ULONG AlternativeLists
;
558 IO_RESOURCE_LIST List
[1];
559 } IO_RESOURCES_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
564 UCHAR ShareDisposition
;
570 PHYSICAL_ADDRESS Start
;
581 PHYSICAL_ADDRESS Start
;
595 } DeviceSpecificData
;
597 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
604 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
605 } CM_PARTIAL_RESOURCE_LIST
;
609 INTERFACE_TYPE InterfaceType
;
611 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
612 } CM_FULL_RESOURCE_DESCRIPTOR
;
617 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
618 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
624 PDEVICE_OBJECT DeviceObject
,
626 PVOID MapRegisterBase
,
629 #if (_WIN32_WINNT >= 0x0400)
632 (*PFSDNOTIFICATIONPROC
) (
633 IN PDEVICE_OBJECT PtrTargetFileSystemDeviceObject
,
634 IN BOOLEAN DriverActive
636 #endif // (_WIN32_WINNT >= 0x0400)
643 #endif __INCLUDE_DDK_IOTYPES_H