簡體   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