私たちの組み込みシステムプログラマーは、モバイルハードウェア用の仮想シリアルポートドライバーのシェルを開発しました。私はそれを機能させるための方法を入力してきました。ドライバーは期待どおりに機能し、NMEA文字列(GPSデータ)を吐き出すUSBデバイスのCOMポートをシミュレートします。
略してWM6と入力しますが、違いがあればOSはWM6.1です。
私が抱えている問題は、WM6でのみデバイスの起動時にドライバーがロードされないことです。ドライバーはCE5とWM6の両方用に開発されましたが、CE5では、ドライバーは起動時に「ロード」されます。これは、WM6構成の問題を示しています。この時点で、ActivateDevice()メソッドを使用してドライバーがWM6とCE5に読み込まれることに注意してください。これは、少なくともドライバーをテストできるように、ドライバーを起動するための小さなテストアプリであるWM6にこれまで使用してきたものです。 WM6に取り組んでいます。
レジストリには、ドライバの起動に必要なキーがすでに入力されています。したがって、ドライバは起動時に問題なくロードされるはずです。HKEY_LOCAL_MACHINE \ Drivers \ BuiltInにはサブキーA36D_GPS_COMが含まれており、そのキーには含まれています。
DeviceArrayIndex:0
DeviceType:0
Dll:A36D.dll
フラグ:0
わかりやすい名前:A36DGPSCOMポート
インデックス:8
注文:3
プレフィックス:COM
優先度:0
優先度:256
私が言えることから、私がすでに調査したこの問題に対する一般的な2つの一般的な答えがあります。これらのアイデアは組み込みプログラマーによって私に与えられましたが、私はそれらを自分で行う方法を研究しました。
1)デバイスがロードされるとCOMポートが最終的に解放された場合でも、ドライバーがロードしようとしたときにCOMポートはすでに使用されています。レジストリのインデックス値を1から20に変更し、デバイスを再起動しましたが、ドライバーが指定されたCOMポートにロードされません。したがって、これをより徹底的にテストするために、別のデバイスをCOM9からCOM8に移動し、ドライバーをCOM9に移動しました(上記のレジストリ設定を使用)。他のデバイスドライバーはCOM8で起動時に非常にうまくロードされますが、私のデバイスドライバーはCOM9で起動しません。他の設定を微調整しようとしましたが、それでも起動時にロードされません。
2)CE5とWM6のもう1つの考えられる問題と違いは、セキュリティです。したがって、MSDNの記事http://msdn.microsoft.com/en-us/library/bb737570.aspxを使用します。私は署名とXMLプロビジョニングに取り組んできました。特権キー(有効期限が切れていない)を使用して、A36D.dllはVisual Studioで署名され、作成されたインストールCABファイルも同じキーで署名されます。_setup.xmlファイルが作成され、cabファイルに追加されるため、署名されたキーが証明書ストアに追加されます。CABファイルは、それがまだ有効であることを確認するために、同じキーで再度署名されます。さらに、_setup.xmlは独自の.CPFファイルにパッケージ化されています。CABファイルとCPFファイルはどちらも、証明書ストア「HKEY_LOCAL_MACHINE \ Comm \ Security \ SystemCertificates」にキーを追加するので、これが機能していることを確認してください。注意の問題として、私はそれを特権、非特権、ROOTおよびSPC証明書ストアにインストールしました。ただし、モバイルデバイスの起動時にデバイスドライバーがdevice.exeに読み込まれません。
ドライバーでActivateDevice()を呼び出すスタートアップアプリケーションの回避策以外に、スタートアップ時にこのドライバーをロードする方法に困惑しています。
CE5では機能しますがWM6では機能しないのは非常に奇妙だと思います。問題を引き起こしている可能性のあるものは他にありません。
誰かが試すことができるさらなる提案がありますか?
すべての助けに感謝します。