デバイス インストールの共同インストーラーのデバッグ
一部のハードウェア デバイス インストール パッケージには、デバイスのインストールに役立つ共同インストーラーと呼ばれる DLL ファイルが含まれています。
他のモジュールと同じ方法で共同インストーラーをデバッグすることはできません。 これは、共同インストーラーが読み込まれる固有の方法と、開発者が実行中のプロセスに侵入する機会を提供することなく、多くのインストール シナリオが自動的に発生するためです。
この問題は、プログラムでデバイスをインストールすることで解決できます。 デバイスをインストールするアプリケーションにデバッガーをアタッチすると、共同インストーラー自体にアクセスできます。 これを実現する最も簡単な方法は、Windows Driver Kit (WDK) に含まれている DevCon ツールを使用してデバイスをインストールまたは再インストールすることです。 その後、WinDbg を使用して共同インストーラーをデバッグできます。
回復には、次の手順を実行します。 この手順では、共同インストーラーを使用するデバイス用の動作するドライバー インストール パッケージを開発していることを前提としています。 また、WDK の最新のコピーがあることを前提としています。 ドライバー、ドライバー インストール パッケージ、ドライバー インストール共同インストーラーの開発については、WDK のドキュメントを参照してください。
DevCon と WinDbg を使用した共同インストーラーのデバッグ
デバイスを Mac に接続します。
新しいハードウェアが見つかったウィザードをキャンセルします。
WinDbg の起動
WinDbg の [ファイル] メニューから [実行可能ファイルを開く] を選択します。
新しいプロジェクト ダイアログ ボックスで、次の操作を行います。
ファイル選択テキスト ボックスで、DevCon ツール (Devcon.exe) を選択します。 このためには、WDK インストール フォルダーを参照し、サブディレクトリ ツールを開き、サブディレクトリ devcon を開き、コンピューターのプロセッサ アーキテクチャに一致するサブディレクトリを開き、Devcon.exeを選択します。 Devcon.exeで 1 回だけクリックし、[開く] をまだ押さないでください。
[引数] テキスト ボックスに、次のテキストを入力します。INFFile はデバイス インストール情報 (INF) ファイルのファイル名、HardwareID はデバイスのハードウェア ID です。
update INFFile HardwareID
[スタート ディレクトリ] テキスト ボックスに、デバイス インストール パッケージへのパスを入力します。
開く をクリックします。
デバッグ プロセスが開始され、DevCon がドライバーをインストールする前に、WinDbg が DevCon プロセスに分割されます。
読み込まれたときに共同インストーラー プロセスに分割するようにデバッガーを構成します。 そのためには、次のいずれかの方法を実行できます。
デバッガー コマンド ウィンドウで、sxe (例外の設定) コマンドの後に ld: を使用し、ファイル拡張子を除く共同インストーラーのファイル名を使用します。 コロンの後にスペースは必要ありません。たとえば、共同インストーラーの名前がmycoinst.dll場合は、次のコマンドを使用します。
sxe ld:mycoinst
WinDbg の [デバッグ] メニューから [イベント フィルター] を選択します。 [イベント フィルター] ダイアログ ボックスで、[モジュールの読み込み] を選択します。 [実行] で [有効] を選択します。[続行] で、[処理されていません] を選択します。[引数] ボタンをクリックし、テキスト ボックスにファイル拡張子を除く共同インストーラーのファイル名を入力します (たとえば、mycoinst.dllに「mycoinst」と入力します)。 [OK] をクリックし、 [閉じる] をクリックします。
F5 キーを押すか、デバッガー コマンド ウィンドウで g (Go) コマンドを入力して実行を再開します。
共同インストーラーが読み込まれると、実行がデバッガーに中断されます。 この時点で、必要な追加のブレークポイントを設定できます。
この手順の制限事項
場合によっては、DevCon でデバイス インストール パッケージを実行すると、セキュリティ トークンなどが異なるため、PnP インストールの動作とは若干異なる場合があります。 共同インストーラーで特定の問題をデバッグしようとしている場合は、DevCon が関係している場合、この問題がレプリケートされない可能性があります。 そのため、この手法を使用する前に、DevCon を使用してデバッガーをアタッチせずにドライバーをインストールし、PnP シナリオと DevCon シナリオの両方にこの問題が存在することを確認する必要があります。
DevCon がインストールを開始するたびに問題が消えた場合は、DevCon を使用せずに共同インストーラーをデバッグする必要があります。 これを行う 1 つの方法は、TList ツールと /m オプションを使用して、共同インストーラー モジュールを読み込むプロセスを特定し、そのプロセスにデバッガーをアタッチすることです。