Finding and Mapping Hardware Resources in UMDF 1.x Drivers

Warning

UMDF 2 is the latest version of UMDF and supersedes UMDF 1. All new UMDF drivers should be written using UMDF 2. No new features are being added to UMDF 1 and there is limited support for UMDF 1 on newer versions of Windows 10. Universal Windows drivers must use UMDF 2.

The archived UMDF 1 samples can be found in the Windows 11, version 22H2 - May 2022 Driver Samples Update.

For more info, see Getting Started with UMDF.

If you are using UMDF version 2.0 or later, see Finding and Mapping Hardware Resources.

A UMDF 1.x driver receives hardware resources in its IPnpCallbackHardware2::OnPrepareHardware callback method. The driver uses the IWDFCmResourceList interface to review the translated resource list and identify memory-mapped registers, I/O ports, and interrupts.

The driver iterates through the resource list by calling IWDFCmResourceList::GetCount and IWDFCmResourceList::GetDescriptor.

If the driver receives memory-mapped registers, the driver must call IWDFDevice3::MapIoSpace to map the registers before it can access them. Typically, a driver maps its registers in its IPnpCallbackHardware2::OnPrepareHardware method. The driver unmaps the registers in its IPnpCallbackHardware2::OnReleaseHardware callback by calling IWDFDevice3::UnmapIoSpace. Note that mapping is not needed for I/O ports.

For an example that shows how a driver finds and maps memory-mapped register resources, see IWDFDevice3::MapIoSpace.