1 /* $Id: iotypes.h,v 1.12 2000/03/06 01:02:30 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
34 typedef ULONG INTERFACE_TYPE
;
35 typedef INTERFACE_TYPE
* PINTERFACE_TYPE
;
38 * FIXME: Definition needed
40 typedef struct _SHARE_ACCESS
42 } SHARE_ACCESS
, *PSHARE_ACCESS
;
44 /* FUNCTION TYPES ************************************************************/
46 typedef VOID (*PDRIVER_REINITIALIZE
)(struct _DRIVER_OBJECT
* DriverObject
,
50 typedef NTSTATUS (*PIO_QUERY_DEVICE_ROUTINE
)(PVOID Context
,
51 PUNICODE_STRING Pathname
,
52 INTERFACE_TYPE BusType
,
54 PKEY_VALUE_FULL_INFORMATION
* BI
,
55 CONFIGURATION_TYPE ControllerType
,
56 ULONG ControllerNumber
,
57 PKEY_VALUE_FULL_INFORMATION
* CI
,
58 CONFIGURATION_TYPE PeripheralType
,
59 ULONG PeripheralNumber
,
60 PKEY_VALUE_FULL_INFORMATION
* PI
);
62 typedef NTSTATUS (*PIO_COMPLETION_ROUTINE
)(struct _DEVICE_OBJECT
* DeviceObject
,
66 typedef VOID (*PIO_APC_ROUTINE
) (PVOID ApcContext
,
67 struct _IO_STATUS_BLOCK
* IoStatusBlock
,
71 /* STRUCTURE TYPES ***********************************************************/
73 typedef struct _ADAPTER_OBJECT
75 } ADAPTER_OBJECT
, *PADAPTER_OBJECT
;
78 * PURPOSE: Special timer associated with each device
79 * NOTES: This is a guess
81 typedef struct _IO_TIMER
85 } IO_TIMER
, *PIO_TIMER
;
87 typedef struct _IO_SECURITY_CONTEXT
89 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
90 PACCESS_STATE AccessState
;
91 ACCESS_MASK DesiredAccess
;
92 ULONG FullCreateOptions
;
93 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
96 * PURPOSE: IRP stack location
98 typedef struct _IO_STACK_LOCATION
109 PIO_SECURITY_CONTEXT SecurityContext
;
111 USHORT FileAttributes
;
119 LARGE_INTEGER ByteOffset
;
125 LARGE_INTEGER ByteOffset
;
129 ULONG OutputBufferLength
;
130 ULONG InputBufferLength
;
132 PVOID Type3InputBuffer
;
137 struct _DEVICE_OBJECT
* DeviceObject
;
141 FILE_INFORMATION_CLASS FileInformationClass
;
145 FS_INFORMATION_CLASS FileInformationClass
;
149 FS_INFORMATION_CLASS FileInformationClass
;
153 FILE_INFORMATION_CLASS FileInformationClass
;
154 struct _FILE_OBJECT
* FileObject
;
157 BOOLEAN ReplaceIfExists
;
167 PUNICODE_STRING FileName
;
168 FILE_INFORMATION_CLASS FileInformationClass
;
173 PIO_COMPLETION_ROUTINE CompletionRoutine
;
174 PVOID CompletionContext
;
176 struct _DEVICE_OBJECT
* DeviceObject
;
178 struct _FILE_OBJECT
* FileObject
;
179 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
181 typedef struct _IO_STATUS_BLOCK
185 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
188 * Driver entry point declaration
190 typedef NTSTATUS (*PDRIVER_INITIALIZE
)(struct _DRIVER_OBJECT
* DriverObject
,
191 PUNICODE_STRING RegistryPath
);
194 * Driver cancel declaration
196 typedef NTSTATUS (*PDRIVER_CANCEL
)(struct _DEVICE_OBJECT
* DeviceObject
,
197 struct _IRP
* RegistryPath
);
200 typedef struct _SECTION_OBJECT_POINTERS
202 PVOID DataSectionObject
;
203 PVOID SharedCacheMap
;
204 PVOID ImageSectionObject
;
205 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
207 typedef struct _IO_COMPLETION_CONTEXT
211 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
213 #define FO_FILE_OPEN 0x00000001
214 #define FO_SYNCHRONOUS_IO 0x00000002
215 #define FO_ALERTABLE_IO 0x00000004
216 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
217 #define FO_WRITE_THROUGH 0x00000010
218 #define FO_SEQUENTIAL_ONLY 0x00000020
219 #define FO_CACHE_SUPPORTED 0x00000040
220 #define FO_NAMED_PIPE 0x00000080
221 #define FO_STREAM_FILE 0x00000100
222 #define FO_MAILSLOT 0x00000200
223 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
224 #define FO_DIRECT_DEVICE_OPEN 0x00000800
225 #define FO_FILE_MODIFIED 0x00001000
226 #define FO_FILE_SIZE_CHANGED 0x00002000
227 #define FO_CLEANUP_COMPLETE 0x00004000
228 #define FO_TEMPORARY_FILE 0x00008000
229 #define FO_DELETE_ON_CLOSE 0x00010000
230 #define FO_OPENED_CASE_SENSITIVE 0x00020000
231 #define FO_HANDLE_CREATED 0x00040000
232 #define FO_FILE_FAST_IO_READ 0x00080000
234 typedef struct _FILE_OBJECT
238 struct _DEVICE_OBJECT
* DeviceObject
;
242 PSECTION_OBJECT_POINTERS SectionObjectPointers
;
243 PVOID PrivateCacheMap
;
244 NTSTATUS FinalStatus
;
245 struct _FILE_OBJECT
* RelatedFileObject
;
246 BOOLEAN LockOperation
;
247 BOOLEAN DeletePending
;
250 BOOLEAN DeleteAccess
;
253 BOOLEAN SharedDelete
;
255 UNICODE_STRING FileName
;
256 LARGE_INTEGER CurrentByteOffset
;
262 PIO_COMPLETION_CONTEXT CompletionContext
;
263 } FILE_OBJECT
, *PFILE_OBJECT
;
274 struct _IRP
* MasterIrp
;
278 LIST_ENTRY ThreadListEntry
;
279 IO_STATUS_BLOCK IoStatus
;
280 KPROCESSOR_MODE RequestorMode
;
281 BOOLEAN PendingReturned
;
284 PDRIVER_CANCEL CancelRoutine
;
286 PVOID ApcEnvironment
;
287 ULONG AllocationFlags
;
288 PIO_STATUS_BLOCK UserIosb
;
294 PIO_APC_ROUTINE UserApcRoutine
;
295 PVOID UserApcContext
;
296 } AsynchronousParameters
;
297 LARGE_INTEGER AllocationSize
;
303 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
304 struct _ETHREAD
* Thread
;
305 PCHAR AuxiliaryBuffer
;
306 LIST_ENTRY ListEntry
;
307 struct _IO_STACK_LOCATION
* CurrentStackLocation
;
308 PFILE_OBJECT OriginalFileObject
;
314 CHAR CurrentLocation
;
315 IO_STACK_LOCATION Stack
[1];
318 #define VPB_MOUNTED 0x00000001
319 #define VPB_LOCKED 0x00000002
320 #define VPB_PERSISTENT 0x00000004
321 #define VPB_REMOVE_PENDING 0x00000008
328 USHORT VolumeLabelLength
;
329 struct _DEVICE_OBJECT
* DeviceObject
;
330 struct _DEVICE_OBJECT
* RealDevice
;
332 ULONG ReferenceCount
;
333 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
];
337 typedef struct _DEVICE_OBJECT
342 struct _DRIVER_OBJECT
* DriverObject
;
343 struct _DEVICE_OBJECT
* NextDevice
;
344 struct _DEVICE_OBJECT
* AttachedDevice
;
345 struct _IRP
* CurrentIrp
;
348 ULONG Characteristics
;
350 PVOID DeviceExtension
;
351 DEVICE_TYPE DeviceType
;
356 WAIT_CONTEXT_BLOCK Wcb
;
358 ULONG AlignmentRequirement
;
359 KDEVICE_QUEUE DeviceQueue
;
361 ULONG ActiveThreadCount
;
362 PSECURITY_DESCRIPTOR SecurityDescriptor
;
366 struct _DEVOBJ_EXTENSION
* DeviceObjectExtension
;
368 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
371 * Dispatch routine type declaration
373 typedef NTSTATUS (*PDRIVER_DISPATCH
)(struct _DEVICE_OBJECT
*, IRP
*);
376 * Fast i/o routine type declaration
378 typedef NTSTATUS (*PFAST_IO_DISPATCH
)(struct _DEVICE_OBJECT
*, IRP
*);
381 * Dispatch routine type declaration
383 typedef VOID (*PDRIVER_STARTIO
)(struct _DEVICE_OBJECT
*, IRP
*);
386 * Dispatch routine type declaration
388 typedef NTSTATUS (*PDRIVER_UNLOAD
)(struct _DRIVER_OBJECT
*);
390 typedef struct _DRIVER_EXTENSION
392 struct _DRIVER_OBJECT
* DriverObject
;
393 PDRIVER_ADD_DEVICE AddDevice
;
395 UNICODE_STRING ServiceKeyName
;
396 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
400 struct _FAST_IO_DISPATCH_TABLE
403 PFAST_IO_DISPATCH Dispatch
;
405 } FAST_IO_DISPATCH_TABLE
, * PFAST_IO_DISPATCH_TABLE
;
408 typedef struct _DRIVER_OBJECT
412 PDEVICE_OBJECT DeviceObject
;
417 PDRIVER_EXTENSION DriverExtension
;
418 UNICODE_STRING DriverName
;
419 PUNICODE_STRING HardwareDatabase
;
421 PFAST_IO_DISPATCH_TABLE FastIoDispatch
;
423 PFAST_IO_DISPATCH FastIoDispatch
;
425 PDRIVER_INITIALIZE DriverInit
;
426 PDRIVER_STARTIO DriverStartIo
;
427 PDRIVER_UNLOAD DriverUnload
;
428 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
429 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
432 typedef struct _CONFIGURATION_INFORMATION
441 BOOLEAN AtDiskPrimaryAddressClaimed
;
442 BOOLEAN AtDiskSecondaryAddressClaimed
;
443 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
445 typedef VOID (*PIO_DPC_ROUTINE
)(PKDPC Dpc
,
446 PDEVICE_OBJECT DeviceObject
,
450 typedef VOID (*PIO_TIMER_ROUTINE
)(PDEVICE_OBJECT DeviceObject
,
453 #if WINDOWS_STRUCTS_DOESNT_ALREADY_DEFINE_THIS
454 typedef struct _PARTITION_INFORMATION
456 LARGE_INTEGER StartingOffset
;
457 LARGE_INTEGER PartitionLength
;
459 ULONG PartitionNumber
;
461 BOOLEAN BootIndicator
;
462 BOOLEAN RecognizedPartition
;
463 BOOLEAN RewritePartition
;
464 } PARTITION_INFORMATION
, *PPARTITION_INFORMATION
;
467 typedef struct _DRIVER_LAYOUT_INFORMATION
469 ULONG PartitionCount
;
471 PARTITION_INFORMATION PartitionEntry
[1];
472 } DRIVER_LAYOUT_INFORMATION
, *PDRIVER_LAYOUT_INFORMATION
;
478 typedef struct _IO_RESOURCE_DESCRIPTOR
482 UCHAR SharedDisposition
;
485 * Reserved for system use
492 * Reserved for system use
502 PHYSICAL_ADDRESS MinimumAddress
;
503 PHYSICAL_ADDRESS MaximumAddress
;
509 PHYSICAL_ADDRESS MinimumAddress
;
510 PHYSICAL_ADDRESS MaximumAddress
;
519 ULONG MinimumChannel
;
520 ULONG MaximumChannel
;
523 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
525 typedef struct _IO_RESOURCE_LIST
530 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
531 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
533 typedef struct _IO_RESOURCES_REQUIREMENTS_LIST
541 * System defined enum for the bus
543 INTERFACE_TYPE InterfaceType
;
548 ULONG AlternativeLists
;
549 IO_RESOURCE_LIST List
[1];
550 } IO_RESOURCES_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
555 UCHAR ShareDisposition
;
561 PHYSICAL_ADDRESS Start
;
572 PHYSICAL_ADDRESS Start
;
586 } DeviceSpecificData
;
588 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
595 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
596 } CM_PARTIAL_RESOURCE_LIST
;
600 INTERFACE_TYPE InterfaceType
;
602 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
603 } CM_FULL_RESOURCE_DESCRIPTOR
;
608 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
609 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
612 #endif __INCLUDE_DDK_IOTYPES_H