2

ベンダーID、デバイスIDをプログラムで指定して、pciデバイスを取得する方法を書いています(Linuxカーネルのpci_get_deviceと同じように)。

そのためには、デバイス オブジェクトの構成を取得する必要があります。私は同じことをここから読んでいます:http://msdn.microsoft.com/en-us/library/windows/hardware/ff558707(v=vs.85).aspx

これをテストするために、I/O デバイスドライバーをインストールするサービスインストールフレームワークである偽のドライバーを作成し、DriverEntry からこの PCI 機能をテストできます。

しかし、OS は irql_not_less_or_equal でクラッシュします。

irp = IoBuildSynchronousFsdRequest(IRP_MJ_PNP,
                                       targetObject,
                                       NULL,
                                       0,
                                       NULL,
                                       &event,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> &ioStatusBlock);

誰が何が問題なのか教えてもらえますか (私はこれを Driver Entry から呼び出し、現在インストールされているドライバーの deviceObject を渡しています)。

4

1 に答える 1

0

に有効なPDOがありませんDriverEntry()DriverEntryユーザースペースアプリケーションで大まかに対応しmain()、ドライバーがメモリにロードされた後に最初に呼び出されます。DriverEntry主な目的は、ドライバーをOSに登録することであり、そのコードは実際のデバイスに依存しません。OSが初期化コールバックを呼び出した後(デバイスを認識した後)にのみPDOを使用できます-コールバックはDriverEntryの完了後に呼び出されます(実際には、コールバックは内部のドライバー登録の一部としてOSに提供される必要がありますDriverEntry())。

于 2012-10-21T06:22:30.710 に答える