Geoff Chappell - Software Analyst
The spin lock is the kernel’s simplest synchronisation object, but the main functions for working with spin locks started as HAL exports. This is because acquiring a spin lock in ordinary execution starts with raising the Interrupt Request Level (IRQL) to DISPATCH_LEVEL and changing the IRQL is the HAL’s work in x86 builds. Functions that work with spin locks but take as granted that the IRQL is already DISPATCH_LEVEL or higher have always been the kernel’s to export. For 64-bit Windows, this division between the HAL and the kernel was put aside: presumably because the IRQL is managed inline by reading and writing the cr8 register, all work with spin locks is the kernel’s.
Function | Versions (x86 Only) | Remarks |
---|---|---|
KeAcquireSpinLock | all | export in 3.50 to 6.1 is a thunk to KfAcquireSpinLock;
export in 6.2 and higher is forward to kernel |
KeAcquireSpinLockRaiseToSynch | 4.0 and higher | export in 6.2 and higher is forward to kernel |
KeReleaseSpinLock | all | export in 3.50 to 6.1 is a thunk to KfReleaseSpinLock;
export in 6.2 and higher is forward to kernel |
KfAcquireSpinLock | 3.50 and higher | export in 6.2 and higher is forward to kernel |
KfReleaseSpinLock | 3.50 and higher | export in 6.2 and higher is forward to kernel |
The separation of functionality for x86 builds was kept when version 5.0 introduced queued spin locks:
Function | Versions (x86 Only) | Remarks |
---|---|---|
KeAcquireInStackQueuedSpinLock | 5.1 and higher | export in 6.2 and higher is forward to kernel |
KeAcquireInStackQueuedSpinLockRaiseToSynch | 5.1 and higher | export in 6.2 and higher is forward to kernel |
KeAcquireQueuedSpinLock | 5.0 and higher | export in 6.2 and higher is forward to kernel |
KeAcquireQueuedSpinLockRaiseToSynch | 5.0 and higher | export in 6.2 and higher is forward to kernel |
KeReleaseInStackQueuedSpinLock | 5.1 and higher | export in 6.2 and higher is forward to kernel |
KeReleaseQueuedSpinLock | 5.0 and higher | export in 6.2 and higher is forward to kernel |
KeTryToAcquireQueuedSpinLock | 5.0 and higher | export in 6.2 and higher is forward to kernel |
KeTryToAcquireQueuedSpinLockRaiseToSynch | 5.0 and higher | export in 6.2 and higher is forward to kernel |