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

C# 在Windows XP中完全删除驱动程序文件,c#,windows-xp,uninstallation,device-driver,C#,Windows Xp,Uninstallation,Device Driver,我正在开发一个应用程序,其中包括安装一些特定于项目的硬件设备。在安装应用程序时,我使用difxAPI将驱动程序inf文件推送到Driverstore中。但在使用difx取消安装后,windows注册表中仍有一些引用,位于HKLM\SYSTEM\CurrentControlSet\Enum\USB下。当设备被枚举并在设备管理器的COM端口部分显示其条目时,这些引用的存在往往是一个问题。这是我用来卸载驱动程序的: DriverPackageUninstall(infName, DRIVER_PACK

我正在开发一个应用程序,其中包括安装一些特定于项目的硬件设备。在安装应用程序时,我使用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);

但是这段代码引发了一个异常,因为它不允许我以编程方式设置访问控制。在WindowsXP机器中,我可以通过注册表编辑器手动设置此权限。XP中有没有一种有效的方法可以完全删除驱动程序文件?

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

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

我最近编写了代码来实现这一点:我的所有设备都共享同一个自定义设备类,因此它们很容易枚举,然后我盲目地按照
devcon
中的代码删除它们