尋找和對應硬體資源

本主題描述從第 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回呼函式呼叫MmUnmapIoSpaceWdfDeviceUnmapIoSpace來取消對應資源。

您不需要將 I/O 空間中的資源對應 (CmResourceTypePortCmResourceTypeInterruptCmResourceTypeDma) 。

如果您的 UMDF 驅動程式呼叫 WdfDeviceMapIoSpace,您必須將 UmdfDirectHardwareAccess INF 指示詞設定為 AllowDirectHardwareAccess

如需顯示驅動程式如何尋找和對應記憶體對應暫存器資源的範例,請參閱 讀取和寫入裝置暫存器