Geoff Chappell - Software Analyst
The table below lists the 17 exports that had been added to the HAL by version 3.50 from Windows NT 3.5 Service Pack 3. For the purpose of this study, with no other build of version 3.50 available for inspection, these exports are taken to have been added for version 3.50. Be aware that they might not date from the original release of version 3.50 or that they might have originated for a service-pack release of version 3.10.
Documentation status is summarised by colour coding. (Had the website’s scripts run as expected, then hovering over any colour-coded text would produce a tooltip that shows why the text is coloured.) (To decode a colour, hover for a tooltip.)
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. If a function is documented as reserved or obsolete, it is shaded red or shaded grey, respectively. Otherwise, functions that have their own non-trivial documentation are left with no background colour.
Many undocumented functions and some variables have C-language declarations in one or another header file. To show them as being not completely undocumented they 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 disclosure even of the declaration was exceptional.
Function | Export History | Documentation History | Declaration History |
---|---|---|---|
ExAcquireFastMutex | x86 only; since 5.2 SP1, forwarded to ExiAcquireFastMutex in kernel; since 6.2, forwarded to kernel |
since 6.1 revision, documented start is 5.0 | since 6.0, declared start is 5.0 |
ExReleaseFastMutex | x86 only; since 5.2 SP1, forwarded to ExiReleaseFastMutex in kernel; since 6.2, forwarded to kernel |
since 6.1 revision, documented start is 5.0 | since 6.0, declared start is 5.0 |
ExTryToAcquireFastMutex | x86 only; since 5.2 SP1, forwarded to ExiTryToAcquireFastMutex in kernel; since 6.2, forwarded to kernel |
since 6.1 revision, documented start is 5.0 | since 6.0, declared start is 5.0 |
The three functions for fast mutexes provide the first cases, chronologically, of HAL exports being reduced to forwards. The functions were for all practical effect moved to the kernel concurrently with the introduction of the x64 architecture, though the mechanism took a while to settle. For x64, these functions have only ever been exported from the kernel, not the HAL, not even as forwards.
Function | Export History | Documentation History | Declaration History |
---|---|---|---|
HalAdjustResourceList | x64 since 2004, forwarded to kernel | ||
HalAllProcessorsStarted | x64 since 2004, forwarded to kernel | ||
HalAllocateCrashDumpRegisters | x64 since 2004, forwarded to kernel | before 6.0, declared | since 6.0, declared start is 5.0 |
HalAssignSlotResources | x64 since 2004, forwarded to kernel | before 5.0, documented | since 5.1, deprecated since 6.0, declared start is 5.0 |
HalClearSoftwareInterrupt | x64 since 2004, forwarded to kernel | ||
HalGetBusDataByOffset | x64 since 2004, forwarded to kernel | before 5.0, documented | since 5.1, deprecated since 6.0, declared start is 5.0 |
HalProcessorIdle | x64 since 2004, forwarded to kernel | ||
HalSetBusData | x64 since 2004, forwarded to kernel | before 5.0, documented | since 5.1, deprecated since 6.0, declared start is 5.0 |
HalSetBusDataByOffset | x64 since 2004, forwarded to kernel | before 5.0, documented | since 5.1, deprecated since 6.0, declared start is 5.0 |
HalSetTimeIncrement | discontinued in 6.3 |
The particularities of how the few Hal functions that have ever been documented became obsolete are a separate story. Here it must suffice to note that starting with the DDK for Windows 2000, some of these functions are not declared at all if a macro NO_LEGACY_DRIVERS is defined.
Function | Export History | Declaration History |
---|---|---|
KfAcquireSpinLock | x86 only; since 6.2, forwarded to kernel |
since 6.0, declared start is 5.0 |
KfLowerIrql | x86 only |
since 6.0, declared start is 5.0 |
KfRaiseIrql | x86 only |
since 6.0, declared start is 5.0 |
KfReleaseSpinLock | x86 only; since 6.2, forwarded to kernel |
since 6.0, declared start is 5.0 |