버스 드라이버가 자식 디바이스를 감지하면 드라이버는 디바이스에 대한 리소스 요구 사항 목록을 만들어야 합니다. 목록의 각 항목은 장치에 대한 논리적 구성입니다.
드라이버가 버스 열거 중에 디바이스를 보고한 후 프레임워크는 드라이버의 EvtDeviceResourceRequirementsQuery 콜백 함수를 호출합니다. 이 콜백 함수는 빈 리소스 요구 사항 목록을 나타내는 resource-requirements-list 개체에 대한 핸들을 받습니다.
그런 다음 드라이버는 다음을 수행하여 리소스 요구 사항 목록에 정보를 추가해야 합니다.
빈 논리 구성을 만듭니다.
드라이버가 지정할 각 논리 구성에 대해 드라이버는 WdfIoResourceListCreate 호출하여 빈 논리 구성을 만들어야 합니다.
논리 구성에 리소스 설명자를 추가합니다.
논리 구성에 리소스 설명자를 추가하려면 드라이버가 디바이스에 필요한 하드웨어 리소스의 각 유형에 대해 다음을 수행해야 합니다.
- 특정 리소스에 유효한 값의 범위를 지정하는 드라이버 할당 IO_RESOURCE_DESCRIPTOR 구조를 채웁니다.
- WdfIoResourceListAppendDescriptor 또는 WdfIoResourceListInsertDescriptor 호출하여 IO_RESOURCE_DESCRIPTOR 구조체의 내용을 논리 구성에 추가합니다.
디바이스에서 리소스 유형의 인스턴스를 둘 이상 사용하는 경우 리소스에 액세스하는 스택의 모든 드라이버는 리소스가 추가되는 순서를 알고 있어야 합니다. 예를 들어 디바이스에 두 개의 I/O 포트 주소 범위가 필요한 경우 리소스 설명자에 액세스하는 모든 드라이버는 두 범위가 논리 구성에 추가되는 순서를 알고 있어야 합니다.
리소스 요구 사항 목록에 논리 구성을 추가합니다.
디바이스의 리소스 요구 사항 목록에 논리적 구성을 추가하기 위해 드라이버는 WdfIoResourceRequirementsListAppendIoResList 또는 WdfIoResourceRequirementsListInsertIoResList호출합니다.
디바이스에 리소스를 할당할 때 PnP 관리자는 목록의 첫 번째 논리 구성 요구 사항과 일치하려고 시도합니다. 해당 구성에 필요한 리소스를 사용할 수 없는 경우 PnP 관리자는 리소스를 사용할 수 있는 목록의 다음 구성과 일치합니다.
드라이버가 PnP가 아닌 디바이스를 지원하는 경우, 드라이버는 일반적으로 WdfIoResourceRequirementsListSetSlotNumber을 호출하고, WdfIoResourceRequirementsListSetInterfaceType을 호출해야 합니다.
드라이버의 EvtDeviceResourceRequirementsQuery 콜백 함수가 반환되면 프레임워크는 리소스 요구 사항 목록을 PnP 관리자에 전달합니다.