Geoff Chappell - Software Analyst
This page lists all the exports that were added to the HAL for version 6.0, i.e., for Windows Vista. One is exported only from the x64 builds (until version 10.0 makes it also an x86 export). Another doesn’t survive even to the first service pack, i.e., Windows Vista SP1 which is also Windows Server 2008. Five do not start until Windows Vista SP1. Although this version brings by far the largest increase in exported functionality since the HAL’s creation, not even one of the new functions is documented.
For the table below, documentation status is summarised by colour coding so that more detail can be given as Remarks with less text. (If you read this website with scripts enabled, then hovering the mouse over any coloured text will produce a tooltip that shows why the text is coloured.) Functions that have their own non-trivial documentation are shown with no background colour. Functions that appear to be completely undocumented are highlighted yellow. If a function is documented now but was not documented in the first contemporaneous Device Driver Kit (DDK), Windows Driver Kit (WDK) or Installable File System (IFS) Kit, then it is shaded yellow to retain some of its previous status. Many undocumented functions do at least have C-language declarations in one or another header file from the WDK. These are shaded orange, except for one special case. Some declarations are known only from “minwin” headers that Microsoft published in early editions of the WDK for Windows 10 which seem since to have been withdrawn. These are highlighted orange to indicate that public knowledge even of the declaration is exceptional.
Function | Export History |
---|---|
HalBugCheckSystem | x64 since 2004, forwarded to kernel |
HalConvertDeviceIdtToIrql | x64 since 2004, forwarded to kernel |
HalDisableInterrupt | x64 since 2004, forwarded to kernel |
HalDynamicProcessorStarted | discontinued in SP1 |
HalEnableInterrupt | x64 since 2004, forwarded to kernel |
HalEnumerateEnvironmentVariablesEx | x64 since 2004, forwarded to kernel |
HalEnumerateProcessors | x64-only before 10.0; x64 since 2004, forwarded to kernel |
HalGetEnvironmentVariableEx | x64 since 2004, forwarded to kernel |
HalGetInterruptTargetInformation | x64 since 2004, forwarded to kernel |
HalGetMessageRoutingInfo | x64 since 2004, forwarded to kernel |
HalGetProcessorIdByNtNumber | starts in SP1; x64 since 2004, forwarded to kernel |
HalGetVectorInput | x64 since 2004, forwarded to kernel |
HalInitializeBios | x64 since 2004, forwarded to kernel |
HalInitializeOnResume | starts in SP1; x64 since 2004, forwarded to kernel |
HalQueryEnvironmentVariableInfoEx | starts in SP1; x64 since 2004, forwarded to kernel |
HalQueryMaximumProcessorCount | starts in SP1; x64 since 2004, forwarded to kernel |
HalRegisterDynamicProcessor | starts in SP1; x64 since 2004, forwarded to kernel |
HalRegisterErrataCallbacks | x64 since 2004, forwarded to kernel |
HalSetEnvironmentVariableEx | x64 since 2004, forwarded to kernel |
HalStartDynamicProcessor | x64 since 2004, forwarded to kernel |
x86BiosAllocateBuffer | x64 since 2004, forwarded to kernel |
x86BiosCall | x64 since 2004, forwarded to kernel |
x86BiosFreeBuffer | x64 since 2004, forwarded to kernel |
x86BiosReadMemory | x64 since 2004, forwarded to kernel |
x86BiosWriteMemory | x64 since 2004, forwarded to kernel |
The one of these functions that has always been declared, i.e., HalBugCheckSystem, is in some sense two functions. It changed for version 6.1 to take two arguments instead of one. That the two variants are incompatible might easily be missed: a driver that is built for Windows Vista and higher but which calls this function will break on any higher Windows. Against this is that the only caller that Microsoft expects is Microsoft’s own PSHED.DLL.
In version 6.0, the HAL stops exporting a few functions. Curiously, all are either wholly ancient or very new. For each, the version in parentheses tells when exporting started: