5cff95c97962484a7f6cd415400f8b78eaeff957
[reactos.git] / reactos / include / ddk / iotypes.h
1 /* $Id: iotypes.h,v 1.43 2002/10/05 10:53:36 dwelch 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 } __attribute__((packed)) Port;
209 struct
210 {
211 ULONG Level;
212 ULONG Vector;
213 ULONG Affinity;
214 } __attribute__((packed))Interrupt;
215 struct
216 {
217 PHYSICAL_ADDRESS Start;
218 ULONG Length;
219 } __attribute__((packed))Memory;
220 struct
221 {
222 ULONG Channel;
223 ULONG Port;
224 ULONG Reserved1;
225 } __attribute__((packed))Dma;
226 struct
227 {
228 ULONG DataSize;
229 ULONG Reserved1;
230 ULONG Reserved2;
231 } __attribute__((packed))DeviceSpecificData;
232 } __attribute__((packed)) u;
233 } __attribute__((packed)) 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 } __attribute__((packed))CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
242
243 typedef struct
244 {
245 INTERFACE_TYPE InterfaceType;
246 ULONG BusNumber;
247 CM_PARTIAL_RESOURCE_LIST PartialResourceList;
248 } __attribute__((packed)) 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 } MountVolume;
308 struct
309 {
310 struct _VPB* Vpb;
311 struct _DEVICE_OBJECT* DeviceObject;
312 } VerifyVolume;
313 struct
314 {
315 ULONG Length;
316 FILE_INFORMATION_CLASS FileInformationClass;
317 } QueryFile;
318 struct
319 {
320 ULONG Length;
321 FS_INFORMATION_CLASS FsInformationClass;
322 } QueryVolume;
323 struct
324 {
325 ULONG Length;
326 FS_INFORMATION_CLASS FsInformationClass;
327 } SetVolume;
328 struct
329 {
330 ULONG Length;
331 FILE_INFORMATION_CLASS FileInformationClass;
332 struct _FILE_OBJECT* FileObject;
333 union
334 {
335 struct
336 {
337 BOOLEAN ReplaceIfExists;
338 BOOLEAN AdvanceOnly;
339 } d;
340 ULONG ClusterCount;
341 HANDLE DeleteHandle;
342 } u;
343 } SetFile;
344 struct
345 {
346 ULONG Length;
347 PUNICODE_STRING FileName;
348 FILE_INFORMATION_CLASS FileInformationClass;
349 ULONG FileIndex;
350 } QueryDirectory;
351
352 // Parameters for IRP_MN_QUERY_DEVICE_RELATIONS
353 struct
354 {
355 DEVICE_RELATION_TYPE Type;
356 } QueryDeviceRelations;
357
358 // Parameters for IRP_MN_QUERY_INTERFACE
359 struct
360 {
361 CONST GUID *InterfaceType;
362 USHORT Size;
363 USHORT Version;
364 PINTERFACE Interface;
365 PVOID InterfaceSpecificData;
366 } QueryInterface;
367
368 // Parameters for IRP_MN_QUERY_CAPABILITIES
369 struct
370 {
371 PDEVICE_CAPABILITIES Capabilities;
372 } DeviceCapabilities;
373
374 // Parameters for IRP_MN_FILTER_RESOURCE_REQUIREMENTS
375 struct
376 {
377 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
378 } FilterResourceRequirements;
379
380 // Parameters for IRP_MN_QUERY_ID
381 struct
382 {
383 BUS_QUERY_ID_TYPE IdType;
384 } QueryId;
385
386 // Parameters for IRP_MN_QUERY_DEVICE_TEXT
387 struct
388 {
389 DEVICE_TEXT_TYPE DeviceTextType;
390 LCID LocaleId;
391 } QueryDeviceText;
392
393 // Parameters for IRP_MN_DEVICE_USAGE_NOTIFICATION
394 struct
395 {
396 BOOLEAN InPath;
397 BOOLEAN Reserved[3];
398 DEVICE_USAGE_NOTIFICATION_TYPE Type;
399 } UsageNotification;
400
401 // Parameters for IRP_MN_WAIT_WAKE
402 struct
403 {
404 SYSTEM_POWER_STATE PowerState;
405 } WaitWake;
406
407 // Parameter for IRP_MN_POWER_SEQUENCE
408 struct
409 {
410 PPOWER_SEQUENCE PowerSequence;
411 } PowerSequence;
412
413 // Parameters for IRP_MN_SET_POWER and IRP_MN_QUERY_POWER
414 struct
415 {
416 ULONG SystemContext;
417 POWER_STATE_TYPE Type;
418 POWER_STATE State;
419 POWER_ACTION ShutdownType;
420 } Power;
421
422 // Parameters for IRP_MN_START_DEVICE
423 struct
424 {
425 PCM_RESOURCE_LIST AllocatedResources;
426 PCM_RESOURCE_LIST AllocatedResourcesTranslated;
427 } StartDevice;
428
429 /* Parameters for IRP_MN_SCSI_CLASS */
430 struct
431 {
432 struct _SCSI_REQUEST_BLOCK *Srb;
433 } Scsi;
434
435 /* Paramters for other calls */
436 struct
437 {
438 PVOID Argument1;
439 PVOID Argument2;
440 PVOID Argument3;
441 PVOID Argument4;
442 } Others;
443 } Parameters;
444
445 struct _DEVICE_OBJECT* DeviceObject;
446 struct _FILE_OBJECT* FileObject;
447
448 PIO_COMPLETION_ROUTINE CompletionRoutine;
449 PVOID CompletionContext;
450
451 } __attribute__((packed)) IO_STACK_LOCATION, *PIO_STACK_LOCATION;
452
453
454 typedef struct _IO_STATUS_BLOCK
455 {
456 NTSTATUS Status;
457 ULONG Information;
458 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
459
460
461 typedef struct _IO_PIPE_CREATE_BUFFER
462 {
463 BOOLEAN WriteModeMessage;
464 BOOLEAN ReadModeMessage;
465 BOOLEAN NonBlocking;
466 ULONG MaxInstances;
467 ULONG InBufferSize;
468 ULONG OutBufferSize;
469 LARGE_INTEGER TimeOut;
470 } IO_PIPE_CREATE_BUFFER, *PIO_PIPE_CREATE_BUFFER;
471
472
473 typedef struct _IO_MAILSLOT_CREATE_BUFFER
474 {
475 ULONG Param; /* ?? */
476 ULONG MaxMessageSize;
477 LARGE_INTEGER TimeOut;
478 } IO_MAILSLOT_CREATE_BUFFER, *PIO_MAILSLOT_CREATE_BUFFER;
479
480
481 /*
482 * Driver entry point declaration
483 */
484 typedef NTSTATUS STDCALL
485 (*PDRIVER_INITIALIZE)(struct _DRIVER_OBJECT* DriverObject,
486 PUNICODE_STRING RegistryPath);
487
488 /*
489 * Driver cancel declaration
490 */
491 typedef NTSTATUS STDCALL
492 (*PDRIVER_CANCEL)(struct _DEVICE_OBJECT* DeviceObject,
493 struct _IRP* RegistryPath);
494
495
496 typedef struct _SECTION_OBJECT_POINTERS
497 {
498 PVOID DataSectionObject;
499 PVOID SharedCacheMap;
500 PVOID ImageSectionObject;
501 } SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
502
503 typedef struct _IO_COMPLETION_CONTEXT
504 {
505 PVOID Port;
506 ULONG Key;
507 } IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT;
508
509 #define FO_FILE_OPEN 0x00000001
510 #define FO_SYNCHRONOUS_IO 0x00000002
511 #define FO_ALERTABLE_IO 0x00000004
512 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
513 #define FO_WRITE_THROUGH 0x00000010
514 #define FO_SEQUENTIAL_ONLY 0x00000020
515 #define FO_CACHE_SUPPORTED 0x00000040
516 #define FO_NAMED_PIPE 0x00000080
517 #define FO_STREAM_FILE 0x00000100
518 #define FO_MAILSLOT 0x00000200
519 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
520 #define FO_DIRECT_DEVICE_OPEN 0x00000800
521 #define FO_FILE_MODIFIED 0x00001000
522 #define FO_FILE_SIZE_CHANGED 0x00002000
523 #define FO_CLEANUP_COMPLETE 0x00004000
524 #define FO_TEMPORARY_FILE 0x00008000
525 #define FO_DELETE_ON_CLOSE 0x00010000
526 #define FO_OPENED_CASE_SENSITIVE 0x00020000
527 #define FO_HANDLE_CREATED 0x00040000
528 #define FO_FILE_FAST_IO_READ 0x00080000
529
530 /*
531 * ReactOS specific flags
532 */
533 #define FO_DIRECT_CACHE_READ 0x72000001
534 #define FO_DIRECT_CACHE_WRITE 0x72000002
535 #define FO_DIRECT_CACHE_PAGING_READ 0x72000004
536 #define FO_DIRECT_CACHE_PAGING_WRITE 0x72000008
537 #define FO_FCB_IS_VALID 0x72000010
538
539 typedef struct _FILE_OBJECT
540 {
541 CSHORT Type;
542 CSHORT Size;
543 struct _DEVICE_OBJECT* DeviceObject;
544 struct _VPB* Vpb;
545 PVOID FsContext;
546 PVOID FsContext2;
547 PSECTION_OBJECT_POINTERS SectionObjectPointers;
548 PVOID PrivateCacheMap;
549 NTSTATUS FinalStatus;
550 struct _FILE_OBJECT* RelatedFileObject;
551 BOOLEAN LockOperation;
552 BOOLEAN DeletePending;
553 BOOLEAN ReadAccess;
554 BOOLEAN WriteAccess;
555 BOOLEAN DeleteAccess;
556 BOOLEAN SharedRead;
557 BOOLEAN SharedWrite;
558 BOOLEAN SharedDelete;
559 ULONG Flags;
560 UNICODE_STRING FileName;
561 LARGE_INTEGER CurrentByteOffset;
562 ULONG Waiters;
563 ULONG Busy;
564 PVOID LastLock;
565 KEVENT Lock;
566 KEVENT Event;
567 PIO_COMPLETION_CONTEXT CompletionContext;
568 } FILE_OBJECT, *PFILE_OBJECT;
569
570
571 typedef struct _IRP
572 {
573 CSHORT Type;
574 USHORT Size;
575 PMDL MdlAddress;
576 ULONG Flags;
577 union
578 {
579 struct _IRP* MasterIrp;
580 LONG IrpCount;
581 PVOID SystemBuffer;
582 } AssociatedIrp;
583 LIST_ENTRY ThreadListEntry;
584 IO_STATUS_BLOCK IoStatus;
585 KPROCESSOR_MODE RequestorMode;
586 BOOLEAN PendingReturned;
587 CHAR StackCount;
588 CHAR CurrentLocation;
589 BOOLEAN Cancel;
590 KIRQL CancelIrql;
591 CCHAR ApcEnvironment;// CCHAR or PVOID?
592 UCHAR AllocationFlags;//UCHAR or ULONG?
593 PIO_STATUS_BLOCK UserIosb;
594 PKEVENT UserEvent;
595 union
596 {
597 struct
598 {
599 PIO_APC_ROUTINE UserApcRoutine;
600 PVOID UserApcContext;
601 } AsynchronousParameters;
602 LARGE_INTEGER AllocationSize;
603 } Overlay;
604 PDRIVER_CANCEL CancelRoutine;
605 PVOID UserBuffer;
606 union
607 {
608 struct
609 {
610 union {
611 KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
612 PVOID DriverContext[4];
613 };
614 struct _ETHREAD* Thread;
615 PCHAR AuxiliaryBuffer;
616 LIST_ENTRY ListEntry;
617 struct _IO_STACK_LOCATION* CurrentStackLocation;
618 PFILE_OBJECT OriginalFileObject;
619 } Overlay;
620 KAPC Apc;
621 ULONG CompletionKey;
622 } Tail;
623 IO_STACK_LOCATION Stack[1];
624 } IRP, *PIRP;
625
626 #define VPB_MOUNTED 0x00000001
627 #define VPB_LOCKED 0x00000002
628 #define VPB_PERSISTENT 0x00000004
629 #define VPB_REMOVE_PENDING 0x00000008
630
631 typedef struct _VPB
632 {
633 CSHORT Type;
634 CSHORT Size;
635 USHORT Flags;
636 USHORT VolumeLabelLength;
637 struct _DEVICE_OBJECT* DeviceObject;
638 struct _DEVICE_OBJECT* RealDevice;
639 ULONG SerialNumber;
640 ULONG ReferenceCount;
641 WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH];
642 } VPB, *PVPB;
643
644
645 typedef struct _DEVICE_OBJECT
646 {
647 CSHORT Type;
648 CSHORT Size;
649 LONG ReferenceCount;
650 struct _DRIVER_OBJECT* DriverObject;
651 struct _DEVICE_OBJECT* NextDevice;
652 struct _DEVICE_OBJECT* AttachedDevice;
653 struct _IRP* CurrentIrp;
654 PIO_TIMER Timer;
655 ULONG Flags;
656 ULONG Characteristics;
657 PVPB Vpb;
658 PVOID DeviceExtension;
659 DEVICE_TYPE DeviceType;
660 CCHAR StackSize;
661 union
662 {
663 LIST_ENTRY ListHead;
664 WAIT_CONTEXT_BLOCK Wcb;
665 } Queue;
666 ULONG AlignmentRequirement;
667 KDEVICE_QUEUE DeviceQueue;
668 KDPC Dpc;
669 ULONG ActiveThreadCount;
670 PSECURITY_DESCRIPTOR SecurityDescriptor;
671 KEVENT DeviceLock;
672 USHORT SectorSize;
673 USHORT Spare1;
674 struct _DEVOBJ_EXTENSION* DeviceObjectExtension;
675 PVOID Reserved;
676 } DEVICE_OBJECT, *PDEVICE_OBJECT;
677
678
679 /*
680 * Fast i/o routine type declaration
681 */
682 //typedef NTSTATUS (*PFAST_IO_DISPATCH)(struct _DEVICE_OBJECT*, IRP*);
683 //FIXME : this type is ok for read and write, but not for all routines
684 typedef BOOLEAN STDCALL
685 (*PFAST_IO_ROUTINE)(IN struct _FILE_OBJECT *FileObject,
686 IN PLARGE_INTEGER FileOffset,
687 IN ULONG Length,
688 IN BOOLEAN Wait,
689 IN ULONG LockKey,
690 OUT PVOID Buffer,
691 OUT PIO_STATUS_BLOCK IoStatus,
692 IN struct _DEVICE_OBJECT *DeviceObject);
693
694 typedef struct _FAST_IO_DISPATCH {
695 ULONG SizeOfFastIoDispatch;
696 PFAST_IO_ROUTINE FastIoCheckIfPossible;
697 PFAST_IO_ROUTINE FastIoRead;
698 PFAST_IO_ROUTINE FastIoWrite;
699 PFAST_IO_ROUTINE FastIoQueryBasicInfo;
700 PFAST_IO_ROUTINE FastIoQueryStandardInfo;
701 PFAST_IO_ROUTINE FastIoLock;
702 PFAST_IO_ROUTINE FastIoUnlockSingle;
703 PFAST_IO_ROUTINE FastIoUnlockAll;
704 PFAST_IO_ROUTINE FastIoUnlockAllByKey;
705 PFAST_IO_ROUTINE FastIoDeviceControl;
706 PFAST_IO_ROUTINE AcquireFileForNtCreateSection;
707 PFAST_IO_ROUTINE ReleaseFileForNtCreateSection;
708 PFAST_IO_ROUTINE FastIoDetachDevice;
709 PFAST_IO_ROUTINE FastIoQueryNetworkOpenInfo;
710 PFAST_IO_ROUTINE AcquireForModWrite;
711 PFAST_IO_ROUTINE MdlRead;
712 PFAST_IO_ROUTINE MdlReadComplete;
713 PFAST_IO_ROUTINE PrepareMdlWrite;
714 PFAST_IO_ROUTINE MdlWriteComplete;
715 PFAST_IO_ROUTINE FastIoReadCompressed;
716 PFAST_IO_ROUTINE FastIoWriteCompressed;
717 PFAST_IO_ROUTINE MdlReadCompleteCompressed;
718 PFAST_IO_ROUTINE MdlWriteCompleteCompressed;
719 PFAST_IO_ROUTINE FastIoQueryOpen;
720 PFAST_IO_ROUTINE ReleaseForModWrite;
721 PFAST_IO_ROUTINE AcquireForCcFlush;
722 PFAST_IO_ROUTINE ReleaseForCcFlush;
723 } FAST_IO_DISPATCH, *PFAST_IO_DISPATCH;
724
725 /*
726 * Dispatch routine type declaration
727 */
728 typedef NTSTATUS STDCALL
729 (*PDRIVER_DISPATCH)(IN struct _DEVICE_OBJECT *DeviceObject,
730 IN struct _IRP *Irp);
731
732 /*
733 * StartIo routine type declaration
734 */
735 typedef VOID STDCALL
736 (*PDRIVER_STARTIO)(IN PDEVICE_OBJECT DeviceObject,
737 IN PIRP Irp);
738
739 /*
740 * Unload routine type declaration
741 */
742 typedef VOID STDCALL
743 (*PDRIVER_UNLOAD)(IN struct _DRIVER_OBJECT *DriverObject);
744
745 /*
746 * AddDevice routine type declaration
747 */
748 typedef NTSTATUS STDCALL
749 (*PDRIVER_ADD_DEVICE)(IN struct _DRIVER_OBJECT *DriverObject,
750 IN struct _DEVICE_OBJECT *PhysicalDeviceObject);
751
752
753 typedef struct _DRIVER_EXTENSION
754 {
755 struct _DRIVER_OBJECT* DriverObject;
756 PDRIVER_ADD_DEVICE AddDevice;
757 ULONG Count;
758 UNICODE_STRING ServiceKeyName;
759 } DRIVER_EXTENSION, *PDRIVER_EXTENSION;
760
761 #if 0
762 typedef
763 struct _FAST_IO_DISPATCH_TABLE
764 {
765 ULONG Count;
766 PFAST_IO_DISPATCH Dispatch;
767
768 } FAST_IO_DISPATCH_TABLE, * PFAST_IO_DISPATCH_TABLE;
769 #endif
770
771 typedef struct _DRIVER_OBJECT
772 {
773 CSHORT Type;
774 CSHORT Size;
775 PDEVICE_OBJECT DeviceObject;
776 ULONG Flags;
777 PVOID DriverStart;
778 ULONG DriverSize;
779 PVOID DriverSection;
780 PDRIVER_EXTENSION DriverExtension;
781 UNICODE_STRING DriverName;
782 PUNICODE_STRING HardwareDatabase;
783 #if 0
784 PFAST_IO_DISPATCH_TABLE FastIoDispatch;
785 #else
786 PFAST_IO_DISPATCH FastIoDispatch;
787 #endif
788 PDRIVER_INITIALIZE DriverInit;
789 PDRIVER_STARTIO DriverStartIo;
790 PDRIVER_UNLOAD DriverUnload;
791 PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
792 } DRIVER_OBJECT, *PDRIVER_OBJECT;
793
794
795 typedef struct _CONFIGURATION_INFORMATION
796 {
797 ULONG DiskCount;
798 ULONG FloppyCount;
799 ULONG CDRomCount;
800 ULONG TapeCount;
801 ULONG ScsiPortCount;
802 ULONG SerialCount;
803 ULONG ParallelCount;
804 BOOLEAN AtDiskPrimaryAddressClaimed;
805 BOOLEAN AtDiskSecondaryAddressClaimed;
806 } CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
807
808 typedef VOID STDCALL
809 (*PIO_DPC_ROUTINE)(PKDPC Dpc,
810 PDEVICE_OBJECT DeviceObject,
811 PIRP Irp,
812 PVOID Context);
813
814 typedef VOID STDCALL
815 (*PIO_TIMER_ROUTINE)(PDEVICE_OBJECT DeviceObject,
816 PVOID Context);
817
818 typedef struct _IO_WORKITEM *PIO_WORKITEM;
819 typedef VOID (*PIO_WORKITEM_ROUTINE)(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context);
820
821 #if WINDOWS_STRUCTS_DOESNT_ALREADY_DEFINE_THIS
822 typedef struct _PARTITION_INFORMATION
823 {
824 LARGE_INTEGER StartingOffset;
825 LARGE_INTEGER PartitionLength;
826 ULONG HiddenSectors;
827 ULONG PartitionNumber;
828 UCHAR PartitionType;
829 BOOLEAN BootIndicator;
830 BOOLEAN RecognizedPartition;
831 BOOLEAN RewritePartition;
832 } PARTITION_INFORMATION, *PPARTITION_INFORMATION;
833 #endif
834
835 typedef struct _DRIVER_LAYOUT_INFORMATION
836 {
837 ULONG PartitionCount;
838 ULONG Signature;
839 PARTITION_INFORMATION PartitionEntry[1];
840 } DRIVER_LAYOUT_INFORMATION, *PDRIVER_LAYOUT_INFORMATION;
841
842
843 typedef IO_ALLOCATION_ACTION STDCALL
844 (*PDRIVER_CONTROL)(PDEVICE_OBJECT DeviceObject,
845 PIRP Irp,
846 PVOID MapRegisterBase,
847 PVOID Context);
848 #if (_WIN32_WINNT >= 0x0400)
849 typedef VOID STDCALL
850 (*PFSDNOTIFICATIONPROC)(IN PDEVICE_OBJECT PtrTargetFileSystemDeviceObject,
851 IN BOOLEAN DriverActive);
852 #endif // (_WIN32_WINNT >= 0x0400)
853
854 #endif /* __INCLUDE_DDK_IOTYPES_H */