HAL Exports Added For Version 5.1

The table on this page lists the three exports that were added to the Windows HAL for version 5.1, i.e., for Windows XP.

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.

Name Export History
KeAcquireInStackQueuedSpinLock x86 only;
since 6.2, forwarded to kernel
KeAcquireInStackQueuedSpinLockRaiseToSynch x86 only;
since 6.2, forwarded to kernel
KeReleaseInStackQueuedSpinLock x86 only;
since 6.2, forwarded to kernel

Though these new functions are x86-specific exports from the HAL, all have x64 support as exports from the kernel.

The two that are documented are remarkable in several respects. First, they are the first HAL exports for which the contemporaneous documentation states explicitly which versions have them. Second, the versions are stated correctly. This ought not to be remarkable, and is not remarked on in the table, but when version constraints were applied to declarations in the WDK for Windows Vista, these functions became the oldest for which such constraints are correct. HAL exports that had been added for Windows 2000 got declared as requiring at least Windows XP and older HAL exports were declared as requiring at least Windows 2000.

Though version 5.1 added only these three exports, and only then to the x86 HAL, their functionality was at the time some sort of new best thing in kernel-mode programming. All documentation of functions for plain old spin locks was revised to advise that “Drivers for Windows XP and later should use the more efficient and reliable queued spin locks”. Microsoft didn’t actually call them new, but plainly saw some interest in documenting the newness correctly. For a clue that they were not entirely new, wonder why these functions are not named more directly as KeAcquireQueuedSpinLock, etc., and look back to the HAL Exports Added for Version 5.0.


Version 5.1 stops exporting a whole set of functions through which the HAL supports kernel-mode debugging over a serial port:

All are first exported in version 3.10. Their only expected caller had been the kernel. To broaden the type of debug port, the implementation was moved from the HAL to a new module with a new interface.