2012-01-12 14 views
0

私はいくつかのプロジェクト固有のハードウェアデバイスのインストールを含むアプリケーションを開発しています。アプリケーションのインストール時には、difxAPIを使用してドライバのinfファイルをDriverstoreにプッシュします。しかし、difxを使用していない場合は、HKLM \ SYSTEM \ CurrentControlSet \ Enum \ USBのWindowsレジストリにまだいくつかの参照が残っています。デバイスが列挙され、デバイスマネージャのCOMポートセクションにそのエントリが表示されるため、これらの参照の存在が問題になりがちです。これは私がドライバーをアンインストールするために使用するものである:Windows XPでのドライバファイルの完全削除

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の効率的な方法はありますか?

答えて

1

これは奇妙です。 DifxAPIは、a)ドライバストアからドライバパッケージを削除し、b)このドライバのインストール済みインスタンスを削除する必要があります。これらの古いデバイスインスタンス(HKLM\SYSTEM\CurrentControlSet\Enum\USB)が、削除するドライバを使用しているか、おそらく古いバージョンの.INFファイルまたはその他のものを使用していますか?

しかし、Microsoftは、基本的に、あなたがEnumで遊んで、ACLを変更することを望んでいません。彼らはSetupAPI(Windows DDKのdevconサンプルに示されているように)を使用してデバイスを列挙して削除するようにしたいと考えています。

私は最近、すべてのデバイスが同じカスタムデバイスクラスを共有しているので、簡単に列挙できるようにコードを書いてから、devconのコードに従って盲目的に削除しました。

関連する問題