テクニカル ドキュメント #74



Doc ID: 74
製品: WinDriver
Version:  --

WinDriver を使用して PCI カードのメモリにどのようにアクセスできますか?

WD_PciScanCards() を使用して、接続してるカードのスロットを見つけてください。

WD_PciGetCardInfo() を呼び出して、カードの情報を取得します。
この情報には、Plug & Play システムでカード用に選択されたメモリ範囲が含まれます。

WD_CardRegister() を呼び出して、メモリ範囲をインストールし、それをカーネルとユーザー モードの両方のバーチャル アドレス スペースにマップします。

物理アドレスのユーザー モード マップを使用することによって、ユーザー モード アプリケーションからでも直接メモリにアクセスできます。
物理アドレスは、cardReg.Card.Item[i].I.Mem.dwUserDirectAddr の、WD_CardRegister() で返されます。(i は、配列 Item のメモリ範囲のインデックス番号を現しています)
またはカーネルでメモリにアクセスするには、メモリのカーネル モード マップを渡すことによって、ユーザー モード アプリケーションからでも直接メモリにアクセスできます。

WinDriver\samples\pci_diag ディレクトリにサンプルがあるので参照してください。また、PCI カード用に DriverWizard で生成した診断コードも参照してください。
WinDriver の API 関数についての説明は、ユーザー マニュアルを参照してください。

[メモ: Kernel PlugIn プロジェクトからカーネルで直接メモリにアクセスするには、物理メモリ アドレスのカーネル モード マップを使用する必要があります。
物理メモリ アドレスは、cardReg.Card.Item[i].I.Mem.dwTransAddr の、WD_CardRegister() で返されます。その場合、ユーザー モード アプリケーションから直接メモリにアクセスするのにユーザー モード マップは使用できません]。