Share via


리소스 요구 사항 목록 만들기

버스 드라이버가 자식 디바이스를 감지하면 드라이버는 디바이스에 대한 리소스 요구 사항 목록을 만들어야 합니다. 목록의 각 항목은 디바이스에 대한 논리적 구성 입니다.

드라이버가 버스 열거 중에 디바이스를 보고한 후 프레임워크는 드라이버의 EvtDeviceResourceRequirementsQuery 콜백 함수를 호출합니다. 이 콜백 함수는 빈 리소스 요구 사항 목록을 나타내는 resource-requirements-list 개체에 대한 핸들을 받습니다.

그런 다음, 드라이버는 리소스 요구 사항 목록에 정보를 추가하려면 다음을 수행해야 합니다.

  • 빈 논리 구성을 만듭니다.

    드라이버가 지정할 각 논리 구성에 대해 드라이버는 WdfIoResourceListCreate 를 호출하여 빈 논리 구성을 만들어야 합니다.

  • 논리 구성에 리소스 설명자를 추가합니다.

    논리 구성에 리소스 설명자를 추가하려면 드라이버가 디바이스에 필요한 각 유형의 하드웨어 리소스에 대해 다음을 수행해야 합니다.

    1. 특정 리소스에 대한 유효한 값 범위를 지정하는 드라이버 할당 IO_RESOURCE_DESCRIPTOR 구조체를 입력합니다.
    2. WdfIoResourceListAppendDescriptor 또는 WdfIoResourceListInsertDescriptor를 호출하여 논리 구성에 IO_RESOURCE_DESCRIPTOR 구조체의 내용을 추가합니다.

    디바이스에서 리소스 유형의 두 개 이상의 instance 사용하는 경우 리소스에 액세스하는 스택의 모든 드라이버는 리소스가 추가되는 순서를 알고 있어야 합니다. 예를 들어 디바이스에 두 개의 I/O 포트 주소 범위가 필요한 경우 리소스 설명자에 액세스하는 모든 드라이버는 두 범위가 논리 구성에 추가되는 순서를 알고 있어야 합니다.

  • 리소스 요구 사항 목록에 논리 구성을 추가합니다.

    디바이스의 리소스 요구 사항 목록에 논리적 구성을 추가하기 위해 드라이버는 WdfIoResourceRequirementsListAppendIoResList 또는 WdfIoResourceRequirementsListInsertIoResList를 호출합니다.

    디바이스에 리소스를 할당할 때 PnP 관리자는 목록의 첫 번째 논리 구성 요구 사항과 일치하려고 시도합니다. 해당 구성에 필요한 리소스를 사용할 수 없는 경우 PnP 관리자는 리소스를 사용할 수 있는 목록의 다음 구성과 일치합니다.

    드라이버가 PnP가 아닌 디바이스를 지원하는 경우 드라이버는 일반적으로 WdfIoResourceRequirementsListSetSlotNumberWdfIoResourceRequirementsListSetInterfaceType을 호출해야 합니다.

드라이버의 EvtDeviceResourceRequirementsQuery 콜백 함수가 반환되면 프레임워크는 리소스 요구 사항 목록을 PnP 관리자에 전달합니다.