Geoff Chappell, Software Analyst
The table on this page lists all the functions and variables that appear in the export directory of any known x86 or x64 build of the HAL. It gives for each export just brief summaries of the applicable HAL versions and of the status with respect to Microsoft’s documentation.
This master list is intended as a key to other lists which may develop in time. Some detail on each function’s availability and documentation status may be found by looking for the function in the history lists (expand the Versions folder in the Table of Contents), according to its first appearance as shown here. Some (very few) functions link directly from this page to an attempt at alternative documentation. Additional explanatory notes follow the table.
Function | Applicable Versions | Documentation Status |
---|---|---|
ExAcquireFastMutex | 3.51 and higher (x86 only) | documented |
ExReleaseFastMutex | 3.51 and higher (x86 only) | documented |
ExTryToAcquireFastMutex | 3.51 and higher (x86 only) | documented |
HalAcpiGetTableEx | 6.2 and higher | |
HalAcquireDisplayOwnership | 3.51 and higher | documented as reserved |
HalAdjustResourceList | 3.51 and higher | |
HalAllProcessorsStarted | 3.51 and higher | |
HalAllocateAdapterChannel | 3.51 and higher | documented as reserved |
HalAllocateCommonBuffer | 3.51 and higher | documented as obsolete |
HalAllocateCrashDumpRegisters | 3.51 and higher | documented as reserved |
HalAllocateHardwareCounters | 6.1 and higher | documented |
HalAssignSlotResources | 3.51 and higher | documented as obsolete |
HalBeginSystemInterrupt | 3.51 and higher (x86 only) | |
HalBugCheckSystem | 6.0 and higher | declared in NTDDK.H |
HalCalibratePerformanceCounter | 3.51 and higher | |
HalCallBios | 5.2 to 6.1 (x64 only) | |
HalClearSoftwareInterrupt | 3.51 and higher | |
HalConvertDeviceIdtToIrql | 6.0 and higher | |
HalDisableInterrupt | 6.0 and higher | |
HalDisableSystemInterrupt | 3.51 to 5.2 | |
HalDisplayString | 3.51 and higher | |
HalDmaAllocateCrashDumpRegistersEx | 6.2 and higher | |
HalDmaFreeCrashDumpRegistersEx | 6.2 and higher | |
HalDynamicProcessorStarted | 6.0 from original Windows Vista only | |
HalEnableInterrupt | 6.0 and higher | |
HalEnableSystemInterrupt | 3.51 to 5.2 | |
HalEndSystemInterrupt | 3.51 and higher (x86 only) | |
HalEnumerateEnvironmentVariablesEx | 6.0 and higher | |
HalEnumerateProcessors | 6.0 and higher (x64 only); 10.0 and higher (x86 also) |
|
HalFlushCommonBuffer | 3.51 and higher | |
HalFreeCommonBuffer | 3.51 and higher | documented as obsolete |
HalFreeHardwareCounters | 6.1 and higher | documented |
HalGetAdapter | 3.51 and higher | documented as obsolete |
HalGetBusData | 3.51 and higher | documented as obsolete |
HalGetBusDataByOffset | 3.51 and higher | documented as obsolete |
HalGetEnvironmentVariable | 3.51 and higher | |
HalGetEnvironmentVariableEx | 6.0 and higher | |
HalGetInterruptTargetInformation | 6.0 and higher | |
HalGetInterruptVector | 3.51 and higher | documented as obsolete |
HalGetMemoryCachingRequirements | 6.1 and higher | |
HalGetMessageRoutingInfo | 6.0 and higher | |
HalGetProcessorIdByNtNumber | 6.0 from Windows Vista SP1, and higher | |
HalGetVectorInput | 6.0 and higher | |
HalHandleMcheck | 5.2 and higher (x64 only) | |
HalHandleNMI | 3.51 and higher | |
HalInitSystem | 3.51 and higher | |
HalInitializeBios | 6.0 and higher | |
HalInitializeOnResume | 6.0 from Windows Vista SP1, and higher | |
HalInitializeProcessor | 3.51 and higher | |
HalIsHyperThreadingEnabled | 5.2 and higher (x64 only) | |
HalMakeBeep | 3.51 and higher | documented as reserved |
HalMcUpdateReadPCIConfig | 6.1 only | |
HalPerformEndOfInterrupt | 6.1 and higher (x64 only) | |
HalProcessorIdle | 3.51 and higher | |
HalQueryDisplayParameters | 3.51 and higher | |
HalQueryEnvironmentVariableInfoEx | 6.0 from Windows Vista SP1, and higher | |
HalQueryMaximumProcessorCount | 6.0 from Windows Vista SP1, and higher | |
HalQueryRealTimeClock | 3.51 and higher | |
HalReadDmaCounter | 3.51 and higher | documented as obsolete |
HalRegisterDynamicProcessor | 6.0 from Windows Vista SP1, and higher | |
HalRegisterErrataCallbacks | 6.0 and higher | |
HalReportResourceUsage | 3.51 and higher | |
HalRequestClockInterrupt | 6.1 and higher | |
HalRequestDeferredRecoveryServiceInterrupt | 6.1 and higher (x64 only) | |
HalRequestIpi | 3.51 and higher | |
HalRequestIpiSpecifyVector | 6.2 and higher | |
HalRequestSoftwareInterrupt | 3.51 and higher | |
HalReturnToFirmware | 3.51 and higher | |
HalSendNMI | 5.2 and higher (x64 only) | |
HalSendSoftwareInterrupt | 5.2 and higher (x64 only); 10.0 and higher (x86 also) |
|
HalSetBusData | 3.51 and higher | documented as obsolete |
HalSetBusDataByOffset | 3.51 and higher | documented as obsolete |
HalSetDisplayParameters | 3.51 and higher | |
HalSetEnvironmentVariable | 3.51 and higher | |
HalSetEnvironmentVariableEx | 6.0 and higher | |
HalSetProfileInterval | 3.51 and higher | |
HalSetRealTimeClock | 3.51 and higher | |
HalSetTimeIncrement | 3.51 to 6.2 | |
HalStartDynamicProcessor | 6.0 and higher | |
HalStartNextProcessor | 3.51 and higher | |
HalStartProfileInterrupt | 3.51 and higher | |
HalStopProfileInterrupt | 3.51 and higher | |
HalSystemVectorDispatchEntry | 4.0 and higher | |
HalTranslateBusAddress | 3.51 and higher | documented as obsolete |
IoAssignDriveLetters | 3.51 to 6.0 | |
IoFlushAdapterBuffers | 3.51 and higher | documented as obsolete |
IoFreeAdapterChannel | 3.51 and higher | documented as obsolete |
IoFreeMapRegisters | 3.51 and higher | documented as obsolete |
IoMapTransfer | 3.51 and higher | documented as obsolete |
IoReadPartitionTable | 3.51 and higher | documented as obsolete |
IoSetPartitionInformation | 3.51 and higher | documented as obsolete |
IoWritePartitionTable | 3.51 and higher | documented as obsolete |
KdComPortInUse (data) | 3.51 and higher | |
KdHvComPortInUse (data) | 6.2 and higher | |
KdPortGetByte | 3.51 to 5.0 | |
KdPortInitialize | 3.51 to 5.0 | |
KdPortPollByte | 3.51 to 5.0 | |
KdPortPutByte | 3.51 to 5.0 | |
KdPortRestore | 3.51 to 5.0 | |
KdPortSave | 3.51 to 5.0 | |
KeAcquireInStackQueuedSpinLock | 5.1 and higher (x86 only) | documented |
KeAcquireInStackQueuedSpinLockRaiseToSynch | 5.1 and higher (x86 only) | |
KeAcquireQueuedSpinLock | 5.0 and higher (x86 only) | documented as reserved (IFS) |
KeAcquireQueuedSpinLockRaiseToSynch | 5.0 and higher (x86 only) | |
KeAcquireSpinLock | 3.51 and higher (x86 only) | documented |
KeAcquireSpinLockRaiseToSynch | 4.0 and higher (x86 only) | documented as reserved |
KeFlushWriteBuffer | 3.51 and higher | documented as reserved |
KeGetCurrentIrql | 3.51 and higher (x86 only) | documented |
KeLowerIrql | 3.51 and higher (x86 only) | documented |
KeQueryPerformanceCounter | 3.51 and higher | documented |
KeRaiseIrql | 3.51 and higher (x86 only) | documented |
KeRaiseIrqlToDpcLevel | 4.0 and higher (x86 only) | documented |
KeRaiseIrqlToSynchLevel | 4.0 and higher (x86 only) | documented as reserved |
KeReleaseInStackQueuedSpinLock | 5.1 and higher (x86 only) | documented |
KeReleaseQueuedSpinLock | 5.0 and higher (x86 only) | documented as reserved (IFS) |
KeReleaseSpinLock | 3.51 and higher (x86 only) | documented |
KeStallExecutionProcessor | 3.51 and higher | documented |
KeTryToAcquireQueuedSpinLock | 5.0 and higher (x86 only) | documented as reserved (IFS) |
KeTryToAcquireQueuedSpinLockRaiseToSynch | 5.0 and higher (x86 only) | |
KfAcquireSpinLock | 3.51 and higher (x86 only) | declared in WDM.H |
KfLowerIrql | 3.51 and higher (x86 only) | declared in WDM.H |
KfRaiseIrql | 3.51 and higher (x86 only) | declared in WDM.H |
KfReleaseSpinLock | 3.51 and higher (x86 only) | declared in WDM.H |
READ_PORT_BUFFER_UCHAR | 3.51 and higher (x86 only) | documented |
READ_PORT_BUFFER_ULONG | 3.51 and higher (x86 only) | documented |
READ_PORT_BUFFER_USHORT | 3.51 and higher (x86 only) | documented |
READ_PORT_UCHAR | 3.51 and higher (x86 only) | documented |
READ_PORT_ULONG | 3.51 and higher (x86 only) | documented |
READ_PORT_USHORT | 3.51 and higher (x86 only) | documented |
WRITE_PORT_BUFFER_UCHAR | 3.51 and higher (x86 only) | documented |
WRITE_PORT_BUFFER_ULONG | 3.51 and higher (x86 only) | documented |
WRITE_PORT_BUFFER_USHORT | 3.51 and higher (x86 only) | documented |
WRITE_PORT_UCHAR | 3.51 and higher (x86 only) | documented |
WRITE_PORT_ULONG | 3.51 and higher (x86 only) | documented |
WRITE_PORT_USHORT | 3.51 and higher (x86 only) | documented |
x86BiosAllocateBuffer | 6.0 and higher | |
x86BiosCall | 6.0 and higher | |
x86BiosExecuteInterrupt | 5.2 only (x64 only) | |
x86BiosFreeBuffer | 6.0 and higher | |
x86BiosInitializeBiosEx | 5.2 only (x64 only) | |
x86BiosReadMemory | 6.0 and higher | |
x86BiosTranslateAddress | 5.2 only (x64 only) | |
x86BiosWriteMemory | 6.0 and higher |
Function names are reproduced from the export directory of the HAL.DLL executable. All exports from the HAL are by name.
The HAL versions shown for each function are inferred from a study of public releases such as I have managed to find on MSDN discs. My holdings are incomplete, especially for the early history, and I anyway have no time for (or interest in) examining pre-release builds or hotfixes. Of necessity then, the table makes what I hope are reasonable assumptions about likely continuity, especially to suppose that a function will exist in future versions or that a function exists in all builds of a version if no counter-example is yet known. If you want more accurate or comprehensive information, try getting it from Microsoft.
A quick list of the studied versions is:
Except where otherwise stated, the reference for all comment on Microsoft’s documentation is the Windows Vista Windows Driver Kit (WDK) distributed by Microsoft on MSDN Disc 3667 dated January 2007. Though this ought to cover everything in the original Windows Vista, it does of course mean that no functions introduced for Windows 7 and Windows 8 are (yet) shown above as documented except if I happen to have noticed the documentation in a later WDK or online.
Several of the original HAL functions were later generalised so that although the HAL function continues to be exported it is merely a standard or default implementation which is better reached through the general mechanism. Such functions have since been documented as obsolete or reserved. Some others seem only ever to have been documented as reserved.
A few functions are not formally documented in the WDK, not even as being reserved, but are declared in one or another header file. All HAL exports, whether documented or not, have link-time support in the HAL.LIB import library.
Note that many HAL functions are arguably a private matter between the HAL and the kernel, and would not usefully be documented for programmers outside Microsoft’s few who work on the HAL and kernel. As a quick summary, you may care to know that just under one half of all HAL exports are documented, and the majority of these are documented as obsolete or reserved.