
Among the criteria for this selection are: the presence of an ACPI-compatible BIOS, the presence of an APIC, and whether or not multiple processors are present and enabled. The Windows installation procedure determines which ones are appropriate for the current platform and copies it to the hard drive, renaming it to hal.dll if necessary. On x86 systems, there are several different HAL files on the installation media. The HAL implements the operations appropriately for each platform, so the same driver executable file can be used on all platforms using the same CPU architecture, and the driver source file can be portable across all architectures. The drivers use HAL routines because different platforms may require different implementations of these operations. Kernel mode device drivers for devices on buses such as PCI and PCI Express directly call routines in the HAL to access I/O ports and registers of their devices. sys, a few core drivers are compiled into hal.dll. Although drivers for most hardware are contained in other files, commonly of file type. Instead, the HAL provides services primarily to the Windows executive and kernel and to kernel mode device drivers. The HAL is loaded into kernel address space and runs in kernel mode, so routines in the HAL cannot be called directly by applications, and no user mode APIs correspond directly to HAL routines.

The HAL provides a single function for this purpose that works with all kinds of interrupts by various chipsets, so that other components need not be concerned with the differences. Other components in the operating system can then call these functions in the same way on all platforms, without regard for the actual implementation.įor example, responding to an interrupt is quite different on a machine with an Advanced Programmable Interrupt Controller (APIC) than on one without. The HAL implements a number of functions that are implemented in different ways by different hardware platforms, which in this context, refers mostly to the chipset.


The Windows Hardware Abstraction Layer (HAL) is implemented in hal.dll. NTDLL.DLL is only used by some programs, but it is a dependency of most Win32 libraries used by programs. HAL.DLL is a kernel-mode library file and it cannot be used by any user-mode program. 4.1 MSVCRT.DLL, MSVCP*.DLL and CRTDLL.DLL.
