#windows #device-driver
#Windows #драйвер устройства
Вопрос:
Я работаю над расширением существующего драйвера USB-устройства и изо всех сил пытаюсь узнать, как .INF-файл работает. Я полагаю, что у меня это есть прямо сейчас, драйвер устанавливается и работает. Он также отображается в списке «Установка и удаление программ».
Я обнаружил, что когда я удаляю драйвер из Add / Remove, кажется, что он мало что делает, если вообще что-либо делает. Это было в .INF, поскольку я унаследовал его:
[myUninstall]
DelReg = myDelReg
[MyDelReg]
HKLM, "SOFTWAREMicrosoftWindowsCurrentVersionUninstallmyName"
Я не могу найти никаких других ссылок, даже там, где установлено «myName» при удалении реестра.
Я изменил .INF, чтобы иметь это:
[DefaultUninstall]
myUninstall
[myUninstall]
DelFiles = ... a list of files ...
DelDirs = UNINST.Dirs
DelReg = UNINST.Regs
Cleanup = 1
[UNINST.Dirs]
422%%InstallDir%
[UNINST.Regs]
myDev.AddReg
myDev.CommonRegs
[myDev.AddReg] ; same definition used for installing
HKR,,Drivers,Subclasses,,"wave,midi,mixer,aux"
...
[myDev,CommonRegs] ; same definition used for installing
HKR, Parameters, BufferSize, 0x0010001, 256
...
Тем не менее, независимо от того, удаляю ли я из панели управления Установку и удаление программ или делаю это из диспетчера устройств, система не жалуется, и, похоже, ничего не происходит. Я просмотрел выходные данные «dpinst / c» и setupapi.log, и ни один из них не говорит мне многого. dpinst не показывает ошибки, но явно даже не пытается выполнить мой раздел удаления.
Я нахожу в Интернете много многословия и примеров разделов удаления, но очень мало объяснений. Сегодня я наткнулся на одно предложение на 1 форуме, в котором подразумевалось, что устройство PnP .В INF не используется функция удаления. Возможно, это моя проблема?
- ошибаюсь ли я, думая, что у меня может быть удаление в этом .INF?
- есть ли какой-нибудь другой способ сообщить, что происходит?
- это мой единственный способ написать отдельный деинсталлятор?
Ответ №1:
AFIK, INF-файлы не участвуют в удалении.
Вам нужно будет написать отдельный деинсталлятор, если вы хотите выполнить надлежащую очистку.
Далее обратите внимание, что в Vista и за ее пределами Windows также включает хранилище драйверов, куда она автоматически копирует пакет драйверов (ссылки на inf и файлы из inf). Если вы хотите выполнить полную очистку, хранилище драйверов также следует очистить.
Ответ №2:
Я не думаю, что DefaultUninstall
это стандартный раздел в том виде, в каком он есть DefaultInstall
. Часто вы увидите, что UninstallString
запись ARP просто вызывается DefaultUninstall
по имени.
Документация в этой области довольно плохая, и существует разделение между базовыми файлами SetupAPI / SetupX INF и файлами Advanced INF (AdvPack).
Единственное известное мне исключение от сторонних разработчиков — TweakUI.inf из Windows 95 PowerToys.
В нем есть части, которые выглядят следующим образом:
...
[Optional Components]
TweakUIInstall
[TweakUIInstall]
CopyFiles = ...
AddReg = ...
Ini2Reg = ...
...
InstallType = 10 ;Typical, Custom.
Uninstall = DefaultUnInstall
[DefaultUnInstall]
DelFiles = ...
DelReg = ...
Но я думаю, что это работает только с функцией дополнительных компонентов, а не с базовой деинсталляцией. TweakUI v1.33 (Tweakui.exe В SFX archive) есть еще несколько записей, связанных с NT, и я полагаю, что способ, которым он записывает UninstallString
для NT, даже записывает неправильный раздел INF. Неправильно или нет, он вручную должен указать раздел INF для обычного удаления.