HAL Exports Added For Version 3.50

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 so that more detail can be given as Remarks with less text. Functions that appear to be completely undocumented are highlighted yellow. If a function is documented now but is known not to have been documented in the first contemporaneous Device Driver Kit (DDK), WDK or Installable File System (IFS) Kit, then it is shaded yellow to retain some of its previous status as undocumented. If a function is documented as reserved or obsolete, with or without a prototype, it is shaded red or shaded grey, respectively. An undocumented function that is at least declared in one or another header file from the Windows Driver Kit (WDK) is shaded orange. If the only declaration that Microsoft is known to have disclosed publicly is from the “minwin” directory of the Enterprise WDK for Windows 10 version 1511, specifically, then the function is highlighted orange.

For no functions does the WDK documentation list (or even hint about) the applicable versions. All the documented functions and four undocumented functions are declared in one or another of the WDK header files. Where this is true of an undocumented function, it is shaded yellow in the table. 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 functions that were added for Windows NT 3.50 are said to require at least Windows 2000.

Function Remarks
ExAcquireFastMutex x86 only;
forwarded to kernel function ExiAcquireFastMutex in 5.2 from Windows Server 2003 SP1 to 6.1;
forwarded to kernel in 6.2 and higher;
documentation since 2009 requires Windows 2000 and higher;
declaration since 2006 requires Windows 2000 and higher
x64 support as kernel export
ExReleaseFastMutex x86 only;
forwarded to kernel function ExiReleaseFastMutex in 5.2 from Windows Server 2003 SP1 to 6.1;
forwarded to kernel in 6.2 and higher;
documentation since 2009 requires Windows 2000 and higher;
declaration since 2006 requires Windows 2000 and higher
x64 support as kernel export
ExTryToAcquireFastMutex x86 only;
forwarded to kernel function ExiTryToAcquireFastMutex in 5.2 from Windows Server 2003 SP1 to 6.1;
forwarded to kernel in 6.2 and higher;
documentation since 2009 requires Windows 2000 and higher;
declaration since 2006 requires Windows 2000 and higher
x64 support as kernel export
HalAdjustResourceList declaration requires NO_LEGACY_DRIVERS not defined;
declared without version constraint
HalAllProcessorsStarted  
HalAllocateCrashDumpRegisters from declared to reserved in 2006;
declaration since 2006 requires Windows 2000 and higher
HalAssignSlotResources from documented to obsolete in 2000;
declaration since 1999 requires NO_LEGACY_DRIVERS not defined;
declaration since 2006 requires Windows 2000 and higher
HalClearSoftwareInterrupt  
HalGetBusDataByOffset from documented to obsolete in 2000;
declaration since 2006 requires Windows 2000 and higher
HalProcessorIdle  
HalSetBusData from documented to obsolete in 2000;
declaration since 1999 requires NO_LEGACY_DRIVERS not defined
HalSetBusDataByOffset from documented to obsolete in 2000;
declaration since 2006 requires Windows 2000 and higher
HalSetTimeIncrement discontinued in 6.3
KfAcquireSpinLock x86 only;
forwarded to kernel in 6.2 and higher;
declaration since 2006 requires Windows 2000 and higher
KfLowerIrql x86 only;
declaration since 2006 requires Windows 2000 and higher
KfRaiseIrql x86 only;
declaration since 2006 requires Windows 2000 and higher
x64 support as kernel export;
redefined since 2005 as inline function
KfReleaseSpinLock x86 only;
forwarded to kernel in 6.2 and higher;
declaration since 2006 requires Windows 2000 and higher