尋找並映射硬體資源
從第 2 版開始,本文描述 Kernel-Mode Driver Framework(KMDF)和 User-Mode Driver Framework(UMDF)驅動程式在其 EvtDevicePrepareHardware 回呼函式中接收的轉譯記憶體資源(CmResourceTypeMemory)是如何對應的。
UMDF 1.x 驅動程式也可以在其 IPnpCallbackHardware2::OnPrepareHardware 方法中接收這種類型的資源。 如需詳細資訊,請參閱 在 UMDF 1.x 驅動程式中尋找及對應硬體資源。
您的驅動程式在其 EvtDevicePrepareHardware 回呼函數中,接收裝置資源列表中的 原始版本和轉譯 的硬體資源版本。 驅動程式可以儲存資源清單,這些資源清單在架構呼叫驅動程式的 EvtDeviceReleaseHardware 回呼函式之前都是有效的。
一般而言,驅動程式會從其 EvtDevicePrepareHardware 回呼函式呼叫 WdfCmResourceListGetCount,以判斷翻譯資源清單中的資源描述符數目,然後在循環中呼叫 WdfCmResourceListGetDescriptor,以識別記憶體映射的寄存器、I/O 埠和中斷。
如果驅動程式已獲指派翻譯的記憶體資源(CmResourceTypeMemory),則必須將實體地址對應至可存取裝置暫存器的位址。
KMDF 驅動程式會呼叫 MmMapIoSpace,將指定的實體位址範圍對應至非分頁系統空間。 然後使用 HAL 連結庫例程 來讀取和寫入暫存器。
UMDF 驅動程式會呼叫 WdfDeviceMapIoSpace,將實體位址對應至虛擬基位址,以便與 WDF Register/Port Access Functions 搭配使用,以讀取和寫入登錄和埠。
驅動程式會通過在其 EvtDeviceReleaseHardware 回呼函式中呼叫 MmUnmapIoSpace 或 WdfDeviceUnmapIoSpace 來取消對應資源。
您不需要對應 I/O 空間中的資源(CmResourceTypePort、CmResourceTypeInterrupt、CmResourceTypeDma)。
如果您的 UMDF 驅動程式呼叫 WdfDeviceMapIoSpace,您必須將 UmdfDirectHardwareAccess INF 指示詞設定為 AllowDirectHardwareAccess。
如需示範驅動程式如何尋找及對應記憶體映射暫存器資源的範例,請參閱 讀取和寫入裝置暫存器。