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_ 0x00
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, ...) DPRINT(__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 // Returns the size of a CM_RESOURCE_LIST
94 #define CM_RESOURCE_LIST_SIZE(ResList) \
95 (ResList->Count == 1) ? \
98 List[0].PartialResourceList. \
99 PartialDescriptors[(ResList)-> \
101 PartialResourceList. \
104 FIELD_OFFSET(CM_RESOURCE_LIST, List)
107 // Determines if the IRP is Synchronous
109 #define IsIrpSynchronous(Irp, FileObject) \
110 ((Irp->Flags & IRP_SYNCHRONOUS_API) || \
113 FileObject->Flags & FO_SYNCHRONOUS_IO)) \
116 // Returns the internal Device Object Extension
118 #define IoGetDevObjExtension(DeviceObject) \
119 ((PEXTENDED_DEVOBJ_EXTENSION) \
120 (DeviceObject->DeviceObjectExtension)) \
123 // Returns the internal Driver Object Extension
125 #define IoGetDrvObjExtension(DriverObject) \
126 ((PEXTENDED_DRIVER_EXTENSION) \
127 (DriverObject->DriverExtension)) \
131 * IopDeviceNodeSetFlag(
132 * PDEVICE_NODE DeviceNode,
135 #define IopDeviceNodeSetFlag(DeviceNode, Flag) \
136 ((DeviceNode)->Flags |= (Flag))
140 * IopDeviceNodeClearFlag(
141 * PDEVICE_NODE DeviceNode,
144 #define IopDeviceNodeClearFlag(DeviceNode, Flag) \
145 ((DeviceNode)->Flags &= ~(Flag))
149 * IopDeviceNodeHasFlag(
150 * PDEVICE_NODE DeviceNode,
153 #define IopDeviceNodeHasFlag(DeviceNode, Flag) \
154 (((DeviceNode)->Flags & (Flag)) > 0)
158 * IopDeviceNodeSetUserFlag(
159 * PDEVICE_NODE DeviceNode,
162 #define IopDeviceNodeSetUserFlag(DeviceNode, UserFlag) \
163 ((DeviceNode)->UserFlags |= (UserFlag))
167 * IopDeviceNodeClearUserFlag(
168 * PDEVICE_NODE DeviceNode,
171 #define IopDeviceNodeClearUserFlag(DeviceNode, UserFlag)\
172 ((DeviceNode)->UserFlags &= ~(UserFlag))
176 * IopDeviceNodeHasUserFlag(
177 * PDEVICE_NODE DeviceNode,
180 #define IopDeviceNodeHasUserFlag(DeviceNode, UserFlag) \
181 (((DeviceNode)->UserFlags & (UserFlag)) > 0)
185 * IopDeviceNodeSetProblem(
186 * PDEVICE_NODE DeviceNode,
189 #define IopDeviceNodeSetProblem(DeviceNode, Problem) \
190 ((DeviceNode)->Problem |= (Problem))
194 * IopDeviceNodeClearProblem(
195 * PDEVICE_NODE DeviceNode,
198 #define IopDeviceNodeClearProblem(DeviceNode, Problem) \
199 ((DeviceNode)->Problem &= ~(Problem))
203 * IopDeviceNodeHasProblem(
204 * PDEVICE_NODE DeviceNode,
207 #define IopDeviceNodeHasProblem(DeviceNode, Problem) \
208 (((DeviceNode)->Problem & (Problem)) > 0)
212 * IopInitDeviceTreeTraverseContext(
213 * PDEVICETREE_TRAVERSE_CONTEXT DeviceTreeTraverseContext,
214 * PDEVICE_NODE DeviceNode,
215 * DEVICETREE_TRAVERSE_ROUTINE Action,
218 #define IopInitDeviceTreeTraverseContext( \
219 _DeviceTreeTraverseContext, _DeviceNode, _Action, \
221 (_DeviceTreeTraverseContext)->FirstDeviceNode = \
223 (_DeviceTreeTraverseContext)->Action = (_Action); \
224 (_DeviceTreeTraverseContext)->Context = (_Context); }
227 // Device List Operations
229 typedef enum _IOP_DEVICE_LIST_OPERATION
233 } IOP_DEVICE_LIST_OPERATION
, *PIOP_DEVICE_LIST_OPERATION
;
236 // Transfer statistics
238 typedef enum _IOP_TRANSFER_TYPE
243 } IOP_TRANSFER_TYPE
, *PIOP_TRANSFER_TYPE
;
246 // Packet Types when piggybacking on the IRP Overlay
248 typedef enum _COMPLETION_PACKET_TYPE
250 IopCompletionPacketIrp
,
251 IopCompletionPacketMini
,
252 IopCompletionPacketQuota
253 } COMPLETION_PACKET_TYPE
, *PCOMPLETION_PACKET_TYPE
;
256 // Special version of the IRP Overlay used to optimize I/O completion
257 // by not using up a separate structure.
259 typedef struct _IOP_MINI_COMPLETION_PACKET
263 LIST_ENTRY ListEntry
;
266 struct _IO_STACK_LOCATION
*CurrentStackLocation
;
273 ULONG_PTR IoStatusInformation
;
274 } IOP_MINI_COMPLETION_PACKET
, *PIOP_MINI_COMPLETION_PACKET
;
277 // I/O Completion Context for IoSetIoCompletionRoutineEx
279 typedef struct _IO_UNLOAD_SAFE_COMPLETION_CONTEXT
281 PDEVICE_OBJECT DeviceObject
;
283 PIO_COMPLETION_ROUTINE CompletionRoutine
;
284 } IO_UNLOAD_SAFE_COMPLETION_CONTEXT
, *PIO_UNLOAD_SAFE_COMPLETION_CONTEXT
;
287 // I/O Wrapper around the Executive Work Item
289 typedef struct _IO_WORKITEM
291 WORK_QUEUE_ITEM Item
;
292 PDEVICE_OBJECT DeviceObject
;
293 PIO_WORKITEM_ROUTINE WorkerRoutine
;
298 // I/O Wrapper around the Kernel Interrupt
300 typedef struct _IO_INTERRUPT
302 KINTERRUPT FirstInterrupt
;
303 PKINTERRUPT Interrupt
[MAXIMUM_PROCESSORS
];
305 } IO_INTERRUPT
, *PIO_INTERRUPT
;
308 // I/O Error Log Packet Header
310 typedef struct _ERROR_LOG_ENTRY
314 LIST_ENTRY ListEntry
;
315 PDEVICE_OBJECT DeviceObject
;
316 PDRIVER_OBJECT DriverObject
;
317 LARGE_INTEGER TimeStamp
;
318 } ERROR_LOG_ENTRY
, *PERROR_LOG_ENTRY
;
321 // Event Log LPC Message
323 typedef struct _ELF_API_MSG
327 IO_ERROR_LOG_MESSAGE IoErrorMessage
;
328 } ELF_API_MSG
, *PELF_API_MSG
;
331 // To simplify matters, the kernel is made to support both the checked and free
332 // version of the I/O Remove Lock in the same binary. This structure includes
333 // both, since the DDK has the structure with a compile-time #ifdef.
335 typedef struct _EXTENDED_IO_REMOVE_LOCK
337 IO_REMOVE_LOCK_COMMON_BLOCK Common
;
338 IO_REMOVE_LOCK_DBG_BLOCK Dbg
;
339 } EXTENDED_IO_REMOVE_LOCK
, *PEXTENDED_IO_REMOVE_LOCK
;
342 // Dummy File Object used inside the Open Packet so that OB knows how to
343 // deal with the Object Pointer even though it's not a real file.
345 typedef struct _DUMMY_FILE_OBJECT
347 OBJECT_HEADER ObjectHeader
;
348 CHAR FileObjectBody
[sizeof(FILE_OBJECT
)];
349 } DUMMY_FILE_OBJECT
, *PDUMMY_FILE_OBJECT
;
352 // Open packet used as a context for Device/File parsing so that the parse
353 // routine can know what operation is being requested.
355 typedef struct _OPEN_PACKET
359 PFILE_OBJECT FileObject
;
360 NTSTATUS FinalStatus
;
361 ULONG_PTR Information
;
363 PFILE_OBJECT RelatedFileObject
;
364 OBJECT_ATTRIBUTES OriginalAttributes
;
365 LARGE_INTEGER AllocationSize
;
367 USHORT FileAttributes
;
373 PFILE_BASIC_INFORMATION BasicInformation
;
374 PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
;
375 CREATE_FILE_TYPE CreateFileType
;
376 PVOID MailslotOrPipeParameters
;
380 BOOLEAN FullAttributes
;
381 PDUMMY_FILE_OBJECT DummyFileObject
;
383 //PIO_DRIVER_CREATE_CONTEXT DriverCreateContext; Vista only, needs ROS DDK Update
384 } OPEN_PACKET
, *POPEN_PACKET
;
387 // Parameters packet for Load/Unload work item's context
389 typedef struct _LOAD_UNLOAD_PARAMS
392 PUNICODE_STRING ServiceName
;
393 WORK_QUEUE_ITEM WorkItem
;
395 PDRIVER_OBJECT DriverObject
;
396 } LOAD_UNLOAD_PARAMS
, *PLOAD_UNLOAD_PARAMS
;
399 // Boot Driver List Entry
401 typedef struct _DRIVER_INFORMATION
404 PDRIVER_OBJECT DriverObject
;
405 PBOOT_DRIVER_LIST_ENTRY DataTableEntry
;
406 HANDLE ServiceHandle
;
411 } DRIVER_INFORMATION
, *PDRIVER_INFORMATION
;
416 typedef struct _BOOT_DRIVER_NODE
418 BOOT_DRIVER_LIST_ENTRY ListEntry
;
419 UNICODE_STRING Group
;
423 } BOOT_DRIVER_NODE
, *PBOOT_DRIVER_NODE
;
426 // List of Bus Type GUIDs
428 typedef struct _IO_BUS_TYPE_GUID_LIST
433 } IO_BUS_TYPE_GUID_LIST
, *PIO_BUS_TYPE_GUID_LIST
;
434 extern PIO_BUS_TYPE_GUID_LIST IopBusTypeGuidList
;
437 // Shutdown entry for registed devices
439 typedef struct _SHUTDOWN_ENTRY
441 LIST_ENTRY ShutdownList
;
442 PDEVICE_OBJECT DeviceObject
;
443 } SHUTDOWN_ENTRY
, *PSHUTDOWN_ENTRY
;
446 // F/S Notification entry for registered File Systems
448 typedef struct _FS_CHANGE_NOTIFY_ENTRY
450 LIST_ENTRY FsChangeNotifyList
;
451 PDRIVER_OBJECT DriverObject
;
452 PDRIVER_FS_NOTIFICATION FSDNotificationProc
;
453 } FS_CHANGE_NOTIFY_ENTRY
, *PFS_CHANGE_NOTIFY_ENTRY
;
456 // Driver (Boot) Re-Initialization Entry
458 typedef struct _DRIVER_REINIT_ITEM
460 LIST_ENTRY ItemEntry
;
461 PDRIVER_OBJECT DriverObject
;
462 PDRIVER_REINITIALIZE ReinitRoutine
;
464 } DRIVER_REINIT_ITEM
, *PDRIVER_REINIT_ITEM
;
467 // Called on every visit of a node during a preorder-traversal of the device
469 // If the routine returns STATUS_UNSUCCESSFUL the traversal will stop and
470 // STATUS_SUCCESS is returned to the caller who initiated the tree traversal.
471 // Any other returned status code will be returned to the caller. If a status
472 // code that indicates an error (other than STATUS_UNSUCCESSFUL) is returned,
473 // the traversal is stopped immediately and the status code is returned to
478 (*DEVICETREE_TRAVERSE_ROUTINE
)(
479 IN PDEVICE_NODE DeviceNode
,
484 // Context information for traversing the device tree
486 typedef struct _DEVICETREE_TRAVERSE_CONTEXT
489 // Current device node during a traversal
491 PDEVICE_NODE DeviceNode
;
494 // Initial device node where we start the traversal
496 PDEVICE_NODE FirstDeviceNode
;
499 // Action routine to be called for every device node
501 DEVICETREE_TRAVERSE_ROUTINE Action
;
504 // Context passed to the action routine
507 } DEVICETREE_TRAVERSE_CONTEXT
, *PDEVICETREE_TRAVERSE_CONTEXT
;
514 PipCallDriverAddDevice(
515 IN PDEVICE_NODE DeviceNode
,
516 IN BOOLEAN LoadDriver
,
517 IN PDRIVER_OBJECT DriverObject
537 IopInitDriverImplementation(
542 IopInitPnpNotificationImplementation(
547 IopNotifyPlugPlayNotification(
548 IN PDEVICE_OBJECT DeviceObject
,
549 IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory
,
551 IN PVOID EventCategoryData1
,
552 IN PVOID EventCategoryData2
556 IopGetSystemPowerDeviceObject(
557 IN PDEVICE_OBJECT
*DeviceObject
562 IN PDEVICE_NODE ParentNode
,
563 IN PDEVICE_OBJECT PhysicalDeviceObject
,
564 IN PUNICODE_STRING ServiceName
,
565 OUT PDEVICE_NODE
*DeviceNode
570 IN PDEVICE_NODE DeviceNode
576 IN PDEVICE_OBJECT DeviceObject
,
577 IN PIO_STACK_LOCATION IoStackLocation
,
578 OUT PVOID
*Information
584 IN PDEVICE_OBJECT DeviceObject
,
585 IN PIO_STATUS_BLOCK IoStatusBlock
,
586 IN ULONG MinorFunction
,
587 IN PIO_STACK_LOCATION Stack
593 IN PDEVICE_OBJECT DeviceObject
597 IopActionConfigureChildServices(
598 IN PDEVICE_NODE DeviceNode
,
603 IopActionInitChildServices(
604 IN PDEVICE_NODE DeviceNode
,
610 IN PDEVICE_OBJECT DeviceObject
625 IopInitPlugPlayEvents(VOID
);
628 IopQueueTargetDeviceEvent(
630 PUNICODE_STRING DeviceIds
634 IopInitializePnpServices(
635 IN PDEVICE_NODE DeviceNode
);
639 IopOpenRegistryKeyEx(
642 PUNICODE_STRING Name
,
643 ACCESS_MASK DesiredAccess
);
647 IopGetRegistryValue(IN HANDLE Handle
,
649 OUT PKEY_VALUE_FULL_INFORMATION
*Information
);
657 PiInitCacheGroupInformation(
663 PpInitGetGroupOrderIndex(
664 IN HANDLE ServiceHandle
669 PipGetDriverTagPriority(
670 IN HANDLE ServiceHandle
675 PnpRegMultiSzToUnicodeStrings(
676 IN PKEY_VALUE_FULL_INFORMATION KeyValueInformation
,
677 OUT PUNICODE_STRING
*UnicodeStringList
,
678 OUT PULONG UnicodeStringCount
685 IN ULONG RegSzLength
,
686 OUT PUSHORT StringLength OPTIONAL
690 // Initialization Routines
695 IN PLOADER_PARAMETER_BLOCK LoaderBlock
700 IopReassignSystemRoot(
701 IN PLOADER_PARAMETER_BLOCK LoaderBlock
,
702 OUT PANSI_STRING NtBootPath
708 IN PLOADER_PARAMETER_BLOCK LoaderBlock
712 // Device/Volume Routines
716 IopReadyDeviceObjects(
717 IN PDRIVER_OBJECT Driver
723 IN PDEVICE_NODE DeviceNode
,
724 IN PDRIVER_OBJECT DriverObject
729 IN PDEVICE_NODE DeviceNode
735 IN POPEN_PACKET OpenPacket
,
736 IN PDEVICE_OBJECT DeviceObject
,
737 IN PUNICODE_STRING RemainingName
,
744 IN PDEVICE_OBJECT DeviceObject
,
745 IN BOOLEAN AllowRawMount
,
746 IN BOOLEAN DeviceIsLocked
,
747 IN BOOLEAN Alertable
,
753 IN PVOID SymbolicLink
758 IN PVOID SymbolicLink
,
765 IN PDEVICE_OBJECT DeviceObject
776 IoInitFileSystemImplementation(
782 IoInitVpbImplementation(
788 IopReferenceDeviceObject(
789 IN PDEVICE_OBJECT DeviceObject
794 IopDereferenceDeviceObject(
795 IN PDEVICE_OBJECT DeviceObject
,
796 IN BOOLEAN ForceUnload
801 IoGetRelatedTargetDevice(IN PFILE_OBJECT FileObject
,
802 OUT PDEVICE_OBJECT
*DeviceObject
811 IN PFILE_OBJECT FileObject
,
812 IN PKEVENT EventObject
,
813 IN PVOID Buffer OPTIONAL
818 IopAbortInterruptedIrp(
819 IN PKEVENT EventObject
,
827 IoInitShutdownNotification(
839 IopShutdownBaseFileSystems(
840 IN PLIST_ENTRY ListHead
844 // Boot logging support
848 IN BOOLEAN StartBootLog
863 IN PUNICODE_STRING DriverName
,
868 IopSaveBootLogToFile(
873 // I/O Cancellation Routines
882 IoInitCancelHandling(
893 IN PKNORMAL_ROUTINE
* NormalRoutine
,
894 IN PVOID
* NormalContext
,
895 IN PVOID
* SystemArgument1
,
896 IN PVOID
* SystemArgument2
900 // Error Logging Routines
915 // Raw File System MiniDriver
918 RawFsIsRawFileSystemDeviceObject(
919 IN PDEVICE_OBJECT DeviceObject
925 IN PDRIVER_OBJECT DriverObject
,
926 IN PUNICODE_STRING RegistryPath
930 // PnP Root MiniDriver
935 IN PDRIVER_OBJECT DriverObject
,
936 IN PUNICODE_STRING RegistryPath
941 IN PUNICODE_STRING ServiceName
,
942 OUT PDEVICE_OBJECT
*PhysicalDeviceObject
,
943 OUT OPTIONAL PUNICODE_STRING FullInstancePath
951 IopInitializeBootDrivers(
957 IopInitializeSystemDrivers(
963 IopCreateDriver(IN PUNICODE_STRING DriverName OPTIONAL
,
964 IN PDRIVER_INITIALIZE InitializationFunction
,
965 IN PUNICODE_STRING RegistryPath
,
967 IN ULONG SizeOfImage
,
968 OUT PDRIVER_OBJECT
*pDriverObject
);
979 OUT PDRIVER_OBJECT
*DriverObject
,
980 IN PUNICODE_STRING ServiceName
,
981 IN BOOLEAN FileSystem
986 IopLoadServiceModule(
987 IN PUNICODE_STRING ServiceName
,
988 OUT PLDR_DATA_TABLE_ENTRY
*ModuleObject
994 IN OUT PLOAD_UNLOAD_PARAMS LoadParams
999 IopInitializeDriverModule(
1000 IN PDEVICE_NODE DeviceNode
,
1001 IN PLDR_DATA_TABLE_ENTRY ModuleObject
,
1002 IN PUNICODE_STRING ServiceName
,
1003 IN BOOLEAN FileSystemDriver
,
1004 OUT PDRIVER_OBJECT
*DriverObject
1009 IopAttachFilterDrivers(
1010 IN PDEVICE_NODE DeviceNode
,
1016 IopReinitializeDrivers(
1022 IopReinitializeBootDrivers(
1031 IopDeleteDevice(IN PVOID ObjectBody
);
1036 IN PVOID ParseObject
,
1037 IN PVOID ObjectType
,
1038 IN OUT PACCESS_STATE AccessState
,
1039 IN KPROCESSOR_MODE AccessMode
,
1040 IN ULONG Attributes
,
1041 IN OUT PUNICODE_STRING CompleteName
,
1042 IN OUT PUNICODE_STRING RemainingName
,
1043 IN OUT PVOID Context OPTIONAL
,
1044 IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL
,
1051 IN PVOID ParseObject
,
1052 IN PVOID ObjectType
,
1053 IN OUT PACCESS_STATE AccessState
,
1054 IN KPROCESSOR_MODE AccessMode
,
1055 IN ULONG Attributes
,
1056 IN OUT PUNICODE_STRING CompleteName
,
1057 IN OUT PUNICODE_STRING RemainingName
,
1058 IN OUT PVOID Context OPTIONAL
,
1059 IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL
,
1072 IN PVOID ObjectBody
,
1073 IN SECURITY_OPERATION_CODE OperationCode
,
1074 IN PSECURITY_INFORMATION SecurityInformation
,
1075 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor
,
1076 IN OUT PULONG BufferLength
,
1077 OUT PSECURITY_DESCRIPTOR
*OldSecurityDescriptor
,
1078 IN POOL_TYPE PoolType
,
1079 IN OUT PGENERIC_MAPPING GenericMapping
1085 IN PVOID ObjectBody
,
1087 OUT POBJECT_NAME_INFORMATION ObjectNameInfo
,
1089 OUT PULONG ReturnLength
,
1090 IN KPROCESSOR_MODE PreviousMode
1096 IN PEPROCESS Process OPTIONAL
,
1098 IN ACCESS_MASK GrantedAccess
,
1099 IN ULONG ProcessHandleCount
,
1100 IN ULONG SystemHandleCount
1104 // I/O Timer Routines
1108 IopInitTimerImplementation(
1114 IopRemoveTimerFromTimerList(
1119 // I/O Completion Routines
1123 IopDeleteIoCompletion(
1133 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1139 extern POBJECT_TYPE IoCompletionType
;
1140 extern PDEVICE_NODE IopRootDeviceNode
;
1141 extern ULONG IopTraceLevel
;
1142 extern GENERAL_LOOKASIDE IopMdlLookasideList
;
1143 extern GENERIC_MAPPING IopCompletionMapping
;
1144 extern GENERIC_MAPPING IopFileMapping
;
1145 extern POBJECT_TYPE _IoFileObjectType
;
1146 extern HAL_DISPATCH _HalDispatchTable
;
1147 extern LIST_ENTRY IopErrorLogListHead
;
1148 extern ULONG IopNumTriageDumpDataBlocks
;
1149 extern PVOID IopTriageDumpDataBlocks
[64];
1152 // Inlined Functions