【问题标题】:Complete removal of the driver files in Windows XP完全删除 Windows XP 中的驱动程序文件
【发布时间】:2012-01-12 07:29:51
【问题描述】:

我正在开发一个应用程序,其中涉及安装一些项目特定的硬件设备。在安装应用程序时,我使用 difxAPI 将驱动程序 inf 文件推送到 Driverstore。但是在使用 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中是否有一种有效的方法可以完全删除驱动程序文件?

【问题讨论】:

    标签: c# windows-xp uninstallation device-driver


    【解决方案1】:

    这很奇怪。 DifxAPI 应该从驱动程序存储中删除 a) 驱动程序包,b) 此驱动程序的已安装实例。您确定那些旧设备实例(HKLM\SYSTEM\CurrentControlSet\Enum\USB)正在使用您要删除的驱动程序,或者可能是其 .INF 文件的旧版本或其他什么?

    不过,基本上,Microsoft 不希望您使用 Enum 和更改 ACL。他们宁愿让您通过 SetupAPI 枚举和删除设备(如 Windows DDK 中的devcon 示例所示)。

    我最近为此编写了代码:我的所有设备都共享相同的自定义设备类,因此它们很容易枚举,然后我按照devcon 的代码盲目地删除了它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 2020-05-04
      • 2015-05-02
      • 1970-01-01
      相关资源
      最近更新 更多