Полное удаление файлов драйвера в Windows XP - PullRequest
0 голосов
/ 12 января 2012

Я разрабатываю приложение, которое включает в себя установку некоторых аппаратных устройств для конкретного проекта. При установке приложения я использую difxAPI для загрузки файлов inf драйвера в хранилище драйверов. Но после удаления с использованием difx в реестре Windows остались некоторые ссылки в разделе HKLM \ SYSTEM \ CurrentControlSet \ Enum \ USB. Наличие этих ссылок, как правило, является проблемой, так как устройства перечисляются и показывают свою запись в разделе COM-портов диспетчера устройств. Вот что я использую для удаления драйверов:

DriverPackageUninstall(infName, DRIVER_PACKAGE_DELETE_FILES, ptrInstallerInfo, out fNeedReboot);

Снова я подумал о программной очистке этих записей реестра, поскольку, как я понимаю, мне следует установить разрешение на доступ к определенным ключам. Вот что я сделал:

    RegistryAccessRule regAccess = new RegistryAccessRule("Everyone", RegistryRights.FullControl, AccessControlType.Allow);
    RegistrySecurity regSecurity = new RegistrySecurity();
    regSecurity.AddAccessRule(regAccess);                        
    Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Enum\USB\", true).SetAccessControl(regSecurity);

Но этот фрагмент кода вызывает исключение, поскольку он не позволяет мне устанавливать контроль доступа программно. На компьютере с Windows XP вручную я могу установить это разрешение в редакторе реестра. Есть ли эффективный способ в XP, с помощью которого я могу полностью удалить файлы драйвера?

1 Ответ

1 голос
/ 12 марта 2012

Странно. DifxAPI должен удалить оба: a) пакет драйверов из хранилища драйверов, b) установленные экземпляры этого драйвера. Вы уверены, что эти старые экземпляры устройств (в HKLM\SYSTEM\CurrentControlSet\Enum\USB) используют удаляемый вами драйвер, или, возможно, более старую версию его .INF-файлов или еще что-то?

В сущности, Microsoft не хочет, чтобы вы играли с Enum и меняли ACL. Они бы предпочли, чтобы вы перечисляли и удаляли устройства через SetupAPI (как показано в примере devcon в Windows DDK).

Недавно я написал код для этого: все мои устройства имеют один и тот же класс пользовательских устройств, поэтому их было легко перечислить, а затем я слепо удалил их, следуя коду из devcon.

...