Added support for IRP_MJ_SCSI
[reactos.git] / reactos / include / ddk / iotypes.h
1 /* $Id: iotypes.h,v 1.33 2002/01/26 17:59:25 ekohl Exp $
2 *
3 */
4
5 #ifndef __INCLUDE_DDK_IOTYPES_H
6 #define __INCLUDE_DDK_IOTYPES_H
7
8 #include <ntos/disk.h>
9 #include <ntos/file.h>
10
11 #ifdef __NTOSKRNL__
12 extern POBJECT_TYPE EXPORTED IoAdapterObjectType;
13 extern POBJECT_TYPE EXPORTED IoDeviceHandlerObjectType;
14 extern POBJECT_TYPE EXPORTED IoDeviceObjectType;
15 extern POBJECT_TYPE EXPORTED IoDriverObjectType;
16 extern POBJECT_TYPE EXPORTED IoFileObjectType;
17 #else
18 extern POBJECT_TYPE IMPORTED IoAdapterObjectType;
19 extern POBJECT_TYPE IMPORTED IoDeviceHandlerObjectType;
20 extern POBJECT_TYPE IMPORTED IoDeviceObjectType;
21 extern POBJECT_TYPE IMPORTED IoDriverObjectType;
22 extern POBJECT_TYPE IMPORTED IoFileObjectType;
23 #endif
24
25 /*
26 * These are referenced before they can be fully defined
27 */
28 struct _DRIVER_OBJECT;
29 struct _FILE_OBJECT;
30 struct _DEVICE_OBJECT;
31 struct _IRP;
32 struct _IO_STATUS_BLOCK;
33 struct _SCSI_REQUEST_BLOCK;
34
35 /* SIMPLE TYPES *************************************************************/
36
37 enum
38 {
39 DeallocateObject,
40 KeepObject,
41 };
42
43
44 typedef enum _CREATE_FILE_TYPE
45 {
46 CreateFileTypeNone,
47 CreateFileTypeNamedPipe,
48 CreateFileTypeMailslot
49 } CREATE_FILE_TYPE;
50
51
52 typedef struct _SHARE_ACCESS
53 {
54 ULONG OpenCount;
55 ULONG Readers;
56 ULONG Writers;
57 ULONG Deleters;
58 ULONG SharedRead;
59 ULONG SharedWrite;
60 ULONG SharedDelete;
61 } SHARE_ACCESS, *PSHARE_ACCESS;
62
63 /* FUNCTION TYPES ************************************************************/
64
65 typedef VOID STDCALL
66 (*PDRIVER_REINITIALIZE)(struct _DRIVER_OBJECT* DriverObject,
67 PVOID Context,
68 ULONG Count);
69
70 typedef NTSTATUS STDCALL
71 (*PIO_QUERY_DEVICE_ROUTINE)(PVOID Context,
72 PUNICODE_STRING Pathname,
73 INTERFACE_TYPE BusType,
74 ULONG BusNumber,
75 PKEY_VALUE_FULL_INFORMATION* BI,
76 CONFIGURATION_TYPE ControllerType,
77 ULONG ControllerNumber,
78 PKEY_VALUE_FULL_INFORMATION* CI,
79 CONFIGURATION_TYPE PeripheralType,
80 ULONG PeripheralNumber,
81 PKEY_VALUE_FULL_INFORMATION* PI);
82
83 typedef NTSTATUS STDCALL
84 (*PIO_COMPLETION_ROUTINE)(struct _DEVICE_OBJECT* DeviceObject,
85 struct _IRP* Irp,
86 PVOID Context);
87
88 typedef VOID STDCALL
89 (*PIO_APC_ROUTINE)(PVOID ApcContext,
90 struct _IO_STATUS_BLOCK* IoStatusBlock,
91 ULONG Reserved);
92
93
94 /* STRUCTURE TYPES ***********************************************************/
95
96 typedef struct _ADAPTER_OBJECT ADAPTER_OBJECT, *PADAPTER_OBJECT;
97
98 /*
99 * PURPOSE: Special timer associated with each device
100 * NOTES: This is a guess
101 */
102 typedef struct _IO_TIMER
103 {
104 KTIMER timer;
105 KDPC dpc;
106 } IO_TIMER, *PIO_TIMER;
107
108 typedef struct _IO_SECURITY_CONTEXT
109 {
110 PSECURITY_QUALITY_OF_SERVICE SecurityQos;
111 PACCESS_STATE AccessState;
112 ACCESS_MASK DesiredAccess;
113 ULONG FullCreateOptions;
114 } IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT;
115
116
117 typedef struct _IO_RESOURCE_DESCRIPTOR
118 {
119 UCHAR Option;
120 UCHAR Type;
121 UCHAR ShareDisposition;
122
123 /*
124 * Reserved for system use
125 */
126 UCHAR Spare1;
127
128 USHORT Flags;
129
130 /*
131 * Reserved for system use
132 */
133 UCHAR Spare2;
134
135 union
136 {
137 struct
138 {
139 ULONG Length;
140 ULONG Alignment;
141 PHYSICAL_ADDRESS MinimumAddress;
142 PHYSICAL_ADDRESS MaximumAddress;
143 } Port;
144 struct
145 {
146 ULONG Length;
147 ULONG Alignment;
148 PHYSICAL_ADDRESS MinimumAddress;
149 PHYSICAL_ADDRESS MaximumAddress;
150 } Memory;
151 struct
152 {
153 ULONG MinimumVector;
154 ULONG MaximumVector;
155 } Interrupt;
156 struct
157 {
158 ULONG MinimumChannel;
159 ULONG MaximumChannel;
160 } Dma;
161 } u;
162 } IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
163
164 // IO_RESOURCE_DESCRIPTOR Options
165 #define IO_RESOURCE_REQUIRED 0x00
166 #define IO_RESOURCE_PREFERRED 0x01
167 #define IO_RESOURCE_DEFAULT 0x02
168 #define IO_RESOURCE_ALTERNATIVE 0x08
169
170 typedef struct _IO_RESOURCE_LIST
171 {
172 USHORT Version;
173 USHORT Revision;
174 ULONG Count;
175 IO_RESOURCE_DESCRIPTOR Descriptors[1];
176 } IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;
177
178 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST
179 {
180 /*
181 * List size in bytes
182 */
183 ULONG ListSize;
184
185 /*
186 * System defined enum for the bus
187 */
188 INTERFACE_TYPE InterfaceType;
189
190 ULONG BusNumber;
191 ULONG SlotNumber;
192 ULONG Reserved[3];
193 ULONG AlternativeLists;
194 IO_RESOURCE_LIST List[1];
195 } IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
196
197 typedef struct
198 {
199 UCHAR Type;
200 UCHAR ShareDisposition;
201 USHORT Flags;
202 union
203 {
204 struct
205 {
206 PHYSICAL_ADDRESS Start;
207 ULONG Length;
208 } Port;
209 struct
210 {
211 ULONG Level;
212 ULONG Vector;
213 ULONG Affinity;
214 } Interrupt;
215 struct
216 {
217 PHYSICAL_ADDRESS Start;
218 ULONG Length;
219 } Memory;
220 struct
221 {
222 ULONG Channel;
223 ULONG Port;
224 ULONG Reserved1;
225 } Dma;
226 struct
227 {
228 ULONG DataSize;
229 ULONG Reserved1;
230 ULONG Reserved2;
231 } DeviceSpecificData;
232 } u;
233 } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
234
235 typedef struct
236 {
237 USHORT Version;
238 USHORT Revision;
239 ULONG Count;
240 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
241 } CM_PARTIAL_RESOURCE_LIST;
242
243 typedef struct
244 {
245 INTERFACE_TYPE InterfaceType;
246 ULONG BusNumber;
247 CM_PARTIAL_RESOURCE_LIST PartialResourceList;
248 } CM_FULL_RESOURCE_DESCRIPTOR;
249
250 typedef struct
251 {
252 ULONG Count;
253 CM_FULL_RESOURCE_DESCRIPTOR List[1];
254 } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
255
256
257 /*
258 * PURPOSE: IRP stack location
259 */
260 typedef struct __attribute__((packed)) _IO_STACK_LOCATION
261 {
262 UCHAR MajorFunction;
263 UCHAR MinorFunction;
264 UCHAR Flags;
265 UCHAR Control;
266
267 union
268 {
269 struct
270 {
271 PIO_SECURITY_CONTEXT SecurityContext;
272 ULONG Options;
273 USHORT FileAttributes;
274 USHORT ShareAccess;
275 ULONG EaLength;
276 } Create;
277 struct
278 {
279 ULONG Length;
280 ULONG Key;
281 LARGE_INTEGER ByteOffset;
282 } Read;
283 struct
284 {
285 ULONG Length;
286 ULONG Key;
287 LARGE_INTEGER ByteOffset;
288 } Write;
289 struct
290 {
291 ULONG OutputBufferLength;
292 ULONG InputBufferLength;
293 ULONG IoControlCode;
294 PVOID Type3InputBuffer;
295 } DeviceIoControl;
296 struct
297 {
298 ULONG OutputBufferLength;
299 ULONG InputBufferLength;
300 ULONG IoControlCode;
301 PVOID Type3InputBuffer;
302 } FileSystemControl;
303 struct
304 {
305 struct _VPB* Vpb;
306 struct _DEVICE_OBJECT* DeviceObject;
307 } Mount;
308 struct
309 {
310 ULONG Length;
311 FILE_INFORMATION_CLASS FileInformationClass;
312 } QueryFile;
313 struct
314 {
315 ULONG Length;
316 FS_INFORMATION_CLASS FsInformationClass;
317 } QueryVolume;
318 struct
319 {
320 ULONG Length;
321 FS_INFORMATION_CLASS FsInformationClass;
322 } SetVolume;
323 struct
324 {
325 ULONG Length;
326 FILE_INFORMATION_CLASS FileInformationClass;
327 struct _FILE_OBJECT* FileObject;
328 union
329 {
330 struct
331 {
332 BOOLEAN ReplaceIfExists;
333 BOOLEAN AdvanceOnly;
334 } d;
335 ULONG ClusterCount;
336 HANDLE DeleteHandle;
337 } u;
338 } SetFile;
339 struct
340 {
341 ULONG Length;
342 PUNICODE_STRING FileName;
343 FILE_INFORMATION_CLASS FileInformationClass;
344 ULONG FileIndex;
345 } QueryDirectory;
346
347 // Parameters for IRP_MN_QUERY_DEVICE_RELATIONS
348 struct
349 {
350 DEVICE_RELATION_TYPE Type;
351 } QueryDeviceRelations;
352
353 // Parameters for IRP_MN_QUERY_INTERFACE
354 struct
355 {
356 CONST GUID *InterfaceType;
357 USHORT Size;
358 USHORT Version;
359 PINTERFACE Interface;
360 PVOID InterfaceSpecificData;
361 } QueryInterface;
362
363 // Parameters for IRP_MN_QUERY_CAPABILITIES
364 struct
365 {
366 PDEVICE_CAPABILITIES Capabilities;
367 } DeviceCapabilities;
368
369 // Parameters for IRP_MN_QUERY_ID
370 struct
371 {
372 BUS_QUERY_ID_TYPE IdType;
373 } QueryId;
374
375 // Parameters for IRP_MN_QUERY_DEVICE_TEXT
376 struct
377 {
378 DEVICE_TEXT_TYPE DeviceTextType;
379 LCID LocaleId;
380 } QueryDeviceText;
381
382 // Parameters for IRP_MN_DEVICE_USAGE_NOTIFICATION
383 struct
384 {
385 BOOLEAN InPath;
386 BOOLEAN Reserved[3];
387 DEVICE_USAGE_NOTIFICATION_TYPE Type;
388 } UsageNotification;
389
390 // Parameters for IRP_MN_WAIT_WAKE
391 struct
392 {
393 SYSTEM_POWER_STATE PowerState;
394 } WaitWake;
395
396 // Parameter for IRP_MN_POWER_SEQUENCE
397 struct
398 {
399 PPOWER_SEQUENCE PowerSequence;
400 } PowerSequence;
401
402 // Parameters for IRP_MN_SET_POWER and IRP_MN_QUERY_POWER
403 struct
404 {
405 ULONG SystemContext;
406 POWER_STATE_TYPE Type;
407 POWER_STATE State;
408 POWER_ACTION ShutdownType;
409 } Power;
410
411 // Parameters for IRP_MN_START_DEVICE
412 struct
413 {
414 PCM_RESOURCE_LIST AllocatedResources;
415 PCM_RESOURCE_LIST AllocatedResourcesTranslated;
416 } StartDevice;
417
418 // Parameters for IRP_MN_SCSI_CLASS
419 struct
420 {
421 struct _SCSI_REQUEST_BLOCK *Srb;
422 } Scsi;
423
424 } Parameters;
425
426 struct _DEVICE_OBJECT* DeviceObject;
427 struct _FILE_OBJECT* FileObject;
428
429 PIO_COMPLETION_ROUTINE CompletionRoutine;
430 PVOID CompletionContext;
431
432 } __attribute__((packed)) IO_STACK_LOCATION, *PIO_STACK_LOCATION;
433
434
435 typedef struct _IO_STATUS_BLOCK
436 {
437 NTSTATUS Status;
438 ULONG Information;
439 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
440
441
442 typedef struct _IO_PIPE_CREATE_BUFFER
443 {
444 BOOLEAN WriteModeMessage;
445 BOOLEAN ReadModeMessage;
446 BOOLEAN NonBlocking;
447 ULONG MaxInstances;
448 ULONG InBufferSize;
449 ULONG OutBufferSize;
450 LARGE_INTEGER TimeOut;
451 } IO_PIPE_CREATE_BUFFER, *PIO_PIPE_CREATE_BUFFER;
452
453
454 typedef struct _IO_MAILSLOT_CREATE_BUFFER
455 {
456 ULONG Param; /* ?? */
457 ULONG MaxMessageSize;
458 LARGE_INTEGER TimeOut;
459 } IO_MAILSLOT_CREATE_BUFFER, *PIO_MAILSLOT_CREATE_BUFFER;
460
461
462 /*
463 * Driver entry point declaration
464 */
465 typedef NTSTATUS STDCALL
466 (*PDRIVER_INITIALIZE)(struct _DRIVER_OBJECT* DriverObject,
467 PUNICODE_STRING RegistryPath);
468
469 /*
470 * Driver cancel declaration
471 */
472 typedef NTSTATUS STDCALL
473 (*PDRIVER_CANCEL)(struct _DEVICE_OBJECT* DeviceObject,
474 struct _IRP* RegistryPath);
475
476
477 typedef struct _SECTION_OBJECT_POINTERS
478 {
479 PVOID DataSectionObject;
480 PVOID SharedCacheMap;
481 PVOID ImageSectionObject;
482 } SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
483
484 typedef struct _IO_COMPLETION_CONTEXT
485 {
486 PVOID Port;
487 ULONG Key;
488 } IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT;
489
490 #define FO_FILE_OPEN 0x00000001
491 #define FO_SYNCHRONOUS_IO 0x00000002
492 #define FO_ALERTABLE_IO 0x00000004
493 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
494 #define FO_WRITE_THROUGH 0x00000010
495 #define FO_SEQUENTIAL_ONLY 0x00000020
496 #define FO_CACHE_SUPPORTED 0x00000040
497 #define FO_NAMED_PIPE 0x00000080
498 #define FO_STREAM_FILE 0x00000100
499 #define FO_MAILSLOT 0x00000200
500 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
501 #define FO_DIRECT_DEVICE_OPEN 0x00000800
502 #define FO_FILE_MODIFIED 0x00001000
503 #define FO_FILE_SIZE_CHANGED 0x00002000
504 #define FO_CLEANUP_COMPLETE 0x00004000
505 #define FO_TEMPORARY_FILE 0x00008000
506 #define FO_DELETE_ON_CLOSE 0x00010000
507 #define FO_OPENED_CASE_SENSITIVE 0x00020000
508 #define FO_HANDLE_CREATED 0x00040000
509 #define FO_FILE_FAST_IO_READ 0x00080000
510
511 /*
512 * ReactOS specific flags
513 */
514 #define FO_DIRECT_CACHE_READ 0x72000001
515 #define FO_DIRECT_CACHE_WRITE 0x72000002
516 #define FO_DIRECT_CACHE_PAGING_READ 0x72000004
517 #define FO_DIRECT_CACHE_PAGING_WRITE 0x72000008
518 #define FO_FCB_IS_VALID 0x72000010
519
520 typedef struct _FILE_OBJECT
521 {
522 CSHORT Type;
523 CSHORT Size;
524 struct _DEVICE_OBJECT* DeviceObject;
525 struct _VPB* Vpb;
526 PVOID FsContext;
527 PVOID FsContext2;
528 PSECTION_OBJECT_POINTERS SectionObjectPointers;
529 PVOID PrivateCacheMap;
530 NTSTATUS FinalStatus;
531 struct _FILE_OBJECT* RelatedFileObject;
532 BOOLEAN LockOperation;
533 BOOLEAN DeletePending;
534 BOOLEAN ReadAccess;
535 BOOLEAN WriteAccess;
536 BOOLEAN DeleteAccess;
537 BOOLEAN SharedRead;
538 BOOLEAN SharedWrite;
539 BOOLEAN SharedDelete;
540 ULONG Flags;
541 UNICODE_STRING FileName;
542 LARGE_INTEGER CurrentByteOffset;
543 ULONG Waiters;
544 ULONG Busy;
545 PVOID LastLock;
546 KEVENT Lock;
547 KEVENT Event;
548 PIO_COMPLETION_CONTEXT CompletionContext;
549 } FILE_OBJECT, *PFILE_OBJECT;
550
551
552 typedef struct _IRP
553 {
554 CSHORT Type;
555 USHORT Size;
556 PMDL MdlAddress;
557 ULONG Flags;
558 union
559 {
560 struct _IRP* MasterIrp;
561 LONG IrpCount;
562 PVOID SystemBuffer;
563 } AssociatedIrp;
564 LIST_ENTRY ThreadListEntry;
565 IO_STATUS_BLOCK IoStatus;
566 KPROCESSOR_MODE RequestorMode;
567 BOOLEAN PendingReturned;
568 CHAR StackCount;
569 CHAR CurrentLocation;
570 BOOLEAN Cancel;
571 KIRQL CancelIrql;
572 CCHAR ApcEnvironment;// CCHAR or PVOID?
573 UCHAR AllocationFlags;//UCHAR or ULONG?
574 PIO_STATUS_BLOCK UserIosb;
575 PKEVENT UserEvent;
576 union
577 {
578 struct
579 {
580 PIO_APC_ROUTINE UserApcRoutine;
581 PVOID UserApcContext;
582 } AsynchronousParameters;
583 LARGE_INTEGER AllocationSize;
584 } Overlay;
585 PDRIVER_CANCEL CancelRoutine;
586 PVOID UserBuffer;
587 union
588 {
589 struct
590 {
591 union {
592 KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
593 PVOID DriverContext[4];
594 };
595 struct _ETHREAD* Thread;
596 PCHAR AuxiliaryBuffer;
597 LIST_ENTRY ListEntry;
598 struct _IO_STACK_LOCATION* CurrentStackLocation;
599 PFILE_OBJECT OriginalFileObject;
600 } Overlay;
601 KAPC Apc;
602 ULONG CompletionKey;
603 } Tail;
604 IO_STACK_LOCATION Stack[1];
605 } IRP, *PIRP;
606
607 #define VPB_MOUNTED 0x00000001
608 #define VPB_LOCKED 0x00000002
609 #define VPB_PERSISTENT 0x00000004
610 #define VPB_REMOVE_PENDING 0x00000008
611
612 typedef struct _VPB
613 {
614 CSHORT Type;
615 CSHORT Size;
616 USHORT Flags;
617 USHORT VolumeLabelLength;
618 struct _DEVICE_OBJECT* DeviceObject;
619 struct _DEVICE_OBJECT* RealDevice;
620 ULONG SerialNumber;
621 ULONG ReferenceCount;
622 WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH];
623 } VPB, *PVPB;
624
625
626 typedef struct _DEVICE_OBJECT
627 {
628 CSHORT Type;
629 CSHORT Size;
630 LONG ReferenceCount;
631 struct _DRIVER_OBJECT* DriverObject;
632 struct _DEVICE_OBJECT* NextDevice;
633 struct _DEVICE_OBJECT* AttachedDevice;
634 struct _IRP* CurrentIrp;
635 PIO_TIMER Timer;
636 ULONG Flags;
637 ULONG Characteristics;
638 PVPB Vpb;
639 PVOID DeviceExtension;
640 DEVICE_TYPE DeviceType;
641 CCHAR StackSize;
642 union
643 {
644 LIST_ENTRY ListHead;
645 WAIT_CONTEXT_BLOCK Wcb;
646 } Queue;
647 ULONG AlignmentRequirement;
648 KDEVICE_QUEUE DeviceQueue;
649 KDPC Dpc;
650 ULONG ActiveThreadCount;
651 PSECURITY_DESCRIPTOR SecurityDescriptor;
652 KEVENT DeviceLock;
653 USHORT SectorSize;
654 USHORT Spare1;
655 struct _DEVOBJ_EXTENSION* DeviceObjectExtension;
656 PVOID Reserved;
657 } DEVICE_OBJECT, *PDEVICE_OBJECT;
658
659 /*
660 * Dispatch routine type declaration
661 */
662 typedef NTSTATUS STDCALL
663 (*PDRIVER_DISPATCH)(struct _DEVICE_OBJECT*,
664 IRP*);
665
666
667 /*
668 * Fast i/o routine type declaration
669 */
670 //typedef NTSTATUS (*PFAST_IO_DISPATCH)(struct _DEVICE_OBJECT*, IRP*);
671 //FIXME : this type is ok for read and write, but not for all routines
672 typedef BOOLEAN STDCALL
673 (*PFAST_IO_ROUTINE)(IN struct _FILE_OBJECT *FileObject,
674 IN PLARGE_INTEGER FileOffset,
675 IN ULONG Length,
676 IN BOOLEAN Wait,
677 IN ULONG LockKey,
678 OUT PVOID Buffer,
679 OUT PIO_STATUS_BLOCK IoStatus,
680 IN struct _DEVICE_OBJECT *DeviceObject);
681
682 typedef struct _FAST_IO_DISPATCH {
683 ULONG SizeOfFastIoDispatch;
684 PFAST_IO_ROUTINE FastIoCheckIfPossible;
685 PFAST_IO_ROUTINE FastIoRead;
686 PFAST_IO_ROUTINE FastIoWrite;
687 PFAST_IO_ROUTINE FastIoQueryBasicInfo;
688 PFAST_IO_ROUTINE FastIoQueryStandardInfo;
689 PFAST_IO_ROUTINE FastIoLock;
690 PFAST_IO_ROUTINE FastIoUnlockSingle;
691 PFAST_IO_ROUTINE FastIoUnlockAll;
692 PFAST_IO_ROUTINE FastIoUnlockAllByKey;
693 PFAST_IO_ROUTINE FastIoDeviceControl;
694 PFAST_IO_ROUTINE AcquireFileForNtCreateSection;
695 PFAST_IO_ROUTINE ReleaseFileForNtCreateSection;
696 PFAST_IO_ROUTINE FastIoDetachDevice;
697 PFAST_IO_ROUTINE FastIoQueryNetworkOpenInfo;
698 PFAST_IO_ROUTINE AcquireForModWrite;
699 PFAST_IO_ROUTINE MdlRead;
700 PFAST_IO_ROUTINE MdlReadComplete;
701 PFAST_IO_ROUTINE PrepareMdlWrite;
702 PFAST_IO_ROUTINE MdlWriteComplete;
703 PFAST_IO_ROUTINE FastIoReadCompressed;
704 PFAST_IO_ROUTINE FastIoWriteCompressed;
705 PFAST_IO_ROUTINE MdlReadCompleteCompressed;
706 PFAST_IO_ROUTINE MdlWriteCompleteCompressed;
707 PFAST_IO_ROUTINE FastIoQueryOpen;
708 PFAST_IO_ROUTINE ReleaseForModWrite;
709 PFAST_IO_ROUTINE AcquireForCcFlush;
710 PFAST_IO_ROUTINE ReleaseForCcFlush;
711 } FAST_IO_DISPATCH, *PFAST_IO_DISPATCH;
712
713 /*
714 * Dispatch routine type declaration
715 */
716 typedef VOID STDCALL
717 (*PDRIVER_STARTIO)(IN PDEVICE_OBJECT DeviceObject,
718 IN PIRP Irp);
719
720 /*
721 * Dispatch routine type declaration
722 */
723 typedef NTSTATUS STDCALL
724 (*PDRIVER_UNLOAD)(struct _DRIVER_OBJECT*);
725
726 typedef NTSTATUS STDCALL
727 (*PDRIVER_ADD_DEVICE)(IN struct _DRIVER_OBJECT *DriverObject,
728 IN struct _DEVICE_OBJECT *PhysicalDeviceObject);
729
730
731 typedef struct _DRIVER_EXTENSION
732 {
733 struct _DRIVER_OBJECT* DriverObject;
734 PDRIVER_ADD_DEVICE AddDevice;
735 ULONG Count;
736 UNICODE_STRING ServiceKeyName;
737 } DRIVER_EXTENSION, *PDRIVER_EXTENSION;
738
739 #if 0
740 typedef
741 struct _FAST_IO_DISPATCH_TABLE
742 {
743 ULONG Count;
744 PFAST_IO_DISPATCH Dispatch;
745
746 } FAST_IO_DISPATCH_TABLE, * PFAST_IO_DISPATCH_TABLE;
747 #endif
748
749 typedef struct _DRIVER_OBJECT
750 {
751 CSHORT Type;
752 CSHORT Size;
753 PDEVICE_OBJECT DeviceObject;
754 ULONG Flags;
755 PVOID DriverStart;
756 ULONG DriverSize;
757 PVOID DriverSection;
758 PDRIVER_EXTENSION DriverExtension;
759 UNICODE_STRING DriverName;
760 PUNICODE_STRING HardwareDatabase;
761 #if 0
762 PFAST_IO_DISPATCH_TABLE FastIoDispatch;
763 #else
764 PFAST_IO_DISPATCH FastIoDispatch;
765 #endif
766 PDRIVER_INITIALIZE DriverInit;
767 PDRIVER_STARTIO DriverStartIo;
768 PDRIVER_UNLOAD DriverUnload;
769 PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
770 } DRIVER_OBJECT, *PDRIVER_OBJECT;
771
772
773 typedef struct _CONFIGURATION_INFORMATION
774 {
775 ULONG DiskCount;
776 ULONG FloppyCount;
777 ULONG CDRomCount;
778 ULONG TapeCount;
779 ULONG ScsiPortCount;
780 ULONG SerialCount;
781 ULONG ParallelCount;
782 BOOLEAN AtDiskPrimaryAddressClaimed;
783 BOOLEAN AtDiskSecondaryAddressClaimed;
784 } CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
785
786 typedef VOID STDCALL
787 (*PIO_DPC_ROUTINE)(PKDPC Dpc,
788 PDEVICE_OBJECT DeviceObject,
789 PIRP Irp,
790 PVOID Context);
791
792 typedef VOID STDCALL
793 (*PIO_TIMER_ROUTINE)(PDEVICE_OBJECT DeviceObject,
794 PVOID Context);
795
796 #if WINDOWS_STRUCTS_DOESNT_ALREADY_DEFINE_THIS
797 typedef struct _PARTITION_INFORMATION
798 {
799 LARGE_INTEGER StartingOffset;
800 LARGE_INTEGER PartitionLength;
801 ULONG HiddenSectors;
802 ULONG PartitionNumber;
803 UCHAR PartitionType;
804 BOOLEAN BootIndicator;
805 BOOLEAN RecognizedPartition;
806 BOOLEAN RewritePartition;
807 } PARTITION_INFORMATION, *PPARTITION_INFORMATION;
808 #endif
809
810 typedef struct _DRIVER_LAYOUT_INFORMATION
811 {
812 ULONG PartitionCount;
813 ULONG Signature;
814 PARTITION_INFORMATION PartitionEntry[1];
815 } DRIVER_LAYOUT_INFORMATION, *PDRIVER_LAYOUT_INFORMATION;
816
817
818 typedef IO_ALLOCATION_ACTION STDCALL
819 (*PDRIVER_CONTROL)(PDEVICE_OBJECT DeviceObject,
820 PIRP Irp,
821 PVOID MapRegisterBase,
822 PVOID Context);
823 #if (_WIN32_WINNT >= 0x0400)
824 typedef VOID STDCALL
825 (*PFSDNOTIFICATIONPROC)(IN PDEVICE_OBJECT PtrTargetFileSystemDeviceObject,
826 IN BOOLEAN DriverActive);
827 #endif // (_WIN32_WINNT >= 0x0400)
828
829 #endif /* __INCLUDE_DDK_IOTYPES_H */