[英]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.