2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: ntoskrnl/include/io.h
5 * PURPOSE: Internal header for the I/O Manager
6 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
11 // Define this if you want debugging support
13 #define _IO_DEBUG_ 0x01
16 // These define the Debug Masks Supported
18 #define IO_IRP_DEBUG 0x01
19 #define IO_FILE_DEBUG 0x02
20 #define IO_API_DEBUG 0x04
21 #define IO_CTL_DEBUG 0x08
24 // Debug/Tracing support
27 #ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented
28 #define IOTRACE(x, ...) \
30 DbgPrintEx("%s [%.16s] - ", \
32 PsGetCurrentProcess()->ImageFileName); \
33 DbgPrintEx(__VA_ARGS__); \
36 #define IOTRACE(x, ...) \
37 if (x & IopTraceLevel) \
39 DbgPrint("%s [%.16s] - ", \
41 PsGetCurrentProcess()->ImageFileName); \
42 DbgPrint(__VA_ARGS__); \
46 #define IOTRACE(x, fmt, ...) DPRINT(fmt, ##__VA_ARGS__)
50 // Registry path to the enumeration root key
52 #define ENUM_ROOT L"\\Registry\\Machine\\System\\CurrentControlSet\\Enum"
55 // Returns the type of METHOD_ used in this IOCTL
57 #define IO_METHOD_FROM_CTL_CODE(c) (c & 0x00000003)
60 // Bugcheck codes for RAM disk booting
63 // No LoaderXIPRom descriptor was found in the loader memory list
65 #define RD_NO_XIPROM_DESCRIPTOR 1
67 // Unable to open the RAM disk driver (ramdisk.sys or \Device\Ramdisk)
69 #define RD_NO_RAMDISK_DRIVER 2
71 // FSCTL_CREATE_RAM_DISK failed
73 #define RD_FSCTL_FAILED 3
75 // Unable to create GUID string from binary GUID
77 #define RD_GUID_CONVERT_FAILED 4
79 // Unable to create symbolic link pointing to the RAM disk device
81 #define RD_SYMLINK_CREATE_FAILED 5
84 // We can call the Ob Inlined API, it's the same thing
86 #define IopAllocateMdlFromLookaside \
87 ObpAllocateObjectCreateInfoBuffer
88 #define IopFreeMdlFromLookaside \
89 ObpFreeCapturedAttributes
92 // Determines if the IRP is Synchronous
94 #define IsIrpSynchronous(Irp, FileObject) \
95 ((Irp->Flags & IRP_SYNCHRONOUS_API) || \
98 FileObject->Flags & FO_SYNCHRONOUS_IO)) \
101 // Returns the internal Device Object Extension
103 #define IoGetDevObjExtension(DeviceObject) \
104 ((PEXTENDED_DEVOBJ_EXTENSION) \
105 (DeviceObject->DeviceObjectExtension)) \
108 // Returns the internal Driver Object Extension
110 #define IoGetDrvObjExtension(DriverObject) \
111 ((PEXTENDED_DRIVER_EXTENSION) \
112 (DriverObject->DriverExtension)) \
116 * IopDeviceNodeSetFlag(
117 * PDEVICE_NODE DeviceNode,
120 #define IopDeviceNodeSetFlag(DeviceNode, Flag) \
121 ((DeviceNode)->Flags |= (Flag))
125 * IopDeviceNodeClearFlag(
126 * PDEVICE_NODE DeviceNode,
129 #define IopDeviceNodeClearFlag(DeviceNode, Flag) \
130 ((DeviceNode)->Flags &= ~(Flag))
134 * IopDeviceNodeHasFlag(
135 * PDEVICE_NODE DeviceNode,
138 #define IopDeviceNodeHasFlag(DeviceNode, Flag) \
139 (((DeviceNode)->Flags & (Flag)) > 0)
143 * IopDeviceNodeSetUserFlag(
144 * PDEVICE_NODE DeviceNode,
147 #define IopDeviceNodeSetUserFlag(DeviceNode, UserFlag) \
148 ((DeviceNode)->UserFlags |= (UserFlag))
152 * IopDeviceNodeClearUserFlag(
153 * PDEVICE_NODE DeviceNode,
156 #define IopDeviceNodeClearUserFlag(DeviceNode, UserFlag)\
157 ((DeviceNode)->UserFlags &= ~(UserFlag))
161 * IopDeviceNodeHasUserFlag(
162 * PDEVICE_NODE DeviceNode,
165 #define IopDeviceNodeHasUserFlag(DeviceNode, UserFlag) \
166 (((DeviceNode)->UserFlags & (UserFlag)) > 0)
170 * IopDeviceNodeSetProblem(
171 * PDEVICE_NODE DeviceNode,
174 #define IopDeviceNodeSetProblem(DeviceNode, Problem) \
175 ((DeviceNode)->Problem |= (Problem))
179 * IopDeviceNodeClearProblem(
180 * PDEVICE_NODE DeviceNode,
183 #define IopDeviceNodeClearProblem(DeviceNode, Problem) \
184 ((DeviceNode)->Problem &= ~(Problem))
188 * IopDeviceNodeHasProblem(
189 * PDEVICE_NODE DeviceNode,
192 #define IopDeviceNodeHasProblem(DeviceNode, Problem) \
193 (((DeviceNode)->Problem & (Problem)) > 0)
197 * IopInitDeviceTreeTraverseContext(
198 * PDEVICETREE_TRAVERSE_CONTEXT DeviceTreeTraverseContext,
199 * PDEVICE_NODE DeviceNode,
200 * DEVICETREE_TRAVERSE_ROUTINE Action,
203 #define IopInitDeviceTreeTraverseContext( \
204 _DeviceTreeTraverseContext, _DeviceNode, _Action, \
206 (_DeviceTreeTraverseContext)->FirstDeviceNode = \
208 (_DeviceTreeTraverseContext)->Action = (_Action); \
209 (_DeviceTreeTraverseContext)->Context = (_Context); }
213 * IopIsValidPhysicalDeviceObject(
214 * IN PDEVICE_OBJECT PhysicalDeviceObject);
216 #define IopIsValidPhysicalDeviceObject(PhysicalDeviceObject) \
217 (((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject) && \
218 (((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode) && \
219 (((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode->Flags & DNF_ENUMERATED))
222 // Device List Operations
224 typedef enum _IOP_DEVICE_LIST_OPERATION
228 } IOP_DEVICE_LIST_OPERATION
, *PIOP_DEVICE_LIST_OPERATION
;
231 // Transfer statistics
233 typedef enum _IOP_TRANSFER_TYPE
238 } IOP_TRANSFER_TYPE
, *PIOP_TRANSFER_TYPE
;
241 // Packet Types when piggybacking on the IRP Overlay
243 typedef enum _COMPLETION_PACKET_TYPE
245 IopCompletionPacketIrp
,
246 IopCompletionPacketMini
,
247 IopCompletionPacketQuota
248 } COMPLETION_PACKET_TYPE
, *PCOMPLETION_PACKET_TYPE
;
251 // Special version of the IRP Overlay used to optimize I/O completion
252 // by not using up a separate structure.
254 typedef struct _IOP_MINI_COMPLETION_PACKET
258 LIST_ENTRY ListEntry
;
261 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
268 ULONG_PTR IoStatusInformation
;
269 } IOP_MINI_COMPLETION_PACKET
, *PIOP_MINI_COMPLETION_PACKET
;
272 // I/O Completion Context for IoSetIoCompletionRoutineEx
274 typedef struct _IO_UNLOAD_SAFE_COMPLETION_CONTEXT
276 PDEVICE_OBJECT DeviceObject
;
278 PIO_COMPLETION_ROUTINE CompletionRoutine
;
279 } IO_UNLOAD_SAFE_COMPLETION_CONTEXT
, *PIO_UNLOAD_SAFE_COMPLETION_CONTEXT
;
282 // I/O Wrapper around the Executive Work Item
284 typedef struct _IO_WORKITEM
286 WORK_QUEUE_ITEM Item
;
287 PDEVICE_OBJECT DeviceObject
;
288 PIO_WORKITEM_ROUTINE WorkerRoutine
;
293 // I/O Wrapper around the Kernel Interrupt
295 typedef struct _IO_INTERRUPT
297 KINTERRUPT FirstInterrupt
;
298 PKINTERRUPT Interrupt
[MAXIMUM_PROCESSORS
];
300 } IO_INTERRUPT
, *PIO_INTERRUPT
;
303 // I/O Error Log Packet Header
305 typedef struct _ERROR_LOG_ENTRY
309 LIST_ENTRY ListEntry
;
310 PDEVICE_OBJECT DeviceObject
;
311 PDRIVER_OBJECT DriverObject
;
312 LARGE_INTEGER TimeStamp
;
313 } ERROR_LOG_ENTRY
, *PERROR_LOG_ENTRY
;
316 // Event Log LPC Message
318 typedef struct _ELF_API_MSG
322 IO_ERROR_LOG_MESSAGE IoErrorMessage
;
323 } ELF_API_MSG
, *PELF_API_MSG
;
326 // To simplify matters, the kernel is made to support both the checked and free
327 // version of the I/O Remove Lock in the same binary. This structure includes
328 // both, since the DDK has the structure with a compile-time #ifdef.
330 typedef struct _EXTENDED_IO_REMOVE_LOCK
332 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
333 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
334 } EXTENDED_IO_REMOVE_LOCK
, *PEXTENDED_IO_REMOVE_LOCK
;
337 // Dummy File Object used inside the Open Packet so that OB knows how to
338 // deal with the Object Pointer even though it's not a real file.
340 typedef struct _DUMMY_FILE_OBJECT
342 OBJECT_HEADER ObjectHeader
;
343 CHAR FileObjectBody
[sizeof(FILE_OBJECT
)];
344 } DUMMY_FILE_OBJECT
, *PDUMMY_FILE_OBJECT
;
347 // Open packet used as a context for Device/File parsing so that the parse
348 // routine can know what operation is being requested.
350 typedef struct _OPEN_PACKET
354 PFILE_OBJECT FileObject
;
355 NTSTATUS FinalStatus
;
356 ULONG_PTR Information
;
358 PFILE_OBJECT RelatedFileObject
;
359 OBJECT_ATTRIBUTES OriginalAttributes
;
360 LARGE_INTEGER AllocationSize
;
362 USHORT FileAttributes
;
368 PFILE_BASIC_INFORMATION BasicInformation
;
369 PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
;
370 CREATE_FILE_TYPE CreateFileType
;
371 PVOID ExtraCreateParameters
;
375 BOOLEAN FullAttributes
;
376 PDUMMY_FILE_OBJECT LocalFileObject
;
377 BOOLEAN TraversedMountPoint
;
379 PDEVICE_OBJECT TopDeviceObjectHint
;
380 } OPEN_PACKET
, *POPEN_PACKET
;
383 // Parameters packet for Load/Unload work item's context
385 typedef struct _LOAD_UNLOAD_PARAMS
388 PCUNICODE_STRING RegistryPath
;
389 WORK_QUEUE_ITEM WorkItem
;
391 PDRIVER_OBJECT DriverObject
;
392 } LOAD_UNLOAD_PARAMS
, *PLOAD_UNLOAD_PARAMS
;
395 // Boot Driver List Entry
397 typedef struct _DRIVER_INFORMATION
400 PDRIVER_OBJECT DriverObject
;
401 PBOOT_DRIVER_LIST_ENTRY DataTableEntry
;
402 HANDLE ServiceHandle
;
407 } DRIVER_INFORMATION
, *PDRIVER_INFORMATION
;
412 typedef struct _BOOT_DRIVER_NODE
414 BOOT_DRIVER_LIST_ENTRY ListEntry
;
415 UNICODE_STRING Group
;
419 } BOOT_DRIVER_NODE
, *PBOOT_DRIVER_NODE
;
422 // List of Bus Type GUIDs
424 typedef struct _IO_BUS_TYPE_GUID_LIST
429 } IO_BUS_TYPE_GUID_LIST
, *PIO_BUS_TYPE_GUID_LIST
;
430 extern PIO_BUS_TYPE_GUID_LIST IopBusTypeGuidList
;
433 // Shutdown entry for registed devices
435 typedef struct _SHUTDOWN_ENTRY
437 LIST_ENTRY ShutdownList
;
438 PDEVICE_OBJECT DeviceObject
;
439 } SHUTDOWN_ENTRY
, *PSHUTDOWN_ENTRY
;
442 // F/S Notification entry for registered File Systems
444 typedef struct _FS_CHANGE_NOTIFY_ENTRY
446 LIST_ENTRY FsChangeNotifyList
;
447 PDRIVER_OBJECT DriverObject
;
448 PDRIVER_FS_NOTIFICATION FSDNotificationProc
;
449 } FS_CHANGE_NOTIFY_ENTRY
, *PFS_CHANGE_NOTIFY_ENTRY
;
452 // Driver (Boot) Re-Initialization Entry
454 typedef struct _DRIVER_REINIT_ITEM
456 LIST_ENTRY ItemEntry
;
457 PDRIVER_OBJECT DriverObject
;
458 PDRIVER_REINITIALIZE ReinitRoutine
;
460 } DRIVER_REINIT_ITEM
, *PDRIVER_REINIT_ITEM
;
463 // Called on every visit of a node during a preorder-traversal of the device
465 // If the routine returns STATUS_UNSUCCESSFUL the traversal will stop and
466 // STATUS_SUCCESS is returned to the caller who initiated the tree traversal.
467 // Any other returned status code will be returned to the caller. If a status
468 // code that indicates an error (other than STATUS_UNSUCCESSFUL) is returned,
469 // the traversal is stopped immediately and the status code is returned to
474 (*DEVICETREE_TRAVERSE_ROUTINE
)(
475 IN PDEVICE_NODE DeviceNode
,
480 // Context information for traversing the device tree
482 typedef struct _DEVICETREE_TRAVERSE_CONTEXT
485 // Current device node during a traversal
487 PDEVICE_NODE DeviceNode
;
490 // Initial device node where we start the traversal
492 PDEVICE_NODE FirstDeviceNode
;
495 // Action routine to be called for every device node
497 DEVICETREE_TRAVERSE_ROUTINE Action
;
500 // Context passed to the action routine
503 } DEVICETREE_TRAVERSE_CONTEXT
, *PDEVICETREE_TRAVERSE_CONTEXT
;
510 PnpDetermineResourceListSize(IN PCM_RESOURCE_LIST ResourceList
);
514 IopAssignDeviceResources(
515 IN PDEVICE_NODE DeviceNode
520 IopFixupResourceListWithRequirements(
521 IN PIO_RESOURCE_REQUIREMENTS_LIST RequirementsList
,
522 OUT PCM_RESOURCE_LIST
*ResourceList
527 IopDetectResourceConflict(
528 IN PCM_RESOURCE_LIST ResourceList
,
530 OUT OPTIONAL PCM_PARTIAL_RESOURCE_DESCRIPTOR ConflictingDescriptor
538 PipCallDriverAddDevice(
539 IN PDEVICE_NODE DeviceNode
,
540 IN BOOLEAN LoadDriver
,
541 IN PDRIVER_OBJECT DriverObject
546 IopInitializePlugPlayServices(
562 IopInitDriverImplementation(
567 IopInitPnpNotificationImplementation(
572 IopNotifyPlugPlayNotification(
573 IN PDEVICE_OBJECT DeviceObject
,
574 IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
576 IN PVOID EventCategoryData1
,
577 IN PVOID EventCategoryData2
581 IopGetSystemPowerDeviceObject(
582 IN PDEVICE_OBJECT
*DeviceObject
587 PipAllocateDeviceNode(
588 IN PDEVICE_OBJECT PhysicalDeviceObject
593 IN PDEVICE_NODE ParentNode
,
594 IN PDEVICE_OBJECT PhysicalDeviceObject
,
595 IN PUNICODE_STRING ServiceName
,
596 OUT PDEVICE_NODE
*DeviceNode
601 IN PDEVICE_NODE DeviceNode
606 IopQueryDeviceCapabilities(PDEVICE_NODE DeviceNode
,
607 PDEVICE_CAPABILITIES DeviceCaps
);
612 IN PDEVICE_OBJECT DeviceObject
,
613 IN PIO_STACK_LOCATION IoStackLocation
,
614 OUT PVOID
*Information
620 IN PDEVICE_OBJECT DeviceObject
,
621 IN PIO_STATUS_BLOCK IoStatusBlock
,
622 IN UCHAR MinorFunction
,
623 IN PIO_STACK_LOCATION Stack
629 IN PDEVICE_OBJECT DeviceObject
633 IopActionConfigureChildServices(
634 IN PDEVICE_NODE DeviceNode
,
639 IopActionInitChildServices(
640 IN PDEVICE_NODE DeviceNode
,
646 IN PDEVICE_OBJECT DeviceObject
661 IopInitPlugPlayEvents(VOID
);
664 IopQueueTargetDeviceEvent(
666 PUNICODE_STRING DeviceIds
670 IopInitializePnpServices(
671 IN PDEVICE_NODE DeviceNode
);
675 IopOpenRegistryKeyEx(
678 PUNICODE_STRING Name
,
679 ACCESS_MASK DesiredAccess
);
686 OUT PKEY_VALUE_FULL_INFORMATION
*Information
691 IopCreateRegistryKeyEx(
693 IN HANDLE BaseHandle OPTIONAL
,
694 IN PUNICODE_STRING KeyName
,
695 IN ACCESS_MASK DesiredAccess
,
696 IN ULONG CreateOptions
,
697 OUT PULONG Disposition OPTIONAL
702 IopTraverseDeviceTree(
703 PDEVICETREE_TRAVERSE_CONTEXT Context
);
716 PiInitCacheGroupInformation(
722 PpInitGetGroupOrderIndex(
723 IN HANDLE ServiceHandle
728 PipGetDriverTagPriority(
729 IN HANDLE ServiceHandle
734 PnpRegMultiSzToUnicodeStrings(
735 IN PKEY_VALUE_FULL_INFORMATION KeyValueInformation
,
736 OUT PUNICODE_STRING
*UnicodeStringList
,
737 OUT PULONG UnicodeStringCount
744 IN ULONG RegSzLength
,
745 OUT PUSHORT StringLength OPTIONAL
749 // Initialization Routines
754 IN PLOADER_PARAMETER_BLOCK LoaderBlock
759 IopReassignSystemRoot(
760 IN PLOADER_PARAMETER_BLOCK LoaderBlock
,
761 OUT PANSI_STRING NtBootPath
767 IN PLOADER_PARAMETER_BLOCK LoaderBlock
772 IopVerifyDiskSignature(
773 IN PDRIVE_LAYOUT_INFORMATION_EX DriveLayout
,
774 IN PARC_DISK_SIGNATURE ArcDiskSignature
,
779 // Device/Volume Routines
783 IopReadyDeviceObjects(
784 IN PDRIVER_OBJECT Driver
790 IN PDEVICE_NODE DeviceNode
,
791 IN PDRIVER_OBJECT DriverObject
796 IN PDEVICE_NODE DeviceNode
801 IN PDEVICE_NODE DeviceNode
806 IN PDEVICE_NODE DeviceNode
812 IN POPEN_PACKET OpenPacket
,
813 IN PDEVICE_OBJECT DeviceObject
,
814 IN PUNICODE_STRING RemainingName
,
821 IN PDEVICE_OBJECT DeviceObject
,
822 IN BOOLEAN AllowRawMount
,
823 IN BOOLEAN DeviceIsLocked
,
824 IN BOOLEAN Alertable
,
830 IN PVOID SymbolicLink
835 IN PVOID SymbolicLink
,
842 IN PDEVICE_OBJECT DeviceObject
847 IopDereferenceVpbAndFree(
853 IoInitFileSystemImplementation(
859 IoInitVpbImplementation(
865 IopReferenceDeviceObject(
866 IN PDEVICE_OBJECT DeviceObject
871 IopDereferenceDeviceObject(
872 IN PDEVICE_OBJECT DeviceObject
,
873 IN BOOLEAN ForceUnload
878 IoGetRelatedTargetDevice(
879 IN PFILE_OBJECT FileObject
,
880 OUT PDEVICE_OBJECT
*DeviceObject
886 IN PDEVICE_OBJECT DeviceObject
895 IN PFILE_OBJECT FileObject
,
896 IN PKEVENT EventObject
,
897 IN PVOID Buffer OPTIONAL
902 IopAbortInterruptedIrp(
903 IN PKEVENT EventObject
,
909 IopAllocateIrpMustSucceed(
917 IoInitShutdownNotification(
929 IopShutdownBaseFileSystems(
930 IN PLIST_ENTRY ListHead
934 // Boot logging support
938 IN BOOLEAN StartBootLog
953 IN PUNICODE_STRING DriverName
,
958 IopSaveBootLogToFile(
963 // I/O Cancellation Routines
972 IoInitCancelHandling(
983 IN PKNORMAL_ROUTINE
* NormalRoutine
,
984 IN PVOID
* NormalContext
,
985 IN PVOID
* SystemArgument1
,
986 IN PVOID
* SystemArgument2
990 // Error Logging Routines
1005 // Raw File System MiniDriver
1008 RawFsIsRawFileSystemDeviceObject(
1009 IN PDEVICE_OBJECT DeviceObject
1015 IN PDRIVER_OBJECT DriverObject
,
1016 IN PUNICODE_STRING RegistryPath
1020 // PnP Root MiniDriver
1025 IN PDRIVER_OBJECT DriverObject
,
1026 IN PUNICODE_STRING RegistryPath
1030 PnpRootCreateDevice(
1031 IN PUNICODE_STRING ServiceName
,
1032 IN OPTIONAL PDRIVER_OBJECT DriverObject
,
1033 OUT PDEVICE_OBJECT
*PhysicalDeviceObject
,
1034 OUT OPTIONAL PUNICODE_STRING FullInstancePath
1038 PnpRootRegisterDevice(
1039 IN PDEVICE_OBJECT DeviceObject
);
1046 IopInitializeBootDrivers(
1052 IopInitializeSystemDrivers(
1058 IopCreateDriver(IN PUNICODE_STRING DriverName OPTIONAL
,
1059 IN PDRIVER_INITIALIZE InitializationFunction
,
1060 IN PUNICODE_STRING RegistryPath
,
1061 IN PCUNICODE_STRING ServiceName
,
1062 PLDR_DATA_TABLE_ENTRY ModuleObject
,
1063 OUT PDRIVER_OBJECT
*pDriverObject
);
1074 OUT PDRIVER_OBJECT
*DriverObject
,
1075 IN PUNICODE_STRING ServiceName
,
1076 IN BOOLEAN FileSystem
1081 IopLoadServiceModule(
1082 IN PUNICODE_STRING ServiceName
,
1083 OUT PLDR_DATA_TABLE_ENTRY
*ModuleObject
1088 IopLoadUnloadDriver(
1089 _In_opt_ PCUNICODE_STRING RegistryPath
,
1090 _Inout_ PDRIVER_OBJECT
*DriverObject
1095 IopInitializeDriverModule(
1096 IN PDEVICE_NODE DeviceNode
,
1097 IN PLDR_DATA_TABLE_ENTRY ModuleObject
,
1098 IN PUNICODE_STRING ServiceName
,
1099 IN BOOLEAN FileSystemDriver
,
1100 OUT PDRIVER_OBJECT
*DriverObject
1105 IopAttachFilterDrivers(
1106 IN PDEVICE_NODE DeviceNode
,
1112 IopReinitializeDrivers(
1118 IopReinitializeBootDrivers(
1127 IopDeleteDevice(IN PVOID ObjectBody
);
1132 IN PVOID ParseObject
,
1133 IN PVOID ObjectType
,
1134 IN OUT PACCESS_STATE AccessState
,
1135 IN KPROCESSOR_MODE AccessMode
,
1136 IN ULONG Attributes
,
1137 IN OUT PUNICODE_STRING CompleteName
,
1138 IN OUT PUNICODE_STRING RemainingName
,
1139 IN OUT PVOID Context
,
1140 IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL
,
1147 IN PVOID ParseObject
,
1148 IN PVOID ObjectType
,
1149 IN OUT PACCESS_STATE AccessState
,
1150 IN KPROCESSOR_MODE AccessMode
,
1151 IN ULONG Attributes
,
1152 IN OUT PUNICODE_STRING CompleteName
,
1153 IN OUT PUNICODE_STRING RemainingName
,
1154 IN OUT PVOID Context OPTIONAL
,
1155 IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL
,
1167 IopGetSetSecurityObject(
1168 IN PVOID ObjectBody
,
1169 IN SECURITY_OPERATION_CODE OperationCode
,
1170 IN PSECURITY_INFORMATION SecurityInformation
,
1171 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1172 IN OUT PULONG BufferLength
,
1173 OUT PSECURITY_DESCRIPTOR
*OldSecurityDescriptor
,
1174 IN POOL_TYPE PoolType
,
1175 IN OUT PGENERIC_MAPPING GenericMapping
1181 IN PVOID ObjectBody
,
1183 OUT POBJECT_NAME_INFORMATION ObjectNameInfo
,
1185 OUT PULONG ReturnLength
,
1186 IN KPROCESSOR_MODE PreviousMode
1192 IN PEPROCESS Process OPTIONAL
,
1194 IN ACCESS_MASK GrantedAccess
,
1195 IN ULONG ProcessHandleCount
,
1196 IN ULONG SystemHandleCount
1201 IoGetFileObjectFilterContext(
1202 IN PFILE_OBJECT FileObject
1207 IoChangeFileObjectFilterContext(
1208 IN PFILE_OBJECT FileObject
,
1209 IN PVOID FilterContext
,
1215 IopDoNameTransmogrify(
1217 IN PFILE_OBJECT FileObject
,
1218 IN PREPARSE_DATA_BUFFER DataBuffer
1222 // I/O Timer Routines
1226 IopInitTimerImplementation(
1232 IopRemoveTimerFromTimerList(
1237 // I/O Completion Routines
1241 IopDeleteIoCompletion(
1251 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1255 // Configuration Routines
1259 IopFetchConfigurationInformation(OUT PWSTR
* SymbolicLinkList
,
1261 IN ULONG ExpectedInterfaces
,
1262 IN PULONG Interfaces
1267 IopStoreSystemPartitionInformation(IN PUNICODE_STRING NtSystemPartitionDeviceName
,
1268 IN PUNICODE_STRING OsLoaderPathName
1274 extern POBJECT_TYPE IoCompletionType
;
1275 extern PDEVICE_NODE IopRootDeviceNode
;
1276 extern KSPIN_LOCK IopDeviceTreeLock
;
1277 extern ULONG IopTraceLevel
;
1278 extern GENERAL_LOOKASIDE IopMdlLookasideList
;
1279 extern GENERIC_MAPPING IopCompletionMapping
;
1280 extern GENERIC_MAPPING IopFileMapping
;
1281 extern POBJECT_TYPE _IoFileObjectType
;
1282 extern HAL_DISPATCH _HalDispatchTable
;
1283 extern LIST_ENTRY IopErrorLogListHead
;
1284 extern ULONG IopNumTriageDumpDataBlocks
;
1285 extern PVOID IopTriageDumpDataBlocks
[64];
1286 extern PIO_BUS_TYPE_GUID_LIST PnpBusTypeGuidList
;
1287 extern PDRIVER_OBJECT IopRootDriverObject
;
1288 extern KSPIN_LOCK IopDeviceRelationsSpinLock
;
1289 extern LIST_ENTRY IopDeviceRelationsRequestList
;
1292 // Inlined Functions