尋找和對應硬體資源
本主題描述從第 2 版開始,Kernel-Mode Driver Framework (KMDF) 驅動程式或 User-Mode Driver Framework (UMDF) 驅動程式如何對應轉譯的記憶體資源 (CmResourceTypeMemory) 其 EvtDevicePrepareHardware 回呼函式中所收到的記憶體資源。
UMDF 1.x 驅動程式也可以在其 IPnpCallbackHardware2::OnPrepareHardware 方法中接收這種類型的資源。 如需詳細資訊,請參閱 在 UMDF 1.x 驅動程式中尋找和對應硬體資源。
您的驅動程式會在其EvtDevicePrepareHardware回呼函式的裝置資源清單中,接收原始和翻譯的硬體資源版本。 驅動程式可以儲存資源清單,直到架構呼叫驅動程式的 EvtDeviceReleaseHardware 回呼函式為止。
一般而言,驅動程式會從其 EvtDevicePrepareHardware回呼函式呼叫WdfCmResourceListGetCount,以判斷已翻譯資源清單中的資源描述元數目,然後在迴圈中呼叫WdfCmResourceListGetDescriptor來識別記憶體對應暫存器、I/O 埠和中斷。
如果驅動程式獲指派轉譯的記憶體資源 (CmResourceTypeMemory) ,則必須將實體位址對應至可存取裝置註冊的位址。
KMDF 驅動程式會呼叫 MmMapIoSpace ,將指定的實體位址範圍對應至非分頁系統空間。 然後它會使用 HAL 程式庫常式 來讀取和寫入暫存器。
UMDF 驅動程式會呼叫 WdfDeviceMapIoSpace ,將實體位址對應至虛擬基底位址,以便與 WDF 暫存器/埠存取函 式搭配使用,以讀取和寫入註冊和埠。
驅動程式會從其EvtDeviceReleaseHardware回呼函式呼叫MmUnmapIoSpace或WdfDeviceUnmapIoSpace來取消對應資源。
您不需要將 I/O 空間中的資源對應 (CmResourceTypePort、 CmResourceTypeInterrupt、 CmResourceTypeDma) 。
如果您的 UMDF 驅動程式呼叫 WdfDeviceMapIoSpace,您必須將 UmdfDirectHardwareAccess INF 指示詞設定為 AllowDirectHardwareAccess。
如需顯示驅動程式如何尋找和對應記憶體對應暫存器資源的範例,請參閱 讀取和寫入裝置暫存器。