From 4ca806ebecf574e97261ea3b0ea798335309df73 Mon Sep 17 00:00:00 2001 From: Lorenzooone Date: Thu, 28 May 2026 00:07:13 +0200 Subject: [PATCH] Add scripts to uninstall Windows drivers as well --- CMakeLists.txt | 3 + driver_scripts/driver_remover_name_based.bat | 60 +++++++++++++++ .../driver_remover_vid_pid_based.bat | 74 +++++++++++++++++++ .../optimize_n3ds_o3ds_driver_install.bat | 1 + .../optimize_n3ds_o3ds_driver_uninstall.bat | 37 ++++++++++ 5 files changed, 175 insertions(+) create mode 100644 driver_scripts/driver_remover_name_based.bat create mode 100644 driver_scripts/driver_remover_vid_pid_based.bat create mode 100644 driver_scripts/optimize_n3ds_o3ds_driver_uninstall.bat diff --git a/CMakeLists.txt b/CMakeLists.txt index f8d72fd..35425a6 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -799,6 +799,9 @@ if(WIN32) endif() if(${CMAKE_PREPARE_WINDOWS_DRIVERS}) install(FILES "driver_scripts/driver_uninstaller_currently_connected.bat" DESTINATION "./drivers/subscripts") + install(FILES "driver_scripts/driver_remover_name_based.bat" DESTINATION "./drivers/subscripts") + install(FILES "driver_scripts/driver_remover_vid_pid_based.bat" DESTINATION "./drivers/subscripts") + install(FILES "driver_scripts/optimize_n3ds_o3ds_driver_uninstall.bat" DESTINATION "./drivers/uninstallers") install(FILES "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/wdi-simple.exe" DESTINATION "./drivers/programs") install(DIRECTORY "driver_scripts/cypress_usb" DESTINATION "./drivers/") install(FILES "driver_scripts/optimize_n3ds_o3ds_driver_install.bat" DESTINATION "./drivers") diff --git a/driver_scripts/driver_remover_name_based.bat b/driver_scripts/driver_remover_name_based.bat new file mode 100644 index 0000000..674d7e8 --- /dev/null +++ b/driver_scripts/driver_remover_name_based.bat @@ -0,0 +1,60 @@ +@echo off +setlocal enabledelayedexpansion + +:: Usage: +:: driver_remover.bat originalname.inf +:: +:: Example: +:: driver_remover.bat cyusb3.inf +:: driver_remover.bat nstd_usb.inf +:: driver_remover.bat nstd_usb_new.inf +:: driver_remover.bat intraoralsensor.inf + +if "%~1"=="" ( + echo Usage: %~nx0 OriginalDriverName.inf + exit /b 1 +) + + + +set TARGET=%~1 +set FOUND= +set PREVIOUS= + +for /f "delims=" %%L in ('pnputil /enum-drivers') do ( + + set LINE=%%L + + + :: Split on first colon + for /f "tokens=1,* delims=:" %%A in ("!LINE!") do ( + + set VALUE=%%B + + :: Trim leading spaces + for /f "tokens=* delims= " %%X in ("!VALUE!") do set VALUE=%%X + + :: Second field = original INF name + if /I "!VALUE!"=="%TARGET%" ( + set "FOUND=!PREVIOUS!" + ) + set PREVIOUS=!VALUE! + ) +) + +if "%FOUND%"=="" ( + echo Driver not found. + exit /b 1 +) + +echo Found: %FOUND% +echo Removing driver... + +pnputil /delete-driver %FOUND% /uninstall /force + +if errorlevel 1 ( + echo Failed to remove driver. + exit /b 1 +) + +echo Driver removed successfully. \ No newline at end of file diff --git a/driver_scripts/driver_remover_vid_pid_based.bat b/driver_scripts/driver_remover_vid_pid_based.bat new file mode 100644 index 0000000..300c42c --- /dev/null +++ b/driver_scripts/driver_remover_vid_pid_based.bat @@ -0,0 +1,74 @@ +@echo off +setlocal enabledelayedexpansion + +:: Usage: +:: driver_remover.bat vid pid +:: +:: For removing LibUSB-based drivers +:: +:: Example: +:: driver_remover.bat 04B4 8613 + + +if "%~2"=="" ( + echo Usage: %~nx0 VID PID + exit /b 1 +) + +set VID=%~1 +set PID=%~2 + +set TARGET=VID_%VID%^&PID_%PID% +set FOUND= +set PREVIOUS= +set PREVIOUS2= +set PREVIOUS3= +set PREVIOUS4= +set PREVIOUS5= +set PREVIOUS6= + +for /f "delims=" %%L in ('pnputil /enum-drivers') do ( + + set LINE=%%L + + + :: Split on first colon + for /f "tokens=1,* delims=:" %%A in ("!LINE!") do ( + + set VALUE=%%B + + :: Trim leading spaces + for /f "tokens=* delims= " %%X in ("!VALUE!") do set VALUE=%%X + + echo "!VALUE!" | find /I "%TARGET%" >nul + + :: Second field = original INF name + if not errorlevel 1 ( + set "FOUND=!PREVIOUS6!" + ) + set PREVIOUS6=!PREVIOUS5! + set PREVIOUS5=!PREVIOUS4! + set PREVIOUS4=!PREVIOUS3! + set PREVIOUS3=!PREVIOUS2! + set PREVIOUS2=!PREVIOUS! + set PREVIOUS=!VALUE! + ) +) + +if "%FOUND%"=="" ( + echo Driver not found. + exit /b 2 +) + +echo Found: %FOUND% +echo Removing driver... + +pnputil /delete-driver %FOUND% /uninstall /force + +if errorlevel 1 ( + echo Failed to remove driver. + exit /b 1 +) + +echo Driver removed successfully. +exit /b 0 \ No newline at end of file diff --git a/driver_scripts/optimize_n3ds_o3ds_driver_install.bat b/driver_scripts/optimize_n3ds_o3ds_driver_install.bat index 5ae7a22..13bd880 100644 --- a/driver_scripts/optimize_n3ds_o3ds_driver_install.bat +++ b/driver_scripts/optimize_n3ds_o3ds_driver_install.bat @@ -25,6 +25,7 @@ if '%errorlevel%' NEQ '0' ( CD /D "%~dp0" :-------------------------------------- +call "subscripts\driver_remover_name_based.bat" intraoralsensor.inf call "subscripts\driver_uninstaller_currently_connected.bat" 04B4 8613 call "subscripts\driver_uninstaller_currently_connected.bat" 0752 8613 diff --git a/driver_scripts/optimize_n3ds_o3ds_driver_uninstall.bat b/driver_scripts/optimize_n3ds_o3ds_driver_uninstall.bat new file mode 100644 index 0000000..61c7f3d --- /dev/null +++ b/driver_scripts/optimize_n3ds_o3ds_driver_uninstall.bat @@ -0,0 +1,37 @@ +@echo off + +:: BatchGotAdmin +:------------------------------------- +REM --> Check for permissions +>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" + +REM --> If error flag set, we do not have admin. +if '%errorlevel%' NEQ '0' ( + echo Requesting administrative privileges... + goto UACPrompt +) else ( goto gotAdmin ) + +:UACPrompt + echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" + set params = %*:"="" + echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" + + "%temp%\getadmin.vbs" + del "%temp%\getadmin.vbs" + exit /B + +:gotAdmin + pushd "%CD%" + CD /D "%~dp0" +:-------------------------------------- + + +call "..\subscripts\driver_uninstaller_currently_connected.bat" 04B4 8613 +call "..\subscripts\driver_uninstaller_currently_connected.bat" 0752 8613 +call "..\subscripts\driver_uninstaller_currently_connected.bat" 04B4 1004 + +call "..\subscripts\driver_remover_vid_pid_based.bat" 04B4 8613 +call "..\subscripts\driver_remover_vid_pid_based.bat" 0752 8613 +call "..\subscripts\driver_remover_vid_pid_based.bat" 04B4 1004 + +call "..\subscripts\driver_remover_name_based.bat" cyusb3.inf