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

本文关键字:驱动程序 文件 删除 Windows XP | 更新日期: 2023-09-27 18:20:01

我正在开发一个应用程序,该应用程序涉及安装一些特定于项目的硬件设备。在安装应用程序时,我使用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中有没有一种有效的方法可以完全删除驱动程序文件?

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

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

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

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