未処理リソースと変換済みリソース
ドライバーの EvtDeviceRemoveAddedResources や EvtDevicePrepareHardware コールバック関数は、リソース リストを受け取ると、2 つのバージョンのリストを受け取ります。 一方のバージョンはデバイスの未処理リソースを表し、もう一方はデバイスの変換済みリソースを表します。 どちらのバージョンも、同じ順序で同じハードウェア リソースのセットを表します。
未処理リソースは、デバイスが接続されているバスに対して相対的なアドレスによって識別されるリソースです。 通常、デバイスをプログラムするドライバーは、これらのアドレスをデバイスに提供します。
変換済みリソースは、ドライバーがリソースへのアクセスに使用するシステム物理アドレスによって識別されるリソースです。
PCI バス デバイスのドライバーは、デバイスの Base Address Registers (BARs)に表示される順序で一覧表示されているリソースを受け取ります。 ただし、BAR のインデックス X にあるリソースがリソース リスト内の同じインデックス位置にあるリソースと一致しない可能性があるため、追加のリソース記述子がリストにインターリーブされる可能性があります。
未処理リソースと変換済みリソースの詳細については、CM_PARTIAL_RESOURCE_DESCRIPTOR構造のメンバーの説明をご参照ください。
デバイスの変換済みリソース リストに、CM_PARTIAL_RESOURCE_DESCRIPTOR構造のTypeメンバーがCmResourceTypeMemory に設定されているリソースが含まれている場合、そのリソースにアクセスするすべてのドライバーは次の操作を行う必要があります:
- ドライバーの EvtDevicePrepareHardware コールバック関数は、システムの物理アドレスをシステム仮想アドレスにマップするために MmMapIoSpaceを呼び出す必要があります。
- ドライバーの EvtDeviceReleaseHardware コールバック関数は、アドレスのマップを解除するために、MmUnmapIoSpaceを呼び出す必要があります。
バス相対アドレスのマッピングの詳細については、Mapping Bus-Relative Addresses to Virtual Addressesをご参照ください。