1 /* $Id: iotypes.h,v 1.9 1999/12/26 20:21:02 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
;
272 struct _IRP
* MasterIrp
;
276 LIST_ENTRY ThreadListEntry
;
277 IO_STATUS_BLOCK IoStatus
;
278 KPROCESSOR_MODE RequestorMode
;
279 BOOLEAN PendingReturned
;
282 PDRIVER_CANCEL CancelRoutine
;
284 PVOID ApcEnvironment
;
285 ULONG AllocationFlags
;
286 PIO_STATUS_BLOCK UserIosb
;
292 PIO_APC_ROUTINE UserApcRoutine
;
293 PVOID UserApcContext
;
294 } AsynchronousParameters
;
295 LARGE_INTEGER AllocationSize
;
301 KDEVICE_QUEUE_ENTRY DeviceQueueEntry
;
302 struct _ETHREAD
* Thread
;
303 PCHAR AuxiliaryBuffer
;
304 LIST_ENTRY ListEntry
;
305 struct _IO_STACK_LOCATION
* CurrentStackLocation
;
306 PFILE_OBJECT OriginalFileObject
;
312 CHAR CurrentLocation
;
313 IO_STACK_LOCATION Stack
[1];
316 #define VPB_MOUNTED 0x00000001
317 #define VPB_LOCKED 0x00000002
318 #define VPB_PERSISTENT 0x00000004
319 #define VPB_REMOVE_PENDING 0x00000008
326 USHORT VolumeLabelLength
;
327 struct _DEVICE_OBJECT
* DeviceObject
;
328 struct _DEVICE_OBJECT
* RealDevice
;
330 ULONG ReferenceCount
;
331 WCHAR VolumeLabel
[MAXIMUM_VOLUME_LABEL_LENGTH
];
335 typedef struct _DEVICE_OBJECT
340 struct _DRIVER_OBJECT
* DriverObject
;
341 struct _DEVICE_OBJECT
* NextDevice
;
342 struct _DEVICE_OBJECT
* AttachedDevice
;
343 struct _IRP
* CurrentIrp
;
346 ULONG Characteristics
;
348 PVOID DeviceExtension
;
349 DEVICE_TYPE DeviceType
;
354 WAIT_CONTEXT_BLOCK Wcb
;
356 ULONG AlignmentRequirement
;
357 KDEVICE_QUEUE DeviceQueue
;
359 ULONG ActiveThreadCount
;
360 PSECURITY_DESCRIPTOR SecurityDescriptor
;
364 struct _DEVOBJ_EXTENSION
* DeviceObjectExtension
;
366 } DEVICE_OBJECT
, *PDEVICE_OBJECT
;
369 * Dispatch routine type declaration
371 typedef NTSTATUS (*PDRIVER_DISPATCH
)(struct _DEVICE_OBJECT
*, IRP
*);
374 * Fast i/o routine type declaration
376 typedef NTSTATUS (*PFAST_IO_DISPATCH
)(struct _DEVICE_OBJECT
*, IRP
*);
379 * Dispatch routine type declaration
381 typedef VOID (*PDRIVER_STARTIO
)(struct _DEVICE_OBJECT
*, IRP
*);
384 * Dispatch routine type declaration
386 typedef NTSTATUS (*PDRIVER_UNLOAD
)(struct _DRIVER_OBJECT
*);
388 typedef struct _DRIVER_EXTENSION
390 struct _DRIVER_OBJECT
* DriverObject
;
391 PDRIVER_ADD_DEVICE AddDevice
;
393 UNICODE_STRING ServiceKeyName
;
394 } DRIVER_EXTENSION
, *PDRIVER_EXTENSION
;
396 typedef struct _DRIVER_OBJECT
400 PDEVICE_OBJECT DeviceObject
;
405 PDRIVER_EXTENSION DriverExtension
;
406 UNICODE_STRING DriverName
;
407 PUNICODE_STRING HardwareDatabase
;
408 PFAST_IO_DISPATCH FastIoDispatch
;
409 PDRIVER_INITIALIZE DriverInit
;
410 PDRIVER_STARTIO DriverStartIo
;
411 PDRIVER_UNLOAD DriverUnload
;
412 PDRIVER_DISPATCH MajorFunction
[IRP_MJ_MAXIMUM_FUNCTION
+ 1];
413 } DRIVER_OBJECT
, *PDRIVER_OBJECT
;
416 typedef struct _CONFIGURATION_INFORMATION
425 BOOLEAN AtDiskPrimaryAddressClaimed
;
426 BOOLEAN AtDiskSecondaryAddressClaimed
;
427 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
429 typedef VOID (*PIO_DPC_ROUTINE
)(PKDPC Dpc
,
430 PDEVICE_OBJECT DeviceObject
,
434 typedef VOID (*PIO_TIMER_ROUTINE
)(PDEVICE_OBJECT DeviceObject
,
437 #if WINDOWS_STRUCTS_DOESNT_ALREADY_DEFINE_THIS
438 typedef struct _PARTITION_INFORMATION
440 LARGE_INTEGER StartingOffset
;
441 LARGE_INTEGER PartitionLength
;
443 ULONG PartitionNumber
;
445 BOOLEAN BootIndicator
;
446 BOOLEAN RecognizedPartition
;
447 BOOLEAN RewritePartition
;
448 } PARTITION_INFORMATION
, *PPARTITION_INFORMATION
;
451 typedef struct _DRIVER_LAYOUT_INFORMATION
453 ULONG PartitionCount
;
455 PARTITION_INFORMATION PartitionEntry
[1];
456 } DRIVER_LAYOUT_INFORMATION
, *PDRIVER_LAYOUT_INFORMATION
;
462 typedef struct _IO_RESOURCE_DESCRIPTOR
466 UCHAR SharedDisposition
;
469 * Reserved for system use
476 * Reserved for system use
486 PHYSICAL_ADDRESS MinimumAddress
;
487 PHYSICAL_ADDRESS MaximumAddress
;
493 PHYSICAL_ADDRESS MinimumAddress
;
494 PHYSICAL_ADDRESS MaximumAddress
;
503 ULONG MinimumChannel
;
504 ULONG MaximumChannel
;
507 } IO_RESOURCE_DESCRIPTOR
, *PIO_RESOURCE_DESCRIPTOR
;
509 typedef struct _IO_RESOURCE_LIST
514 IO_RESOURCE_DESCRIPTOR Descriptors
[1];
515 } IO_RESOURCE_LIST
, *PIO_RESOURCE_LIST
;
517 typedef struct _IO_RESOURCES_REQUIREMENTS_LIST
525 * System defined enum for the bus
527 INTERFACE_TYPE InterfaceType
;
532 ULONG AlternativeLists
;
533 IO_RESOURCE_LIST List
[1];
534 } IO_RESOURCES_REQUIREMENTS_LIST
, *PIO_RESOURCE_REQUIREMENTS_LIST
;
539 UCHAR ShareDisposition
;
545 PHYSICAL_ADDRESS Start
;
556 PHYSICAL_ADDRESS Start
;
570 } DeviceSpecificData
;
572 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
579 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
580 } CM_PARTIAL_RESOURCE_LIST
;
584 INTERFACE_TYPE InterfaceType
;
586 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
587 } CM_FULL_RESOURCE_DESCRIPTOR
;
592 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
593 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
596 #endif __INCLUDE_DDK_IOTYPES_H