繁体   English   中英

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

[英]Complete removal of the driver files in Windows XP

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

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

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

我最近编写了代码来做到这一点:我的所有设备都共享相同的自定义设备类,因此它们易于枚举,然后按照devcon的代码盲目删除了它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM