HAL Version 3.10 Exports

The table below lists the 69 exports from the HAL in version 3.10. These functions (and one variable) are in effect the original programming interface for the HAL. They represent nearly three quarters of all HAL exports that have ever existed. All but a handful are still exported as of version 10.0.

Just over half these original exports are documented in the Windows Driver Kit (WDK) for Windows Vista, dated January 2007. Some, highlighted red in the table, are documented only as being reserved. More, highlighted pink, are documented as obsolete.

For no functions does the WDK documentation list (or even hint about) the applicable versions. Header files in the WDK apply version constraints (in terms of the NTDDI_VERSION macro) to most declarations. However, this is a recent practice. When Microsoft started adding this information, it seems no trouble was taken to determine any function’s origin from before Windows 2000. Yet instead of leaving the old declarations without version constraints, trouble was taken to add version information in the full knowledge that the addition would be factually incorrect for the overwhelming majority of these old functions. In this way, nearly all these original functions are said to require at least Windows 2000. Assume that a function’s declaration is (misleadingly) for Windows 2000 and higher except if stated otherwise. Yes, for some of the “stated otherwise” cases the declarations are even more misleading, e.g., by saying the function requires Windows XP.

All the documented functions are declared in one or another of the WDK header files. Where reference is made to an undocumented function that has a WDK declaration, it is highlighted orange. Functions that the WDK neither documents nor declares are highlighted yellow, as being completely undocumented.

Function Remarks
HalAcquireDisplayOwnership  
HalAllocateAdapterChannel not declared if USE_DMA_MACROS defined and NTDDK.H included, or if WDM.H included
HalAllocateCommonBuffer redefined as inline function if USE_DMA_MACROS defined and NTDDK.H included, or if WDM.H included
HalBeginSystemInterrupt x86 only
HalCalibratePerformanceCounter  
HalDisableSystemInterrupt discontinued in 6.0
HalDisplayString redirected to kernel function InbvDisplayString in 5.0 and higher
HalEnableSystemInterrupt discontinued in 6.0
HalEndSystemInterrupt x86 only
HalFlushCommonBuffer  
HalFreeCommonBuffer redefined as inline function if USE_DMA_MACROS defined and NTDDK.H included, or if WDM.H included
HalGetAdapter  
HalGetBusData not declared if NO_LEGACY_DRIVERS defined
HalGetEnvironmentVariable  
HalGetInterruptVector not declared if NO_LEGACY_DRIVERS defined
HalHandleNMI  
HalInitSystem  
HalInitializeProcessor  
HalMakeBeep not declared if NO_LEGACY_DRIVERS defined
HalQueryDisplayParameters  
HalQueryRealTimeClock  
HalReadDmaCounter redefined as inline function if USE_DMA_MACROS defined and NTDDK.H included, or if WDM.H included
HalReportResourceUsage  
HalRequestIpi  
HalRequestSoftwareInterrupt  
HalReturnToFirmware  
HalSetDisplayParameters  
HalSetEnvironmentVariable  
HalSetProfileInterval  
HalSetRealTimeClock  
HalStartNextProcessor  
HalStartProfileInterrupt  
HalStopProfileInterrupt  
HalTranslateBusAddress  
IoAssignDriveLetters discontinued in 6.1
IoFlushAdapterBuffers redefined as inline function if USE_DMA_MACROS defined and NTDDK.H included, or if WDM.H included
IoFreeAdapterChannel redefined as inline function if USE_DMA_MACROS defined and NTDDK.H included, or if WDM.H included
IoFreeMapRegisters redefined as inline function if USE_DMA_MACROS defined and NTDDK.H included, or if WDM.H included
IoMapTransfer redefined as inline function if USE_DMA_MACROS defined and NTDDK.H included, or if WDM.H included
IoReadPartitionTable declared for Windows XP and higher;
also exported from kernel in 5.1 and higher
IoSetPartitionInformation declared for Windows XP and higher;
also exported from kernel in 5.1 and higher
IoWritePartitionTable declared for Windows XP and higher;
also exported from kernel in 5.1 and higher
KdComPortInUse (data)  
KdPortGetByte discontinued in 5.1
KdPortInitialize discontinued in 5.1
KdPortPollByte discontinued in 5.1
KdPortPutByte discontinued in 5.1
KdPortRestore discontinued in 5.1
KdPortSave discontinued in 5.1
KeAcquireSpinLock x86 only;
forwarded to kernel function KeAcquireSpinLock in 6.2 and higher;
redefined by macro in terms of KfAcquireSpinLock;
supported for x64 by macro in terms of kernel export KeAcquireSpinLockRaiseToDpc
KeFlushWriteBuffer declared without version constraint
KeGetCurrentIrql x86 only;
declared without version constraint;
supported for x64 as kernel export in 5.2 from Windows Server 2003 SP1, and higher
KeLowerIrql x86 only;
redefined by macro in terms of KfLowerIrql;
supported for x64 as kernel export in 5.2 from Windows Server 2003 SP1, and higher
KeQueryPerformanceCounter  
KeRaiseIrql x86 only;
redefined by macro in terms of KfRaiseIrql;
supported for x64 by same macro
KeReleaseSpinLock x86 only;
forwarded to kernel function KeReleaseSpinLock in 6.2 and higher;
redefined by macro in terms of KfReleaseSpinLock;
supported for x64 as kernel export in 5.2 from Windows Server 2003 SP1, and higher
KeStallExecutionProcessor  
READ_PORT_BUFFER_UCHAR x86 only;
declared without version constraint;
supported for x64 by inline function
READ_PORT_BUFFER_ULONG x86 only;
declared without version constraint;
supported for x64 by inline function
READ_PORT_BUFFER_USHORT x86 only;
declared without version constraint;
supported for x64 by inline function
READ_PORT_UCHAR x86 only;
declared without version constraint;
supported for x64 by inline function
READ_PORT_ULONG x86 only;
declared without version constraint;
supported for x64 by inline function
READ_PORT_USHORT x86 only;
declared without version constraint;
supported for x64 by inline function
WRITE_PORT_BUFFER_UCHAR x86 only;
declared without version constraint;
supported for x64 by inline function
WRITE_PORT_BUFFER_ULONG x86 only;
declared without version constraint;
supported for x64 by inline function
WRITE_PORT_BUFFER_USHORT x86 only;
declared without version constraint;
supported for x64 by inline function
WRITE_PORT_UCHAR x86 only;
declared without version constraint;
supported for x64 by inline function
WRITE_PORT_ULONG x86 only;
declared without version constraint;
supported for x64 by inline function
WRITE_PORT_USHORT x86 only;
declared without version constraint;
supported for x64 by inline function