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