驱动安装工具

微软的 WDK 里提供了三个驱动安装工具

  • devcon
  • difxcmd
  • dpinst

devcon

devcon 是通过 SetupApi.dll 里的 UpdateDriverForPlugAndPlayDevicesW 来安装驱动。

difxcmd

difxcmd 是通过 difxapi.lib 里的 DriverPackageInstall 来安装驱动

difxapi.lib 提供了一组 api 用来预安装和安装驱动。


difxcmd.exe to display how to use the command line tool.
difxcmd.exe /p my.inf to preinstall my.inf.
difxcmd.exe /i my.inf to install my.inf.
difxcmd.exe /i my.inf 16 to install my.inf in legacy mode (accepting unsigned drivers).
difxcmd.exe /g my.inf to obtain the path to the installed my.inf.
difxcmd.exe /u my.inf to uninstall my.inf.

dpinst

dpinst 是微软提供了命令行程序,没有提供相关的源码。

dpinst.exe /Q /SE /F

使用静默方式安装不了驱动,必须要有交互 UI。

pnputil

pnputil 用来从 C:\Windows\System32\DriverStore\FileRepository 中删除驱动和预安装驱动


Microsoft PnP 工具
用法:
------
pnputil.exe [-f | -i] [ -? | -a | -d | -e ]
示例:
pnputil.exe -a a:\usbcam\USBCAM.INF      -> 添加 USBCAM.INF 指定的程序包
pnputil.exe -a c:\drivers\*.inf          -> 添加 c:\drivers\ 中的所有程序包\
pnputil.exe -i -a a:\usbcam\USBCAM.INF   -> 添加和安装驱动程序包
pnputil.exe -e                           -> 枚举所有第三方程序包
pnputil.exe -d oem0.inf                  -> 删除程序包 oem0.inf
pnputil.exe -f -d oem0.inf               -> 强制删除程序包 oem0.inf
pnputil.exe -?                           -> 此用法屏幕

dism

pnputil -e 或者
dism /Online /Get-Drivers /Format:Table 可列出驱动
pnputil -d oem9.inf pnputil 只能删除 oem开头的驱动

批量删除 %systemroot%\system32\DriverStore\FileRepository


SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

ECHO.
ECHO Deleting added FileRepository folders in PE3 to free drive X:\ - Wait ....
ECHO.

takeown /f "%systemroot%\system32\DriverStore\FileRepository" && icacls "%systemroot%\system32\DriverStore\FileRepository" /grant administrators:F
takeown /f "%systemroot%\system32\DriverStore\FileRepository" /r /d y && icacls "%systemroot%\system32\DriverStore\FileRepository" /grant administrators:F /t

dir %systemroot%\system32\DriverStore\FileRepository /b >dellist.txt
for /F "usebackq delims=" %%A in ("dellist.txt") do (
RD /S /q %systemroot%\system32\DriverStore\FileRepository\%%A
)
DEL dellist.txt
ECHO.
ECHO Deleting added FileRepository folders has finished - OK
ECHO.

:: pause

exit
点赞