ReactOS  0.4.15-dev-1029-g3f30b1e
io.h
Go to the documentation of this file.
1 /*
2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: ntoskrnl/include/internal/io.h
5 * PURPOSE: Internal header for the I/O Manager
6 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
7 */
8 
9 #include "ntdddisk.h"
10 
11 //
12 // Define this if you want debugging support
13 //
14 #define _IO_DEBUG_ 0x00
15 
16 //
17 // These define the Debug Masks Supported
18 //
19 #define IO_IRP_DEBUG 0x01
20 #define IO_FILE_DEBUG 0x02
21 #define IO_API_DEBUG 0x04
22 #define IO_CTL_DEBUG 0x08
23 
24 //
25 // Debug/Tracing support
26 //
27 #if _IO_DEBUG_
28 #ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented
29 #define IOTRACE(x, ...) \
30  { \
31  DbgPrintEx("%s [%.16s] - ", \
32  __FUNCTION__, \
33  PsGetCurrentProcess()->ImageFileName); \
34  DbgPrintEx(__VA_ARGS__); \
35  }
36 #else
37 #define IOTRACE(x, ...) \
38  if (x & IopTraceLevel) \
39  { \
40  DbgPrint("%s [%.16s] - ", \
41  __FUNCTION__, \
42  PsGetCurrentProcess()->ImageFileName); \
43  DbgPrint(__VA_ARGS__); \
44  }
45 #endif
46 #else
47 #define IOTRACE(x, fmt, ...) DPRINT(fmt, ##__VA_ARGS__)
48 #endif
49 
50 //
51 // Registry path to the enumeration root key
52 //
53 #define ENUM_ROOT L"\\Registry\\Machine\\System\\CurrentControlSet\\Enum"
54 
55 //
56 // Returns the type of METHOD_ used in this IOCTL
57 //
58 #define IO_METHOD_FROM_CTL_CODE(c) (c & 0x00000003)
59 
60 //
61 // Bugcheck codes for RAM disk booting
62 //
63 //
64 // No LoaderXIPRom descriptor was found in the loader memory list
65 //
66 #define RD_NO_XIPROM_DESCRIPTOR 1
67 //
68 // Unable to open the RAM disk driver (ramdisk.sys or \Device\Ramdisk)
69 //
70 #define RD_NO_RAMDISK_DRIVER 2
71 //
72 // FSCTL_CREATE_RAM_DISK failed
73 //
74 #define RD_FSCTL_FAILED 3
75 //
76 // Unable to create GUID string from binary GUID
77 //
78 #define RD_GUID_CONVERT_FAILED 4
79 //
80 // Unable to create symbolic link pointing to the RAM disk device
81 //
82 #define RD_SYMLINK_CREATE_FAILED 5
83 
84 //
85 // Max traversal of reparse points for a single open in IoParseDevice
86 //
87 #define IOP_MAX_REPARSE_TRAVERSAL 0x20
88 
89 //
90 // Private flags for IoCreateFile / IoParseDevice
91 //
92 #define IOP_USE_TOP_LEVEL_DEVICE_HINT 0x01
93 #define IOP_CREATE_FILE_OBJECT_EXTENSION 0x02
94 
95 
96 typedef struct _FILE_OBJECT_EXTENSION
97 {
100 
102 
103 
104 
105 //
106 // We can call the Ob Inlined API, it's the same thing
107 //
108 #define IopAllocateMdlFromLookaside \
109  ObpAllocateObjectCreateInfoBuffer
110 #define IopFreeMdlFromLookaside \
111  ObpFreeCapturedAttributes
112 
113 //
114 // Determines if the IRP is Synchronous
115 //
116 #define IsIrpSynchronous(Irp, FileObject) \
117  ((Irp->Flags & IRP_SYNCHRONOUS_API) || \
118  (!(FileObject) ? \
119  FALSE : \
120  FileObject->Flags & FO_SYNCHRONOUS_IO)) \
121 
122 //
123 // Returns the internal Device Object Extension
124 //
125 #define IoGetDevObjExtension(DeviceObject) \
126  ((PEXTENDED_DEVOBJ_EXTENSION) \
127  (DeviceObject->DeviceObjectExtension)) \
128 
129 //
130 // Returns the internal Driver Object Extension
131 //
132 #define IoGetDrvObjExtension(DriverObject) \
133  ((PEXTENDED_DRIVER_EXTENSION) \
134  (DriverObject->DriverExtension)) \
135 
136 /*
137  * VOID
138  * IopDeviceNodeSetFlag(
139  * PDEVICE_NODE DeviceNode,
140  * ULONG Flag);
141  */
142 #define IopDeviceNodeSetFlag(DeviceNode, Flag) \
143  ((DeviceNode)->Flags |= (Flag))
144 
145 /*
146  * VOID
147  * IopDeviceNodeClearFlag(
148  * PDEVICE_NODE DeviceNode,
149  * ULONG Flag);
150  */
151 #define IopDeviceNodeClearFlag(DeviceNode, Flag) \
152  ((DeviceNode)->Flags &= ~(Flag))
153 
154 /*
155  * BOOLEAN
156  * IopDeviceNodeHasFlag(
157  * PDEVICE_NODE DeviceNode,
158  * ULONG Flag);
159  */
160 #define IopDeviceNodeHasFlag(DeviceNode, Flag) \
161  (((DeviceNode)->Flags & (Flag)) > 0)
162 
163 /*
164  * VOID
165  * IopDeviceNodeSetUserFlag(
166  * PDEVICE_NODE DeviceNode,
167  * ULONG UserFlag);
168  */
169 #define IopDeviceNodeSetUserFlag(DeviceNode, UserFlag) \
170  ((DeviceNode)->UserFlags |= (UserFlag))
171 
172 /*
173  * VOID
174  * IopDeviceNodeClearUserFlag(
175  * PDEVICE_NODE DeviceNode,
176  * ULONG UserFlag);
177  */
178 #define IopDeviceNodeClearUserFlag(DeviceNode, UserFlag)\
179  ((DeviceNode)->UserFlags &= ~(UserFlag))
180 
181 /*
182  * BOOLEAN
183  * IopDeviceNodeHasUserFlag(
184  * PDEVICE_NODE DeviceNode,
185  * ULONG UserFlag);
186  */
187 #define IopDeviceNodeHasUserFlag(DeviceNode, UserFlag) \
188  (((DeviceNode)->UserFlags & (UserFlag)) > 0)
189 
190  /*
191  * VOID
192  * IopDeviceNodeSetProblem(
193  * PDEVICE_NODE DeviceNode,
194  * ULONG Problem);
195  */
196 #define IopDeviceNodeSetProblem(DeviceNode, Problem) \
197  ((DeviceNode)->Problem |= (Problem))
198 
199 /*
200  * VOID
201  * IopDeviceNodeClearProblem(
202  * PDEVICE_NODE DeviceNode,
203  * ULONG Problem);
204  */
205 #define IopDeviceNodeClearProblem(DeviceNode, Problem) \
206  ((DeviceNode)->Problem &= ~(Problem))
207 
208 /*
209  * BOOLEAN
210  * IopDeviceNodeHasProblem(
211  * PDEVICE_NODE DeviceNode,
212  * ULONG Problem);
213  */
214 #define IopDeviceNodeHasProblem(DeviceNode, Problem) \
215  (((DeviceNode)->Problem & (Problem)) > 0)
216 
217 /*
218  * VOID
219  * IopInitDeviceTreeTraverseContext(
220  * PDEVICETREE_TRAVERSE_CONTEXT DeviceTreeTraverseContext,
221  * PDEVICE_NODE DeviceNode,
222  * DEVICETREE_TRAVERSE_ROUTINE Action,
223  * PVOID Context);
224  */
225 #define IopInitDeviceTreeTraverseContext( \
226  _DeviceTreeTraverseContext, _DeviceNode, _Action, \
227  _Context) { \
228  (_DeviceTreeTraverseContext)->FirstDeviceNode = \
229  (_DeviceNode); \
230  (_DeviceTreeTraverseContext)->Action = (_Action); \
231  (_DeviceTreeTraverseContext)->Context = (_Context); }
232 
233 /*
234  * BOOLEAN
235  * IopIsValidPhysicalDeviceObject(
236  * IN PDEVICE_OBJECT PhysicalDeviceObject);
237  */
238 #define IopIsValidPhysicalDeviceObject(PhysicalDeviceObject) \
239  (((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject) && \
240  (((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode) && \
241  (((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode->Flags & DNF_ENUMERATED))
242 
243 //
244 // Device List Operations
245 //
247 {
251 
252 //
253 // Transfer statistics
254 //
255 typedef enum _IOP_TRANSFER_TYPE
256 {
261 
262 //
263 // Packet Types when piggybacking on the IRP Overlay
264 //
266  {
271 
272 //
273 // Special version of the IRP Overlay used to optimize I/O completion
274 // by not using up a separate structure.
275 //
277 {
278  struct
279  {
281  union
282  {
285  };
286  };
292 
293 //
294 // I/O Completion Context for IoSetIoCompletionRoutineEx
295 //
297 {
302 
303 //
304 // I/O Wrapper around the Executive Work Item
305 //
306 typedef struct _IO_WORKITEM
307 {
312 } IO_WORKITEM;
313 
314 //
315 // I/O Wrapper around the Kernel Interrupt
316 //
317 typedef struct _IO_INTERRUPT
318 {
323 
324 //
325 // I/O Error Log Packet Header
326 //
327 typedef struct _ERROR_LOG_ENTRY
328 {
336 
337 //
338 // To simplify matters, the kernel is made to support both the checked and free
339 // version of the I/O Remove Lock in the same binary. This structure includes
340 // both, since the DDK has the structure with a compile-time #ifdef.
341 //
343 {
347 
348 //
349 // Dummy File Object used inside the Open Packet so that OB knows how to
350 // deal with the Object Pointer even though it's not a real file.
351 //
352 typedef struct _DUMMY_FILE_OBJECT
353 {
357 
358 //
359 // Open packet used as a context for Device/File parsing so that the parse
360 // routine can know what operation is being requested.
361 //
362 typedef struct _OPEN_PACKET
363 {
393 
394 //
395 // Parameters packet for Load/Unload work item's context
396 //
397 typedef struct _LOAD_UNLOAD_PARAMS
398 {
405 
406 //
407 // Boot Driver List Entry
408 //
409 typedef struct _DRIVER_INFORMATION
410 {
420 
421 //
422 // Boot Driver Node
423 //
424 typedef struct _BOOT_DRIVER_NODE
425 {
432 
433 //
434 // List of Bus Type GUIDs
435 //
437 {
443 
444 //
445 // Shutdown entry for registed devices
446 //
447 typedef struct _SHUTDOWN_ENTRY
448 {
452 
453 //
454 // F/S Notification entry for registered File Systems
455 //
457 {
462 
463 //
464 // Driver (Boot) Re-Initialization Entry
465 //
466 typedef struct _DRIVER_REINIT_ITEM
467 {
473 
474 //
475 // Called on every visit of a node during a preorder-traversal of the device
476 // node tree.
477 // If the routine returns STATUS_UNSUCCESSFUL the traversal will stop and
478 // STATUS_SUCCESS is returned to the caller who initiated the tree traversal.
479 // Any other returned status code will be returned to the caller. If a status
480 // code that indicates an error (other than STATUS_UNSUCCESSFUL) is returned,
481 // the traversal is stopped immediately and the status code is returned to
482 // the caller.
483 //
484 typedef
485 NTSTATUS
489 );
490 
491 //
492 // Context information for traversing the device tree
493 //
495 {
496  //
497  // Current device node during a traversal
498  //
500 
501  //
502  // Initial device node where we start the traversal
503  //
505 
506  //
507  // Action routine to be called for every device node
508  //
510 
511  //
512  // Context passed to the action routine
513  //
516 
517 //
518 // Reserve IRP allocator
519 // Used for read paging IOs in low-memory situations
520 //
522 {
528 
529 //
530 // Type selection for IopCreateSecurityDescriptorPerType()
531 //
533 {
540 
541 //
542 // Action types and data for PiQueueDeviceAction()
543 //
544 typedef enum _DEVICE_ACTION
545 {
549 } DEVICE_ACTION;
550 
551 //
552 // Resource code
553 //
554 ULONG
555 NTAPI
557 
558 NTSTATUS
559 NTAPI
562 );
563 
564 NTSTATUS
565 NTAPI
567  IN PIO_RESOURCE_REQUIREMENTS_LIST RequirementsList,
569 );
570 
571 NTSTATUS
572 NTAPI
575  IN BOOLEAN Silent,
576  OUT OPTIONAL PCM_PARTIAL_RESOURCE_DESCRIPTOR ConflictingDescriptor
577 );
578 
579 //
580 // PNP Routines
581 //
582 NTSTATUS
583 NTAPI
586  IN BOOLEAN LoadDriver,
588 );
589 
590 INIT_FUNCTION
591 NTSTATUS
592 NTAPI
594  VOID
595 );
596 
597 BOOLEAN
598 NTAPI
600  VOID
601 );
602 
603 VOID
604 PnpInit2(
605  VOID
606 );
607 
608 VOID
610  VOID
611 );
612 
613 VOID
615  VOID
616 );
617 
618 VOID
621  IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory,
622  IN LPCGUID Event,
623  IN PVOID EventCategoryData1,
624  IN PVOID EventCategoryData2
625 );
626 
627 NTSTATUS
630 );
631 
633 NTAPI
636 );
637 
638 NTSTATUS
640  IN PDEVICE_NODE ParentNode,
644 );
645 
646 NTSTATUS
649 );
650 
651 NTSTATUS
652 NTAPI
654  PDEVICE_CAPABILITIES DeviceCaps);
655 
656 NTSTATUS
657 NTAPI
660  IN PIO_STACK_LOCATION IoStackLocation,
662 );
663 
664 NTSTATUS
665 NTAPI
670  IN PIO_STACK_LOCATION Stack
671 );
672 
674 FASTCALL
677 );
678 
679 NTSTATUS
683 );
684 
685 NTSTATUS
689 );
690 
691 NTSTATUS
693  VOID
694 );
695 
696 NTSTATUS
698  VOID
699 );
700 
701 INIT_FUNCTION
702 NTSTATUS
704 
705 NTSTATUS
707  const GUID *Guid,
708  PUNICODE_STRING DeviceIds
709 );
710 
711 NTSTATUS
714 
715 NTSTATUS
716 NTAPI
719  HANDLE ParentKey,
722 
723 NTSTATUS
724 NTAPI
726  IN HANDLE Handle,
729 );
730 
731 NTSTATUS
732 NTAPI
735  IN HANDLE BaseHandle OPTIONAL,
740 );
741 
742 
743 NTSTATUS
746 
747 NTSTATUS
748 NTAPI
752  OUT PHANDLE Handle);
753 
754 //
755 // PnP Routines
756 //
757 INIT_FUNCTION
758 NTSTATUS
759 NTAPI
761  VOID
762 );
763 
764 INIT_FUNCTION
765 NTSTATUS
766 NTAPI
768  VOID
769 );
770 
771 USHORT
772 NTAPI
774  IN HANDLE ServiceHandle
775 );
776 
777 USHORT
778 NTAPI
780  IN HANDLE ServiceHandle
781 );
782 
783 NTSTATUS
784 NTAPI
786  IN PKEY_VALUE_FULL_INFORMATION KeyValueInformation,
787  OUT PUNICODE_STRING *UnicodeStringList,
788  OUT PULONG UnicodeStringCount
789 );
790 
791 BOOLEAN
792 NTAPI
794  IN PWCHAR RegSzData,
795  IN ULONG RegSzLength,
796  OUT PUSHORT StringLength OPTIONAL
797 );
798 
799 //
800 // Initialization Routines
801 //
802 INIT_FUNCTION
803 NTSTATUS
804 NTAPI
806  IN PLOADER_PARAMETER_BLOCK LoaderBlock
807 );
808 
809 INIT_FUNCTION
810 NTSTATUS
811 NTAPI
813  IN PLOADER_PARAMETER_BLOCK LoaderBlock,
814  OUT PANSI_STRING NtBootPath
815 );
816 
817 INIT_FUNCTION
818 BOOLEAN
819 NTAPI
821  IN PLOADER_PARAMETER_BLOCK LoaderBlock
822 );
823 
824 BOOLEAN
825 NTAPI
827  IN PDRIVE_LAYOUT_INFORMATION_EX DriveLayout,
828  IN PARC_DISK_SIGNATURE ArcDiskSignature,
830 );
831 
832 BOOLEAN
833 NTAPI
835  IN HANDLE PageFileHandle
836 );
837 
838 //
839 // Device/Volume Routines
840 //
841 VOID
842 NTAPI
845 );
846 
847 NTSTATUS
848 FASTCALL
852 );
853 
854 NTSTATUS
857 );
858 
859 NTSTATUS
862 );
863 
864 NTSTATUS
867 );
868 
869 PVPB
870 NTAPI
872  IN POPEN_PACKET OpenPacket,
876 );
877 
878 NTSTATUS
879 NTAPI
882  IN BOOLEAN AllowRawMount,
883  IN BOOLEAN DeviceIsLocked,
885  OUT PVPB *Vpb
886 );
887 
888 PVOID
891 );
892 
893 PVOID
896  IN PWCHAR Name
897 );
898 
899 NTSTATUS
900 NTAPI
903 );
904 
905 VOID
906 NTAPI
908  IN PVPB Vpb
909 );
910 
911 VOID
912 NTAPI
914  VOID
915 );
916 
917 VOID
918 NTAPI
920  VOID
921 );
922 
923 NTSTATUS
924 NTAPI
927 );
928 
929 VOID
930 NTAPI
933  IN BOOLEAN ForceUnload
934 );
935 
936 NTSTATUS
937 NTAPI
941 );
942 
943 VOID
944 NTAPI
947 );
948 
950 NTAPI
953 );
954 
955 //
956 // IRP Routines
957 //
958 NTSTATUS
959 NTAPI
962  IN PKEVENT EventObject,
964 );
965 
966 VOID
967 NTAPI
969  IN PKEVENT EventObject,
970  IN PIRP Irp
971 );
972 
973 PIRP
974 NTAPI
977 );
978 
979 BOOLEAN
980 NTAPI
982  IN PRESERVE_IRP_ALLOCATOR ReserveIrpAllocator
983 );
984 
985 PIRP
986 NTAPI
989 );
990 
991 //
992 // Shutdown routines
993 //
994 VOID
996  VOID
997 );
998 
999 VOID
1000 NTAPI
1002  IN ULONG Phase
1003 );
1004 
1005 VOID
1006 NTAPI
1008  IN PLIST_ENTRY ListHead
1009 );
1010 
1011 //
1012 // Boot logging support
1013 //
1014 INIT_FUNCTION
1015 VOID
1017  IN BOOLEAN StartBootLog
1018 );
1019 
1020 INIT_FUNCTION
1021 VOID
1023  VOID
1024 );
1025 
1026 VOID
1028  VOID
1029 );
1030 
1031 VOID
1032 IopBootLog(
1033  IN PUNICODE_STRING DriverName,
1035 );
1036 
1037 VOID
1039  VOID
1040 );
1041 
1042 //
1043 // I/O Cancellation Routines
1044 //
1045 VOID
1046 NTAPI
1049 );
1050 
1051 VOID
1053  VOID
1054 );
1055 
1056 //
1057 // I/O Completion
1058 //
1059 VOID
1060 NTAPI
1062  IN PKAPC Apc,
1063  IN PKNORMAL_ROUTINE* NormalRoutine,
1064  IN PVOID* NormalContext,
1067 );
1068 
1069 //
1070 // Error Logging Routines
1071 //
1072 VOID
1073 NTAPI
1075  VOID
1076 );
1077 
1078 VOID
1079 NTAPI
1080 IopLogWorker(
1082 );
1083 
1084 //
1085 // Raw File System MiniDriver
1086 //
1087 BOOLEAN
1090 );
1091 
1092 INIT_FUNCTION
1093 NTSTATUS
1094 NTAPI
1098 );
1099 
1100 //
1101 // PnP Root MiniDriver
1102 //
1103 NTSTATUS
1104 NTAPI
1108 );
1109 
1110 NTSTATUS
1115  OUT OPTIONAL PUNICODE_STRING FullInstancePath
1116 );
1117 
1118 NTSTATUS
1121 
1122 //
1123 // Driver Routines
1124 //
1125 INIT_FUNCTION
1126 VOID
1127 FASTCALL
1129  VOID
1130 );
1131 
1132 INIT_FUNCTION
1133 VOID
1134 FASTCALL
1136  VOID
1137 );
1138 
1139 NTSTATUS
1140 NTAPI
1142  IN PDRIVER_INITIALIZE InitializationFunction,
1145  IN PLDR_DATA_TABLE_ENTRY ModuleObject OPTIONAL,
1146  OUT PDRIVER_OBJECT *pDriverObject);
1147 
1148 VOID
1149 NTAPI
1151  IN PVOID ObjectBody
1152 );
1153 
1154 NTSTATUS
1155 FASTCALL
1160 );
1161 
1162 NTSTATUS
1163 FASTCALL
1166  OUT PLDR_DATA_TABLE_ENTRY *ModuleObject
1167 );
1168 
1169 NTSTATUS
1170 NTAPI
1174 );
1175 
1176 NTSTATUS
1177 FASTCALL
1180  IN PLDR_DATA_TABLE_ENTRY ModuleObject,
1182  IN BOOLEAN FileSystemDriver,
1184 );
1185 
1186 NTSTATUS
1187 FASTCALL
1190  IN HANDLE EnumSubKey,
1191  IN HANDLE ClassKey,
1192  IN BOOLEAN Lower
1193 );
1194 
1195 VOID
1196 NTAPI
1198  VOID
1199 );
1200 
1201 VOID
1202 NTAPI
1204  VOID
1205 );
1206 
1207 //
1208 // File Routines
1209 //
1210 VOID
1211 NTAPI
1212 IopDeleteDevice(IN PVOID ObjectBody);
1213 
1214 NTSTATUS
1215 NTAPI
1217  IN PVOID ParseObject,
1222  IN OUT PUNICODE_STRING CompleteName,
1224  IN OUT PVOID Context,
1226  OUT PVOID *Object
1227 );
1228 
1229 NTSTATUS
1230 NTAPI
1231 IopParseFile(
1232  IN PVOID ParseObject,
1237  IN OUT PUNICODE_STRING CompleteName,
1241  OUT PVOID *Object
1242 );
1243 
1244 VOID
1245 NTAPI
1247  IN PVOID ObjectBody
1248 );
1249 
1250 NTSTATUS
1251 NTAPI
1253  IN PVOID ObjectBody,
1254  IN SECURITY_OPERATION_CODE OperationCode,
1258  OUT PSECURITY_DESCRIPTOR *OldSecurityDescriptor,
1261 );
1262 
1263 NTSTATUS
1264 NTAPI
1265 IopQueryName(
1266  IN PVOID ObjectBody,
1267  IN BOOLEAN HasName,
1268  OUT POBJECT_NAME_INFORMATION ObjectNameInfo,
1269  IN ULONG Length,
1272 );
1273 
1274 NTSTATUS
1275 NTAPI
1277  IN PVOID ObjectBody,
1278  IN BOOLEAN HasName,
1279  IN BOOLEAN QueryDosName,
1280  OUT POBJECT_NAME_INFORMATION ObjectNameInfo,
1281  IN ULONG Length,
1284 );
1285 
1286 VOID
1287 NTAPI
1288 IopCloseFile(
1290  IN PVOID Object,
1293  IN ULONG SystemHandleCount
1294 );
1295 
1296 NTSTATUS
1297 NTAPI
1302  _Out_ PBOOLEAN LockFailed
1303 );
1304 
1305 PVOID
1306 NTAPI
1309 );
1310 
1311 NTSTATUS
1312 NTAPI
1316  IN BOOLEAN Define
1317 );
1318 
1319 VOID
1320 NTAPI
1322  IN PIRP Irp,
1324  IN PREPARSE_DATA_BUFFER DataBuffer
1325 );
1326 
1327 NTSTATUS
1328 NTAPI
1332 );
1333 
1334 NTSTATUS
1335 NTAPI
1338  IN ULONG Length,
1339  IN FILE_INFORMATION_CLASS FileInfoClass,
1340  OUT PVOID Buffer,
1342 );
1343 
1344 BOOLEAN
1345 NTAPI
1347  IN PDEVICE_OBJECT BaseDeviceObject,
1348  IN PDEVICE_OBJECT TopDeviceObjectHint
1349 );
1350 
1351 //
1352 // I/O Timer Routines
1353 //
1354 VOID
1355 FASTCALL
1357  VOID
1358 );
1359 
1360 VOID
1361 NTAPI
1364 );
1365 
1366 //
1367 // I/O Completion Routines
1368 //
1369 VOID
1370 NTAPI
1372  PVOID ObjectBody
1373 );
1374 
1375 NTSTATUS
1376 NTAPI
1379  IN PVOID KeyContext,
1382  IN ULONG_PTR IoStatusInformation,
1383  IN BOOLEAN Quota
1384 );
1385 
1386 //
1387 // Ramdisk Routines
1388 //
1389 INIT_FUNCTION
1390 NTSTATUS
1391 NTAPI
1393  IN PLOADER_PARAMETER_BLOCK LoaderBlock
1394 );
1395 
1396 //
1397 // Configuration Routines
1398 //
1399 NTSTATUS
1400 NTAPI
1402  IN GUID Guid,
1404  IN PULONG Interfaces
1405 );
1406 
1407 VOID
1408 NTAPI
1409 IopStoreSystemPartitionInformation(IN PUNICODE_STRING NtSystemPartitionDeviceName,
1410  IN PUNICODE_STRING OsLoaderPathName
1411 );
1412 
1413 //
1414 // Device action
1415 //
1416 VOID
1420  _In_opt_ PKEVENT CompletionEvent,
1421  _Out_opt_ NTSTATUS *CompletionStatus);
1422 
1423 NTSTATUS
1427 
1428 //
1429 // Global I/O Data
1430 //
1434 extern ULONG IopTraceLevel;
1442 extern PVOID IopTriageDumpDataBlocks[64];
1449 
1450 //
1451 // Inlined Functions
1452 //
1453 #include "io_x.h"
PVOID Context
Definition: io.h:311
NTSTATUS NTAPI PipCallDriverAddDevice(IN PDEVICE_NODE DeviceNode, IN BOOLEAN LoadDriver, IN PDRIVER_OBJECT DriverObject)
Definition: pnpinit.c:291
#define MAXIMUM_PROCESSORS
Definition: rwlock.h:5
PDEVICE_OBJECT TopDeviceObjectHint
Definition: io.h:98
NTSTATUS PnpRootRegisterDevice(IN PDEVICE_OBJECT DeviceObject)
Definition: pnproot.c:129
NTSTATUS NTAPI IopGetFileInformation(IN PFILE_OBJECT FileObject, IN ULONG Length, IN FILE_INFORMATION_CLASS FileInfoClass, OUT PVOID Buffer, OUT PULONG ReturnedLength)
Definition: iofunc.c:775
* PNTSTATUS
Definition: strlen.c:14
PDEVICE_OBJECT DeviceObject
Definition: io.h:450
ObjectType
Definition: metafile.c:80
_In_ PVOID _In_ BOOLEAN Alertable
Definition: exfuncs.h:452
VOID NTAPI IopCompleteRequest(IN PKAPC Apc, IN PKNORMAL_ROUTINE *NormalRoutine, IN PVOID *NormalContext, IN PVOID *SystemArgument1, IN PVOID *SystemArgument2)
Definition: irp.c:238
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING KeyName
Definition: ndis.h:4711
IN CINT OUT PVOID IN ULONG OUT PULONG ReturnLength
Definition: dumpinfo.c:39
GUID Guids[1]
Definition: io.h:440
#define IN
Definition: typedefs.h:39
_In_opt_ HANDLE _In_opt_ PIO_APC_ROUTINE _In_opt_ PVOID ApcContext
Definition: iofuncs.h:719
PIO_WORKITEM_ROUTINE WorkerRoutine
Definition: io.h:310
NTSTATUS NTAPI IoGetRelatedTargetDevice(IN PFILE_OBJECT FileObject, OUT PDEVICE_OBJECT *DeviceObject)
Definition: device.c:1607
USHORT ShareAccess
Definition: io.h:375
NTSTATUS NTAPI IopSynchronousCall(IN PDEVICE_OBJECT DeviceObject, IN PIO_STACK_LOCATION IoStackLocation, OUT PVOID *Information)
Definition: pnpmgr.c:549
PDEVICE_NODE IopRootDeviceNode
Definition: devnode.c:18
enum _COMPLETION_PACKET_TYPE * PCOMPLETION_PACKET_TYPE
NTSTATUS IopInitializePnpServices(IN PDEVICE_NODE DeviceNode)
Definition: devaction.c:2066
INIT_FUNCTION NTSTATUS NTAPI RawFsDriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
Definition: rawfs.c:1193
_In_opt_ PDEVICE_OBJECT _In_ ULONG _Outptr_result_nullonfailure_ _At_ * SymbolicLinkList(return==0, __drv_allocatesMem(Mem))) PZZWSTR *SymbolicLinkList
VOID NTAPI IopAbortInterruptedIrp(IN PKEVENT EventObject, IN PIRP Irp)
Definition: irp.c:67
HAL_DISPATCH _HalDispatchTable
BOOT_DRIVER_LIST_ENTRY ListEntry
Definition: io.h:426
ULONG Options
Definition: io.h:378
PVOID IoOpenFileOnDevice(IN PVOID SymbolicLink, IN PWCHAR Name)
INIT_FUNCTION BOOLEAN NTAPI IoInitSystem(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: iomgr.c:470
PWCHAR FileSystem
Definition: format.c:72
VOID NTAPI IoCancelThreadIo(IN PETHREAD Thread)
Definition: irp.c:1146
_In_ PLIST_ENTRY _In_ PSTRING _In_ USHORT _In_opt_ PSTRING _In_opt_ PSTRING _In_ ULONG _In_ ULONG _In_opt_ PVOID _In_opt_ PVOID FilterContext
Definition: fsrtlfuncs.h:738
VOID NTAPI IoInitFileSystemImplementation(VOID)
VOID PiQueueDeviceAction(_In_ PDEVICE_OBJECT DeviceObject, _In_ DEVICE_ACTION Action, _In_opt_ PKEVENT CompletionEvent, _Out_opt_ NTSTATUS *CompletionStatus)
Queue a device operation to a worker thread.
Definition: devaction.c:2472
ULONG_PTR IoStatusInformation
Definition: io.h:290
VOID NTAPI IopReinitializeDrivers(VOID)
Definition: driver.c:1422
VOID NTAPI IopCloseFile(IN PEPROCESS Process OPTIONAL, IN PVOID Object, IN ACCESS_MASK GrantedAccess, IN ULONG ProcessHandleCount, IN ULONG SystemHandleCount)
Definition: file.c:2177
VOID NTAPI IoShutdownSystem(IN ULONG Phase)
Definition: device.c:133
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
Definition: ndis.h:4711
struct _RESERVE_IRP_ALLOCATOR RESERVE_IRP_ALLOCATOR
struct _FS_CHANGE_NOTIFY_ENTRY * PFS_CHANGE_NOTIFY_ENTRY
BOOLEAN RawFsIsRawFileSystemDeviceObject(IN PDEVICE_OBJECT DeviceObject)
ULONG_PTR Information
Definition: io.h:368
VOID IopStopBootLog(VOID)
Definition: bootlog.c:51
ULONG EaLength
Definition: io.h:377
NTSTATUS IopTraverseDeviceTree(PDEVICETREE_TRAVERSE_CONTEXT Context)
IN PLARGE_INTEGER IN ULONG IN BOOLEAN IN ULONG IN BOOLEAN OUT PIO_STATUS_BLOCK IoStatus
Definition: fatprocs.h:2659
NTSTATUS NTAPI IopParseFile(IN PVOID ParseObject, IN PVOID ObjectType, IN OUT PACCESS_STATE AccessState, IN KPROCESSOR_MODE AccessMode, IN ULONG Attributes, IN OUT PUNICODE_STRING CompleteName, IN OUT PUNICODE_STRING RemainingName, IN OUT PVOID Context OPTIONAL, IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL, OUT PVOID *Object)
Definition: file.c:1318
struct _IO_UNLOAD_SAFE_COMPLETION_CONTEXT IO_UNLOAD_SAFE_COMPLETION_CONTEXT
_In_ PIRP Irp
Definition: csq.h:116
IO_WORKITEM_ROUTINE * PIO_WORKITEM_ROUTINE
Definition: iotypes.h:487
NTSTATUS NTAPI IopMountVolume(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN AllowRawMount, IN BOOLEAN DeviceIsLocked, IN BOOLEAN Alertable, OUT PVPB *Vpb)
Definition: volume.c:467
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH _In_opt_ PEPROCESS _In_opt_ PETHREAD _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
Definition: wsk.h:182
struct _ERROR_LOG_ENTRY ERROR_LOG_ENTRY
KINTERRUPT FirstInterrupt
Definition: io.h:319
struct _ERROR_LOG_ENTRY * PERROR_LOG_ENTRY
VOID IoInitCancelHandling(VOID)
uint16_t * PWSTR
Definition: typedefs.h:56
BOOLEAN NTAPI PpInitSystem(VOID)
Definition: pnpmgr.c:1848
enum _SECURITY_DESCRIPTOR_TYPE * PSECURITY_DESCRIPTOR_TYPE
PVOID Context
Definition: io.h:471
ULONG IopNumTriageDumpDataBlocks
Definition: iomgr.c:46
enum _COMPLETION_PACKET_TYPE COMPLETION_PACKET_TYPE
_IOP_TRANSFER_TYPE
Definition: io.h:255
IO_REMOVE_LOCK_COMMON_BLOCK Common
Definition: io.h:344
ULONG ErrorControl
Definition: io.h:430
char CHAR
Definition: xmlstorage.h:175
NTSTATUS NTAPI IopCreateDeviceKeyPath(IN PCUNICODE_STRING RegistryPath, IN ULONG CreateOptions, OUT PHANDLE Handle)
Definition: pnpmgr.c:666
struct _OPEN_PACKET OPEN_PACKET
LONG NTSTATUS
Definition: precomp.h:26
ULONG ParseCheck
Definition: io.h:369
PVOID ExtraCreateParameters
Definition: io.h:383
PFILE_BASIC_INFORMATION BasicInformation
Definition: io.h:380
NTSTATUS IopCreateDeviceNode(IN PDEVICE_NODE ParentNode, IN PDEVICE_OBJECT PhysicalDeviceObject, IN PUNICODE_STRING ServiceName, OUT PDEVICE_NODE *DeviceNode)
VOID NTAPI IopReinitializeBootDrivers(VOID)
Definition: driver.c:1458
DEVICETREE_TRAVERSE_ROUTINE Action
Definition: io.h:509
VOID NTAPI IopDereferenceDeviceObject(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN ForceUnload)
Definition: device.c:462
OBJECT_HEADER ObjectHeader
Definition: io.h:354
LARGE_INTEGER AllocationSize
Definition: io.h:372
WORK_QUEUE_ITEM WorkItem
Definition: io.h:401
static const CLASS_AND_INTERFACES ExpectedInterfaces[]
Definition: browseui.c:13
CSHORT Type
Definition: io.h:364
NTSTATUS FASTCALL IopLoadServiceModule(IN PUNICODE_STRING ServiceName, OUT PLDR_DATA_TABLE_ENTRY *ModuleObject)
Definition: driver.c:316
struct _IO_UNLOAD_SAFE_COMPLETION_CONTEXT * PIO_UNLOAD_SAFE_COMPLETION_CONTEXT
struct _BOOT_DRIVER_NODE * PBOOT_DRIVER_NODE
FAST_MUTEX Lock
Definition: io.h:439
struct _DRIVER_INFORMATION DRIVER_INFORMATION
VOID FASTCALL IopInitTimerImplementation(VOID)
NTSTATUS NTAPI IoSetIoCompletion(IN PVOID IoCompletion, IN PVOID KeyContext, IN PVOID ApcContext, IN NTSTATUS IoStatus, IN ULONG_PTR IoStatusInformation, IN BOOLEAN Quota)
Definition: iocomp.c:147
PDEVICE_OBJECT DeviceObject
Definition: io.h:332
RESERVE_IRP_ALLOCATOR IopReserveIrpAllocator
Definition: irp.c:19
LIST_ENTRY ShutdownList
Definition: io.h:449
LIST_ENTRY IopErrorLogListHead
Definition: error.c:30
BOOLEAN NTAPI IopVerifyDeviceObjectOnStack(IN PDEVICE_OBJECT BaseDeviceObject, IN PDEVICE_OBJECT TopDeviceObjectHint)
Definition: device.c:695
uint16_t * PWCHAR
Definition: typedefs.h:56
NTSTATUS NTAPI IopGetSetSecurityObject(IN PVOID ObjectBody, IN SECURITY_OPERATION_CODE OperationCode, IN PSECURITY_INFORMATION SecurityInformation, IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, IN OUT PULONG BufferLength, OUT PSECURITY_DESCRIPTOR *OldSecurityDescriptor, IN POOL_TYPE PoolType, IN OUT PGENERIC_MAPPING GenericMapping)
PDEVICE_OBJECT PhysicalDeviceObject
Definition: btrfs_drv.h:1155
_In_ PVOID Parameter
Definition: ldrtypes.h:241
KEVENT Event
Definition: io.h:402
ULONG IopTraceLevel
Definition: iomgr.c:16
VOID IoInitShutdownNotification(VOID)
#define FASTCALL
Definition: nt_native.h:50
BOOLEAN TraversedMountPoint
Definition: io.h:389
const MUI_LANGUAGE_RESOURCE ResourceList[]
Definition: muilanguages.h:414
NTSTATUS NTAPI IopFixupResourceListWithRequirements(IN PIO_RESOURCE_REQUIREMENTS_LIST RequirementsList, OUT PCM_RESOURCE_LIST *ResourceList)
Definition: pnpres.c:219
_In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Reserved_ ULONG _In_opt_ PUNICODE_STRING _In_ ULONG _Out_opt_ PULONG Disposition
Definition: cmfuncs.h:50
enum _IO_NOTIFICATION_EVENT_CATEGORY IO_NOTIFICATION_EVENT_CATEGORY
INIT_FUNCTION NTSTATUS IopInitPlugPlayEvents(VOID)
Definition: plugplay.c:34
#define _In_opt_
Definition: no_sal2.h:213
Iosb Information
Definition: create.c:4353
KSPIN_LOCK IopDeviceActionLock
Definition: devaction.c:48
GENERIC_MAPPING IopCompletionMapping
Definition: iocomp.c:20
USHORT NTAPI PpInitGetGroupOrderIndex(IN HANDLE ServiceHandle)
Definition: pnpinit.c:154
BOOLEAN NTAPI IoInitializeCrashDump(IN HANDLE PageFileHandle)
Definition: iomgr.c:653
struct _DRIVER_INFORMATION * PDRIVER_INFORMATION
CSHORT Size
Definition: io.h:365
PIO_COMPLETION_ROUTINE CompletionRoutine
Definition: io.h:300
uint32_t ULONG_PTR
Definition: typedefs.h:65
PFILE_OBJECT FileObject
Definition: io.h:366
LIST_ENTRY ItemEntry
Definition: io.h:468
struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE GENERAL_LOOKASIDE
Definition: arc.h:198
GENERAL_LOOKASIDE IopMdlLookasideList
Definition: iomgr.c:85
NTSTATUS NTAPI IopFetchConfigurationInformation(OUT PWSTR *SymbolicLinkList, IN GUID Guid, IN ULONG ExpectedInterfaces, IN PULONG Interfaces)
Definition: iorsrce.c:656
INIT_FUNCTION NTSTATUS NTAPI IopStartRamdisk(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: ramdisk.c:32
PVOID EaBuffer
Definition: io.h:376
NTSTATUS IopStartDevice(IN PDEVICE_NODE DeviceNode)
CSHORT Size
Definition: io.h:330
_In_ PUNICODE_STRING ValueName
Definition: cmfuncs.h:264
NTSTATUS NTAPI IopCreateRegistryKeyEx(OUT PHANDLE Handle, IN HANDLE BaseHandle OPTIONAL, IN PUNICODE_STRING KeyName, IN ACCESS_MASK DesiredAccess, IN ULONG CreateOptions, OUT PULONG Disposition OPTIONAL)
PDEVICE_NODE NTAPI PipAllocateDeviceNode(IN PDEVICE_OBJECT PhysicalDeviceObject)
NTSTATUS NTAPI IopCreateDriver(IN PUNICODE_STRING DriverName OPTIONAL, IN PDRIVER_INITIALIZE InitializationFunction, IN PUNICODE_STRING RegistryPath OPTIONAL, IN PCUNICODE_STRING ServiceName, IN PLDR_DATA_TABLE_ENTRY ModuleObject OPTIONAL, OUT PDRIVER_OBJECT *pDriverObject)
Definition: driver.c:1497
POBJECT_TYPE _IoFileObjectType
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
_IOP_DEVICE_LIST_OPERATION
Definition: io.h:246
PFILE_OBJECT RelatedFileObject
Definition: io.h:370
ULONG NTAPI PnpDetermineResourceListSize(IN PCM_RESOURCE_LIST ResourceList)
Definition: pnpmgr.c:1943
BOOLEAN Override
Definition: io.h:384
CREATE_FILE_TYPE CreateFileType
Definition: io.h:382
long LONG
Definition: pedump.c:60
NTSTATUS IopRemoveDevice(IN PDEVICE_NODE DeviceNode)
CSHORT Type
Definition: io.h:329
struct _IO_INTERRUPT * PIO_INTERRUPT
_In_ PEPROCESS _In_ KPROCESSOR_MODE AccessMode
Definition: mmfuncs.h:396
INIT_FUNCTION NTSTATUS NTAPI IopInitializePlugPlayServices(VOID)
Definition: pnpinit.c:431
NTSTATUS NTAPI IopParseDevice(IN PVOID ParseObject, IN PVOID ObjectType, IN OUT PACCESS_STATE AccessState, IN KPROCESSOR_MODE AccessMode, IN ULONG Attributes, IN OUT PUNICODE_STRING CompleteName, IN OUT PUNICODE_STRING RemainingName, IN OUT PVOID Context, IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL, OUT PVOID *Object)
Definition: file.c:324
struct _IO_BUS_TYPE_GUID_LIST * PIO_BUS_TYPE_GUID_LIST
PDEVICE_OBJECT DeviceObject
Definition: io.h:309
LIST_ENTRY Link
Definition: io.h:411
BOOLEAN NTAPI IopInitializeReserveIrp(IN PRESERVE_IRP_ALLOCATOR ReserveIrpAllocator)
Definition: irp.c:549
LIST_ENTRY IopDeviceActionRequestList
Definition: devaction.c:45
struct _DRIVER_REINIT_ITEM * PDRIVER_REINIT_ITEM
VOID NTAPI IopDeleteDevice(IN PVOID ObjectBody)
Definition: device.c:52
PIRP NTAPI IopAllocateReserveIrp(IN CCHAR StackSize)
Definition: irp.c:573
NTSTATUS IopStopDevice(IN PDEVICE_NODE DeviceNode)
unsigned char BOOLEAN
VOID(NTAPI * PDRIVER_REINITIALIZE)(_In_ struct _DRIVER_OBJECT *DriverObject, _In_opt_ PVOID Context, _In_ ULONG Count)
Definition: iotypes.h:4106
static GUID * Guid
Definition: apphelp.c:93
PVOID FilterContext
Definition: io.h:99
NTSTATUS IoDestroyDriverList(VOID)
HANDLE ServiceHandle
Definition: io.h:414
struct _OPEN_PACKET * POPEN_PACKET
#define _Out_
Definition: no_sal2.h:323
static PDRIVER_OBJECT DriverObject
Definition: template.c:42
VOID NTAPI IopDeleteFile(IN PVOID ObjectBody)
Definition: file.c:1354
INIT_FUNCTION VOID FASTCALL IopInitializeSystemDrivers(VOID)
Definition: driver.c:1144
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ SECURITY_INFORMATION SecurityInformation
Definition: fltkernel.h:1339
NTSTATUS NTAPI IopQueryNameInternal(IN PVOID ObjectBody, IN BOOLEAN HasName, IN BOOLEAN QueryDosName, OUT POBJECT_NAME_INFORMATION ObjectNameInfo, IN ULONG Length, OUT PULONG ReturnLength, IN KPROCESSOR_MODE PreviousMode)
Definition: file.c:1943
struct _LOAD_UNLOAD_PARAMS * PLOAD_UNLOAD_PARAMS
PDRIVER_OBJECT DriverObject
Definition: io.h:469
Definition: bufpool.h:45
USHORT TagPosition
Definition: io.h:415
NTSTATUS FASTCALL IopInitializeDevice(IN PDEVICE_NODE DeviceNode, IN PDRIVER_OBJECT DriverObject)
IO_REMOVE_LOCK_DBG_BLOCK Dbg
Definition: io.h:345
VOID NTAPI IoInitVpbImplementation(VOID)
_Inout_ PFILE_OBJECT FileObject
Definition: cdprocs.h:588
_In_ PCUNICODE_STRING _In_ PVOID Driver
Definition: cmfuncs.h:32
INIT_FUNCTION VOID FASTCALL IopInitializeBootDrivers(VOID)
Definition: driver.c:941
struct _DEVICETREE_TRAVERSE_CONTEXT * PDEVICETREE_TRAVERSE_CONTEXT
_COMPLETION_PACKET_TYPE
Definition: io.h:265
BOOLEAN IoRemoteBootClient
Definition: init.c:68
NTSTATUS Status
Definition: io.h:418
enum _DEVICE_ACTION DEVICE_ACTION
Definition: io.h:248
struct _BOOT_DRIVER_NODE BOOT_DRIVER_NODE
NTSTATUS NTAPI PnpRootDriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
Definition: pnproot.c:1470
enum _IOP_TRANSFER_TYPE IOP_TRANSFER_TYPE
BOOLEAN DeleteOnly
Definition: io.h:386
FAST_MUTEX
Definition: extypes.h:17
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
Definition: ketypes.h:675
enum _FILE_INFORMATION_CLASS FILE_INFORMATION_CLASS
Definition: directory.c:44
#define _Out_opt_
Definition: no_sal2.h:339
NTSTATUS NTAPI IopCleanupFailedIrp(IN PFILE_OBJECT FileObject, IN PKEVENT EventObject, IN PVOID Buffer OPTIONAL)
Definition: irp.c:45
_In_ HANDLE Handle
Definition: extypes.h:390
struct _SHUTDOWN_ENTRY SHUTDOWN_ENTRY
_SECURITY_DESCRIPTOR_TYPE
Definition: io.h:532
VOID PnpInit2(VOID)
_In_ KPROCESSOR_MODE PreviousMode
Definition: sefuncs.h:103
NTSTATUS IoCreateDriverList(VOID)
CHAR FileObjectBody[sizeof(FILE_OBJECT)]
Definition: io.h:355
NTSTATUS IopQueueTargetDeviceEvent(const GUID *Guid, PUNICODE_STRING DeviceIds)
Definition: plugplay.c:46
UNICODE_STRING Name
Definition: io.h:428
struct _IO_WORKITEM IO_WORKITEM
_In_z_ PWSTR RegistryPath
Definition: classp.h:1930
PDRIVER_OBJECT DriverObject
Definition: io.h:459
PIRP NTAPI IopAllocateIrpMustSucceed(IN CCHAR StackSize)
Definition: irp.c:716
LPTSTR ServiceName
Definition: ServiceMain.c:15
PDEVICE_OBJECT NTAPI IopGetDeviceAttachmentBase(IN PDEVICE_OBJECT DeviceObject)
Definition: file.c:1485
BOOLEAN QueryOnly
Definition: io.h:385
ULONG Tag
Definition: io.h:429
PDEVICE_OBJECT DeviceObject
Definition: io.h:298
_In_ UCHAR BufferLength
Definition: scsi.h:4066
NTSTATUS NTAPI IopReferenceDeviceObject(IN PDEVICE_OBJECT DeviceObject)
DWORD * PSECURITY_INFORMATION
Definition: ms-dtyp.idl:311
USHORT FileAttributes
Definition: io.h:374
char CCHAR
Definition: typedefs.h:51
INT POOL_TYPE
Definition: typedefs.h:78
VOID NTAPI IopRemoveTimerFromTimerList(IN PIO_TIMER Timer)
Definition: iotimer.c:70
struct _IO_INTERRUPT IO_INTERRUPT
INIT_FUNCTION NTSTATUS NTAPI IopReassignSystemRoot(IN PLOADER_PARAMETER_BLOCK LoaderBlock, OUT PANSI_STRING NtBootPath)
Definition: arcname.c:836
_In_ PLIST_ENTRY _In_ PSTRING _In_ USHORT _In_opt_ PSTRING _In_opt_ PSTRING _In_ ULONG _In_ ULONG Action
Definition: fsrtlfuncs.h:738
PVOID NTAPI IoGetFileObjectFilterContext(IN PFILE_OBJECT FileObject)
Definition: file.c:2495
NTSTATUS NTAPI IoComputeDesiredAccessFileObject(IN PFILE_OBJECT FileObject, IN PACCESS_MASK DesiredAccess)
Definition: util.c:26
VOID IopBootLog(IN PUNICODE_STRING DriverName, IN BOOLEAN Success)
volatile LONG ReserveIrpInUse
Definition: io.h:524
struct _IO_BUS_TYPE_GUID_LIST IO_BUS_TYPE_GUID_LIST
VOID NTAPI IopInitErrorLog(VOID)
PIO_BUS_TYPE_GUID_LIST IopBusTypeGuidList
struct _EXTENDED_IO_REMOVE_LOCK * PEXTENDED_IO_REMOVE_LOCK
enum _IOP_DEVICE_LIST_OPERATION * PIOP_DEVICE_LIST_OPERATION
OBJECT_ATTRIBUTES OriginalAttributes
Definition: io.h:371
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
Definition: fltkernel.h:2653
PVPB NTAPI IopCheckVpbMounted(IN POPEN_PACKET OpenPacket, IN PDEVICE_OBJECT DeviceObject, IN PUNICODE_STRING RemainingName, OUT PNTSTATUS Status)
Definition: volume.c:81
PDEVICE_NODE FirstDeviceNode
Definition: io.h:504
NTSTATUS FASTCALL IopGetDriverObject(OUT PDRIVER_OBJECT *DriverObject, IN PUNICODE_STRING ServiceName, IN BOOLEAN FileSystem)
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE _In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Out_ PIO_STATUS_BLOCK _In_opt_ PLARGE_INTEGER _In_ ULONG _In_ ULONG _In_ ULONG _In_ ULONG CreateOptions
Definition: fltkernel.h:1230
#define _Inout_
Definition: no_sal2.h:244
struct _DRIVER_REINIT_ITEM DRIVER_REINIT_ITEM
PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
Definition: io.h:381
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:101
ULONG InternalFlags
Definition: io.h:390
CCHAR KPROCESSOR_MODE
Definition: ketypes.h:7
VOID NTAPI IopReadyDeviceObjects(IN PDRIVER_OBJECT Driver)
Definition: device.c:34
KSPIN_LOCK SpinLock
Definition: io.h:321
* PFILE_OBJECT
Definition: iotypes.h:1962
VOID NTAPI IopDeleteIoCompletion(PVOID ObjectBody)
Definition: iocomp.c:100
static IUnknown Object
Definition: main.c:512
Definition: Node.h:9
NTSTATUS IopGetSystemPowerDeviceObject(IN PDEVICE_OBJECT *DeviceObject)
_In_opt_ PVOID _In_opt_ PUNICODE_STRING _In_ PSECURITY_DESCRIPTOR _In_ PACCESS_STATE AccessState
Definition: sefuncs.h:414
NTSTATUS NTAPI IopCreateVpb(IN PDEVICE_OBJECT DeviceObject)
Definition: volume.c:163
unsigned char UCHAR
Definition: xmlstorage.h:181
VOID IopNotifyPlugPlayNotification(IN PDEVICE_OBJECT DeviceObject, IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory, IN LPCGUID Event, IN PVOID EventCategoryData1, IN PVOID EventCategoryData2)
Definition: pnpnotify.c:36
PDRIVER_OBJECT IopRootDriverObject
Definition: pnpmgr.c:27
char * PBOOLEAN
Definition: retypes.h:11
PBOOT_DRIVER_LIST_ENTRY DataTableEntry
Definition: io.h:413
Status
Definition: gdiplustypes.h:24
DRIVER_INITIALIZE * PDRIVER_INITIALIZE
Definition: iotypes.h:2134
Definition: io.h:327
NTSTATUS Status
Definition: io.h:399
#define NTSTATUS
Definition: precomp.h:20
PVOID *typedef PHANDLE
Definition: ntsecpkg.h:454
NTSTATUS NTAPI PnpRegMultiSzToUnicodeStrings(IN PKEY_VALUE_FULL_INFORMATION KeyValueInformation, OUT PUNICODE_STRING *UnicodeStringList, OUT PULONG UnicodeStringCount)
Definition: pnputil.c:47
struct _IO_STACK_LOCATION * CurrentStackLocation
Definition: io.h:283
_In_ ULONG _In_ BATTERY_QUERY_INFORMATION_LEVEL _In_ LONG _In_ ULONG _Out_ PULONG ReturnedLength
Definition: batclass.h:187
WORK_QUEUE_ITEM Item
Definition: io.h:308
Definition: btrfs_drv.h:1922
Definition: ketypes.h:535
Definition: typedefs.h:119
PDRIVER_FS_NOTIFICATION FSDNotificationProc
Definition: io.h:460
_In_ USHORT _In_ CCHAR StackSize
Definition: iofuncs.h:1056
LARGE_INTEGER TimeStamp
Definition: io.h:334
_In_ UCHAR MinorFunction
Definition: pofuncs.h:42
ULONG Failed
Definition: io.h:416
struct _FILE_OBJECT_EXTENSION * PFILE_OBJECT_EXTENSION
* PDEVICE_CAPABILITIES
Definition: iotypes.h:932
NTSTATUS PiPerformSyncDeviceAction(_In_ PDEVICE_OBJECT DeviceObject, _In_ DEVICE_ACTION Action)
Perfom a device operation synchronously via PiQueueDeviceAction.
Definition: devaction.c:2531
PVOID IopTriageDumpDataBlocks[64]
Definition: iomgr.c:47
PDRIVER_OBJECT DriverObject
Definition: io.h:403
UNICODE_STRING Group
Definition: io.h:427
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
Definition: ketypes.h:675
struct _IOP_MINI_COMPLETION_PACKET * PIOP_MINI_COMPLETION_PACKET
#define _In_
Definition: no_sal2.h:204
IN PDEVICE_OBJECT DeviceObject
Definition: fatprocs.h:1569
NTSTATUS NTAPI IopLoadUnloadDriver(_In_opt_ PCUNICODE_STRING RegistryPath, _Inout_ PDRIVER_OBJECT *DriverObject)
Definition: driver.c:1917
NTSTATUS(* DEVICETREE_TRAVERSE_ROUTINE)(IN PDEVICE_NODE DeviceNode, IN PVOID Context)
Definition: io.h:486
VOID NTAPI IopUnloadDevice(IN PDEVICE_OBJECT DeviceObject)
Definition: device.c:390
struct _FS_CHANGE_NOTIFY_ENTRY FS_CHANGE_NOTIFY_ENTRY
static GENERIC_MAPPING GenericMapping
Definition: SeInheritance.c:11
KSPIN_LOCK IopDeviceTreeLock
Definition: devnode.c:19
struct _RESERVE_IRP_ALLOCATOR * PRESERVE_IRP_ALLOCATOR
NTSTATUS NTAPI IopGetRegistryValue(IN HANDLE Handle, IN PWSTR ValueName, OUT PKEY_VALUE_FULL_INFORMATION *Information)
Definition: pnpmgr.c:1742
PCUNICODE_STRING RegistryPath
Definition: io.h:400
LIST_ENTRY ListEntry
Definition: io.h:331
_Must_inspect_result_ _In_ USHORT _In_ PHIDP_PREPARSED_DATA _Out_writes_to_ LengthAttributes PHIDP_EXTENDED_ATTRIBUTES Attributes
Definition: hidpi.h:348
BOOLEAN NTAPI IopVerifyDiskSignature(IN PDRIVE_LAYOUT_INFORMATION_EX DriveLayout, IN PARC_DISK_SIGNATURE ArcDiskSignature, OUT PULONG Signature)
Definition: arcname.c:944
NTSTATUS NTAPI IopOpenRegistryKeyEx(PHANDLE KeyHandle, HANDLE ParentKey, PUNICODE_STRING Name, ACCESS_MASK DesiredAccess)
Definition: pnpmgr.c:1591
PVOID IoOpenSymlink(IN PVOID SymbolicLink)
VOID NTAPI IopShutdownBaseFileSystems(IN PLIST_ENTRY ListHead)
Definition: volume.c:354
struct _LOAD_UNLOAD_PARAMS LOAD_UNLOAD_PARAMS
VOID NTAPI IopLogWorker(IN PVOID Parameter)
Definition: error.c:148
ULONG Processed
Definition: io.h:417
unsigned short USHORT
Definition: pedump.c:61
_DEVICE_ACTION
Definition: io.h:544
INIT_FUNCTION NTSTATUS NTAPI IopCreateArcNames(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: arcname.c:41
struct _FILE_OBJECT_EXTENSION FILE_OBJECT_EXTENSION
PIO_BUS_TYPE_GUID_LIST PnpBusTypeGuidList
Definition: pnpmgr.c:28
PDUMMY_FILE_OBJECT LocalFileObject
Definition: io.h:388
NTSTATUS FASTCALL IopInitializeDriverModule(IN PDEVICE_NODE DeviceNode, IN PLDR_DATA_TABLE_ENTRY ModuleObject, IN PUNICODE_STRING ServiceName, IN BOOLEAN FileSystemDriver, OUT PDRIVER_OBJECT *DriverObject)
Definition: driver.c:469
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK DesiredAccess
Definition: create.c:4137
enum _IOP_DEVICE_LIST_OPERATION IOP_DEVICE_LIST_OPERATION
ULONG KSPIN_LOCK
Definition: env_spec_w32.h:72
NTSTATUS NTAPI IopQueryDeviceCapabilities(PDEVICE_NODE DeviceNode, PDEVICE_CAPABILITIES DeviceCaps)
Definition: devaction.c:329
LIST_ENTRY ListEntry
Definition: io.h:280
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
NTSTATUS FASTCALL IopAttachFilterDrivers(IN PDEVICE_NODE DeviceNode, IN HANDLE EnumSubKey, IN HANDLE ClassKey, IN BOOLEAN Lower)
unsigned int * PULONG
Definition: retypes.h:1
struct _IOP_MINI_COMPLETION_PACKET IOP_MINI_COMPLETION_PACKET
struct _DUMMY_FILE_OBJECT DUMMY_FILE_OBJECT
NTSTATUS NTAPI IoChangeFileObjectFilterContext(IN PFILE_OBJECT FileObject, IN PVOID FilterContext, IN BOOLEAN Define)
Definition: file.c:2510
VOID IopInitPnpNotificationImplementation(VOID)
INIT_FUNCTION NTSTATUS NTAPI IopUpdateRootKey(VOID)
Definition: pnpmgr.c:1533
struct _EXTENDED_IO_REMOVE_LOCK EXTENDED_IO_REMOVE_LOCK
IO_COMPLETION_ROUTINE * PIO_COMPLETION_ROUTINE
Definition: iotypes.h:2487
BOOLEAN NTAPI PnpRegSzToString(IN PWCHAR RegSzData, IN ULONG RegSzLength, OUT PUSHORT StringLength OPTIONAL)
Definition: pnputil.c:171
PDRIVER_OBJECT DriverObject
Definition: io.h:333
enum _SECURITY_DESCRIPTOR_TYPE SECURITY_DESCRIPTOR_TYPE
ULONG CreateOptions
Definition: io.h:373
VOID IopInitDriverImplementation(VOID)
KEVENT WaitEvent
Definition: io.h:525
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
Definition: fsrtlfuncs.h:219
Definition: iotypes.h:168
#define OUT
Definition: typedefs.h:40
VOID NTAPI IopStoreSystemPartitionInformation(IN PUNICODE_STRING NtSystemPartitionDeviceName, IN PUNICODE_STRING OsLoaderPathName)
Definition: iorsrce.c:697
BOOLEAN FullAttributes
Definition: io.h:387
struct _DEVICETREE_TRAVERSE_CONTEXT DEVICETREE_TRAVERSE_CONTEXT
NTSTATUS NTAPI IopAssignDeviceResources(IN PDEVICE_NODE DeviceNode)
Definition: pnpres.c:1105
ULONG Disposition
Definition: io.h:379
struct tagContext Context
Definition: acpixf.h:1034
struct _SHUTDOWN_ENTRY * PSHUTDOWN_ENTRY
unsigned int ULONG
Definition: retypes.h:1
ACCESS_MASK * PACCESS_MASK
Definition: nt_native.h:41
VOID NTAPI IopDereferenceVpbAndFree(IN PVPB Vpb)
Definition: volume.c:191
VOID NTAPI IopDoNameTransmogrify(IN PIRP Irp, IN PFILE_OBJECT FileObject, IN PREPARSE_DATA_BUFFER DataBuffer)
Definition: file.c:170
NTSTATUS IopFreeDeviceNode(IN PDEVICE_NODE DeviceNode)
LIST_ENTRY FsChangeNotifyList
Definition: io.h:458
PDRIVER_REINITIALIZE ReinitRoutine
Definition: io.h:470
NTSTATUS NTAPI IopAcquireFileObjectLock(_In_ PFILE_OBJECT FileObject, _In_ KPROCESSOR_MODE AccessMode, _In_ BOOLEAN Alertable, _Out_ PBOOLEAN LockFailed)
Definition: file.c:2449
NTSTATUS NTAPI IopQueryName(IN PVOID ObjectBody, IN BOOLEAN HasName, OUT POBJECT_NAME_INFORMATION ObjectNameInfo, IN ULONG Length, OUT PULONG ReturnLength, IN KPROCESSOR_MODE PreviousMode)
Definition: file.c:1925
VOID NTAPI IopDeleteDriver(IN PVOID ObjectBody)
Definition: driver.c:60
VOID(NTAPI * PKNORMAL_ROUTINE)(IN PVOID NormalContext OPTIONAL, IN PVOID SystemArgument1 OPTIONAL, IN PVOID SystemArgument2 OPTIONAL)
Definition: ketypes.h:632
PDEVICE_NODE DeviceNode
Definition: io.h:499
PKINTERRUPT Interrupt[MAXIMUM_PROCESSORS]
Definition: io.h:320
PDEVICE_OBJECT TopDeviceObjectHint
Definition: io.h:391
_In_ PSECURITY_SUBJECT_CONTEXT _In_ BOOLEAN _In_ ACCESS_MASK _In_ ACCESS_MASK _Outptr_opt_ PPRIVILEGE_SET _In_ PGENERIC_MAPPING _In_ KPROCESSOR_MODE _Out_ PACCESS_MASK GrantedAccess
Definition: sefuncs.h:13
GENERIC_MAPPING IopFileMapping
Definition: iomgr.c:49
Definition: io.h:447
Definition: io.h:249
static const WCHAR Signature[]
Definition: parser.c:141
_Must_inspect_result_ _In_ FLT_CONTEXT_TYPE _In_ SIZE_T _In_ POOL_TYPE PoolType
Definition: fltkernel.h:1444
short CSHORT
Definition: umtypes.h:127
NTSTATUS FinalStatus
Definition: io.h:367
NTSTATUS NTAPI IopInitiatePnpIrp(IN PDEVICE_OBJECT DeviceObject, IN PIO_STATUS_BLOCK IoStatusBlock, IN UCHAR MinorFunction, IN PIO_STACK_LOCATION Stack)
NTSTATUS IopActionInitChildServices(IN PDEVICE_NODE DeviceNode, IN PVOID Context)
POBJECT_TYPE IoCompletionType
Definition: iocomp.c:16
NTSTATUS NTAPI IopDetectResourceConflict(IN PCM_RESOURCE_LIST ResourceList, IN BOOLEAN Silent, OUT OPTIONAL PCM_PARTIAL_RESOURCE_DESCRIPTOR ConflictingDescriptor)
Definition: pnpres.c:1251
NTSTATUS IopActionConfigureChildServices(IN PDEVICE_NODE DeviceNode, IN PVOID Context)
INIT_FUNCTION NTSTATUS NTAPI PiInitCacheGroupInformation(VOID)
Definition: pnpinit.c:99
SECURITY_OPERATION_CODE
Definition: setypes.h:142
unsigned short * PUSHORT
Definition: retypes.h:2
ULONG ACCESS_MASK
Definition: nt_native.h:40
struct _DUMMY_FILE_OBJECT * PDUMMY_FILE_OBJECT
IN OUT PVCB IN PDEVICE_OBJECT IN PVPB Vpb
Definition: fatprocs.h:1673
VOID IopSaveBootLogToFile(VOID)
Definition: bootlog.c:293
INIT_FUNCTION VOID IopStartBootLog(VOID)
Definition: bootlog.c:43
DRIVER_FS_NOTIFICATION * PDRIVER_FS_NOTIFICATION
Definition: iotypes.h:7012
static const WCHAR SymbolicLink[]
Definition: interface.c:31
PDEVICE_NODE FASTCALL IopGetDeviceNode(IN PDEVICE_OBJECT DeviceObject)
NTSTATUS NTAPI IoCompletion(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Ctx)
Definition: control.c:382
PDRIVER_OBJECT DriverObject
Definition: io.h:412
NTSTATUS PnpRootCreateDevice(IN PUNICODE_STRING ServiceName, IN OPTIONAL PDRIVER_OBJECT DriverObject, OUT PDEVICE_OBJECT *PhysicalDeviceObject, OUT OPTIONAL PUNICODE_STRING FullInstancePath)
Definition: pnproot.c:185
Definition: io.h:456
INIT_FUNCTION VOID IopInitBootLog(IN BOOLEAN StartBootLog)
enum _IOP_TRANSFER_TYPE * PIOP_TRANSFER_TYPE
_Inout_ PFCB _Inout_ PUNICODE_STRING RemainingName
Definition: cdprocs.h:801
USHORT NTAPI PipGetDriverTagPriority(IN HANDLE ServiceHandle)
Definition: pnpinit.c:197
enum _CREATE_FILE_TYPE CREATE_FILE_TYPE
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68