在Windows XP中完全删除驱动程序文件

时间:2012-01-12 07:29:52

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

我正在开发一个涉及安装某些项目特定硬件设备的应用程序。在安装应用程序时,我使用difxAPI将驱动程序inf文件推送到Driverstore。但是在使用difx的unintallation之后,在HKLM \ SYSTEM \ CurrentControlSet \ Enum \ USB下的Windows注册表中仍然存在一些引用。这些引用的存在往往是一个问题,因为设备被枚举并在设备管理器的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 个答案:

答案 0 :(得分:1)

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

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

我最近编写了代码来执行此操作:我的所有设备共享相同的自定义设备类,因此很容易枚举,然后我根据devcon的代码盲目删除它们。