During the Windows installation process, drivers are typically loaded from a few key locations, but the behavior differs from post-installation driver loading. If you are deploying Windows 10 and 11 images using Windows Deployment Services (WDS) on Server 2008 R2, you cannot integrate unsigned drivers into WDS.
Let's start with addressing your question about where Windows looks for drivers during installation
- boot.wim (WinPE Phase)
- Windows loads drivers during the WinPE phase of installation from
boot.wim. However, just placing.inffiles inC:\Windows\INFin the mountedboot.wimwon’t work because drivers are not automatically detected from that location. - Instead, drivers should be in specific locations where Windows searches for them, such as:
-
X:\Windows\System32\DriverStore\FileRepository -
X:\Windows\inf -
X:\Windows\System32\drivers
-
- Windows loads drivers during the WinPE phase of installation from
- install.wim (Specialized Phase)
- After copying files from
install.wim, Windows looks for drivers in:-
%WINDIR%\inf -
%WINDIR%\System32\DriverStore\FileRepository - The driver path specified in
unattend.xml(if used)
-
- Since your goal is not to integrate drivers directly into
install.wim, an alternative method is needed.
- After copying files from
If you are looking for alternative methods to provide drivers without integration, then try the following:
1. Using $WinPEDriver$ Folder on Installation Media
Windows Setup can scan for drivers placed in a special directory on the installation media. You can try placing your .inf files in:
X:\$WinPEDriver$\
or on a secondary USB drive at:
<USB-ROOT>\$WinPEDriver$\
Windows automatically looks in this directory for drivers during setup.
2. Manually Adding Drivers in WinPE (Before Setup Starts)
If $WinPEDriver$ does not work, another way is to inject drivers dynamically at runtime using pnputil or drvload. You can modify winpeshl.ini or a startup script inside boot.wim to load drivers before setup starts:
- Modify
winpeshl.ini(insideboot.wim)- Mount
boot.wimusing DISM:dism /mount-wim /wimfile:"D:\sources\boot.wim" /index:1 /mountdir:"D:\mount" - Create a script in
D:\mount\Windows\System32\Startnet.cmdor modifywinpeshl.inito run:drvload X:\Drivers\yourdriver.inf - Unmount and commit:
dism /unmount-wim /mountdir:"D:\mount" /commit
- Mount
- Use a Custom
cmdScript to Add Drivers Dynamically- Store all
.inffiles inX:\Drivers\ - Add a script to run:
for /r X:\Drivers %i in (*.inf) do drvload %i - This forces Windows to load all available drivers dynamically before the installation begins.
- Store all
3. Using unattend.xml to Specify a Driver Path
If you use an unattended installation, you can specify an additional driver search path:
<settings pass="windowsPE">
<component name="Microsoft-Windows-PnpCustomizationsWinPE">
<DriverPaths>
<PathAndCredentials wcm:action="add">
<Path>X:\Drivers</Path>
</PathAndCredentials>
</DriverPaths>
</component>
</settings>
Place the drivers inside X:\Drivers, and Windows Setup will scan this location.
If the above response helps answer your question, remember to "Accept Answer" so that others in the community facing similar issues can easily find the solution. Your contribution is highly appreciated.
hth
Marcin