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 *************************************************************/
25 typedef ULONG INTERFACE_TYPE
;
26 typedef INTERFACE_TYPE
* PINTERFACE_TYPE
;
29 * FIXME: Definition needed
31 typedef struct _SHARE_ACCESS
33 } SHARE_ACCESS
, *PSHARE_ACCESS
;
35 /* FUNCTION TYPES ************************************************************/
37 typedef VOID (*PDRIVER_REINITIALIZE
)(struct _DRIVER_OBJECT
* DriverObject
,
41 typedef NTSTATUS (*PIO_QUERY_DEVICE_ROUTINE
)(PVOID Context
,
42 PUNICODE_STRING Pathname
,
43 INTERFACE_TYPE BusType
,
45 PKEY_VALUE_FULL_INFORMATION
* BI
,
46 CONFIGURATION_TYPE ControllerType
,
47 ULONG ControllerNumber
,
48 PKEY_VALUE_FULL_INFORMATION
* CI
,
49 CONFIGURATION_TYPE PeripheralType
,
50 ULONG PeripheralNumber
,
51 PKEY_VALUE_FULL_INFORMATION
* PI
);
53 typedef NTSTATUS (*PIO_COMPLETION_ROUTINE
)(struct _DEVICE_OBJECT
* DeviceObject
,
57 typedef VOID (*PIO_APC_ROUTINE
) (PVOID ApcContext
,
58 struct _IO_STATUS_BLOCK
* IoStatusBlock
,
62 /* STRUCTURE TYPES ***********************************************************/
64 typedef struct _ADAPTER_OBJECT
66 } ADAPTER_OBJECT
, *PADAPTER_OBJECT
;
69 * PURPOSE: Special timer associated with each device
70 * NOTES: This is a guess
72 typedef struct _IO_TIMER
76 } IO_TIMER
, *PIO_TIMER
;
78 typedef struct _IO_SECURITY_CONTEXT
80 PSECURITY_QUALITY_OF_SERVICE SecurityQos
;
81 PACCESS_STATE AccessState
;
82 ACCESS_MASK DesiredAccess
;
83 ULONG FullCreateOptions
;
84 } IO_SECURITY_CONTEXT
, *PIO_SECURITY_CONTEXT
;
87 * PURPOSE: IRP stack location
89 typedef struct _IO_STACK_LOCATION
100 PIO_SECURITY_CONTEXT SecurityContext
;
102 USHORT FileAttributes
;
110 LARGE_INTEGER ByteOffset
;
116 LARGE_INTEGER ByteOffset
;
120 ULONG OutputBufferLength
;
121 ULONG InputBufferLength
;
123 PVOID Type3InputBuffer
;
128 struct _DEVICE_OBJECT
* DeviceObject
;
132 FILE_INFORMATION_CLASS FileInformationClass
;
136 FS_INFORMATION_CLASS FileInformationClass
;
140 FS_INFORMATION_CLASS FileInformationClass
;
144 FILE_INFORMATION_CLASS FileInformationClass
;
145 struct FILE_OBJECT
* FileObject
;
148 BOOLEAN ReplaceIfExists
;
159 PUNICODE_STRING FileName
;
160 FILE_INFORMATION_CLASS FileInformationClass
;
165 PIO_COMPLETION_ROUTINE CompletionRoutine
;
166 PVOID CompletionContext
;
168 struct _DEVICE_OBJECT
* DeviceObject
;
170 struct _FILE_OBJECT
* FileObject
;
171 } IO_STACK_LOCATION
, *PIO_STACK_LOCATION
;
173 typedef struct _IO_STATUS_BLOCK
176 * Is the completion status
181 * Is a request dependant value
184 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
187 * Driver entry point declaration
189 typedef NTSTATUS (*PDRIVER_INITIALIZE
)(struct _DRIVER_OBJECT
* DriverObject
,
190 PUNICODE_STRING RegistryPath
);
193 * Driver cancel declaration
195 typedef NTSTATUS (*PDRIVER_CANCEL
)(struct _DRIVER_OBJECT
* DriverObject
,
196 PUNICODE_STRING RegistryPath
);
199 typedef struct _SECTION_OBJECT_POINTERS
201 PVOID DataSectionObject
;
202 PVOID SharedCacheMap
;
203 PVOID ImageSectionObject
;
204 } SECTION_OBJECT_POINTERS
, *PSECTION_OBJECT_POINTERS
;
206 typedef struct _IO_COMPLETION_CONTEXT
210 } IO_COMPLETION_CONTEXT
, *PIO_COMPLETION_CONTEXT
;
212 #define FO_FILE_OPEN 0x00000001
213 #define FO_SYNCHRONOUS_IO 0x00000002
214 #define FO_ALERTABLE_IO 0x00000004
215 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
216 #define FO_WRITE_THROUGH 0x00000010
217 #define FO_SEQUENTIAL_ONLY 0x00000020
218 #define FO_CACHE_SUPPORTED 0x00000040
219 #define FO_NAMED_PIPE 0x00000080
220 #define FO_STREAM_FILE 0x00000100
221 #define FO_MAILSLOT 0x00000200
222 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
223 #define FO_DIRECT_DEVICE_OPEN 0x00000800
224 #define FO_FILE_MODIFIED 0x00001000
225 #define FO_FILE_SIZE_CHANGED 0x00002000
226 #define FO_CLEANUP_COMPLETE 0x00004000
227 #define FO_TEMPORARY_FILE 0x00008000
228 #define FO_DELETE_ON_CLOSE 0x00010000
229 #define FO_OPENED_CASE_SENSITIVE 0x00020000
230 #define FO_HANDLE_CREATED 0x00040000
231 #define FO_FILE_FAST_IO_READ 0x00080000
233 typedef struct _FILE_OBJECT
237 struct _DEVICE_OBJECT
* DeviceObject
;
241 PSECTION_OBJECT_POINTERS SectionObjectPointers
;
242 PVOID PrivateCacheMap
;
243 NTSTATUS FinalStatus
;
244 struct _FILE_OBJECT
* RelatedFileObject
;
245 BOOLEAN LockOperation
;
246 BOOLEAN DeletePending
;
249 BOOLEAN DeleteAccess
;
252 BOOLEAN SharedDelete
;
254 UNICODE_STRING FileName
;
255 LARGE_INTEGER CurrentByteOffset
;
261 PIO_COMPLETION_CONTEXT CompletionContext
;
262 } 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
;
395 typedef struct _DRIVER_OBJECT
399 PDEVICE_OBJECT DeviceObject
;
404 PDRIVER_EXTENSION DriverExtension
;
405 UNICODE_STRING DriverName
;
406 PUNICODE_STRING HardwareDatabase
;
407 PFAST_IO_DISPATCH FastIoDispatch
;
408 PDRIVER_INITIALIZE DriverInit
;
409 PDRIVER_STARTIO DriverStartIo
;
410 PDRIVER_UNLOAD DriverUnload
;
411 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
412 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
415 typedef struct _CONFIGURATION_INFORMATION
424 BOOLEAN AtDiskPrimaryAddressClaimed
;
425 BOOLEAN AtDiskSecondaryAddressClaimed
;
426 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
428 typedef VOID (*PIO_DPC_ROUTINE
)(PKDPC Dpc
,
429 PDEVICE_OBJECT DeviceObject
,
433 typedef VOID (*PIO_TIMER_ROUTINE
)(PDEVICE_OBJECT DeviceObject
,
436 #if WINDOWS_STRUCTS_DOESNT_ALREADY_DEFINE_THIS
437 typedef struct _PARTITION_INFORMATION
439 LARGE_INTEGER StartingOffset
;
440 LARGE_INTEGER PartitionLength
;
442 ULONG PartitionNumber
;
444 BOOLEAN BootIndicator
;
445 BOOLEAN RecognizedPartition
;
446 BOOLEAN RewritePartition
;
447 } PARTITION_INFORMATION
, *PPARTITION_INFORMATION
;
450 typedef struct _DRIVER_LAYOUT_INFORMATION
452 ULONG PartitionCount
;
454 PARTITION_INFORMATION PartitionEntry
[1];
455 } DRIVER_LAYOUT_INFORMATION
, *PDRIVER_LAYOUT_INFORMATION
;
461 typedef struct _IO_RESOURCE_DESCRIPTOR
465 UCHAR SharedDisposition
;
468 * Reserved for system use
475 * Reserved for system use
485 PHYSICAL_ADDRESS MinimumAddress
;
486 PHYSICAL_ADDRESS MaximumAddress
;
492 PHYSICAL_ADDRESS MinimumAddress
;
493 PHYSICAL_ADDRESS MaximumAddress
;
502 ULONG MinimumChannel
;
503 ULONG MaximumChannel
;
506 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
508 typedef struct _IO_RESOURCE_LIST
513 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
514 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
516 typedef struct _IO_RESOURCES_REQUIREMENTS_LIST
524 * System defined enum for the bus
526 INTERFACE_TYPE InterfaceType
;
531 ULONG AlternativeLists
;
532 IO_RESOURCE_LIST List
[1];
533 } IO_RESOURCES_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
538 UCHAR ShareDisposition
;
544 PHYSICAL_ADDRESS Start
;
555 PHYSICAL_ADDRESS Start
;
569 } DeviceSpecificData
;
571 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
578 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
579 } CM_PARTIAL_RESOURCE_LIST
;
583 INTERFACE_TYPE InterfaceType
;
585 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
586 } CM_FULL_RESOURCE_DESCRIPTOR
;
591 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
592 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
595 #endif __INCLUDE_DDK_IOTYPES_H