다음을 통해 공유


하드웨어 리소스 찾기 및 매핑

이 항목에서는 버전 2부터 KMDF(Kernel-Mode Driver Framework) 드라이버 또는 UMDF(User-Mode Driver Framework) 드라이버가 EvtDevicePrepareHardware 콜백 함수에서 수신하는 변환된 메모리 리소스(CmResourceTypeMemory)를 매핑하는 방법을 설명합니다.

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로 설정해야 합니다.

드라이버가 메모리 매핑된 레지스터 리소스를 찾고 매핑하는 방법을 보여 주는 예제는 디바이스 레지스터 읽기 및 쓰기를 참조하세요.