하드웨어 리소스 소개

시스템의 하드웨어 리소스는 I/O 포트, 인터럽트 벡터, DMA(직접 메모리 액세스) 채널 및 시스템에 연결된 각 디바이스에 할당되어야 하는 기타 통신 경로입니다. 이 섹션의 topics Kernel-Mode 드라이버 프레임워크(KMDF) 드라이버가 디바이스에 대한 하드웨어 리소스 요구 사항을 협상하고 제안된 리소스 목록을 검토한 다음 할당된 리소스를 받는 방법을 설명합니다. 이 섹션에서는 KMDF와 UMDF(User-Mode Driver Framework) 드라이버가 할당된 리소스에 액세스하고 매핑하는 방법에 대해서도 설명합니다.

사용자가 PnP 디바이스를 연결한 후 디바이스를 열거 하는 드라이버는 일반적으로 디바이스에서 사용할 수 있는 하드웨어 리소스의 조합인 하나 이상의 논리적 구성을 만듭니다. 이러한 구성은 다음과 같습니다.

  • 시스템이 시작될 때 디바이스에 필요한 하드웨어 리소스를 나열하는 부팅 구성 입니다. (PnP 디바이스의 경우 이 정보는 BIOS에서 제공합니다.)

  • 디바이스가 작동할 수 있는 추가 구성입니다. 드라이버는 리소스 요구 사항 목록에서 이러한 추가 구성을 그룹화합니다. PnP 관리자는 결국 이 목록에서 리소스를 선택하여 디바이스에 할당합니다.

드라이버는 논리 구성을 만든 후 프레임워크로 보내고 프레임워크는 이를 PnP 관리자로 보냅니다.

다음으로, PnP 관리자는 디바이스에 필요한 드라이버를 결정하고 아직 로드되지 않은 경우 로드합니다. PnP 관리자는 검토를 위해 디바이스의 하드웨어 요구 사항 목록을 디바이스의 드라이버에 보냅니다. 함수 및 필터 드라이버는 이 목록을 수정하고 PnP 관리자로 다시 보낼 수 있습니다.

PnP 관리자는 수정된 하드웨어 요구 사항 목록을 검사하고 시스템에서 실제로 사용할 수 있는 지정된 리소스를 결정합니다. 디바이스에 PnP 관리자가 이전에 다른 디바이스에 할당한 리소스가 필요한 경우 PnP 관리자는 시스템의 디바이스 간에 리소스를 재배포 하려고 시도할 수 있습니다.

다음으로 PnP 관리자는 PnP 관리자가 디바이스에 할당하려는 리소스 목록인 리소스 목록을 만듭니다. PnP 관리자는 검토를 위해 이 목록을 디바이스의 드라이버에 보냅니다. 이 시점에서 함수 및 필터 드라이버는 목록에서 리소스를 제거할 수 있지만 리소스를 추가할 수는 없습니다.

마지막으로 PnP 관리자는 디바이스에 리소스를 할당합니다. 프레임워크는 리소스 목록을 디바이스의 함수 및 필터 드라이버에 전달하고 디바이스의 함수 드라이버는 디바이스와 드라이버가 리소스에 액세스할 수 있도록 필요한 모든 초기화를 수행합니다.

다음 단계에서는 프로세스를 자세히 설명합니다.

  1. 사용자가 디바이스를 연결합니다.

  2. 버스 드라이버는 디바이스를 감지하고 열거합니다 .

  3. 프레임워크는 버스 드라이버의 EvtDeviceResourcesQuery 콜백 함수를 호출하여 디바이스의 부팅 구성 을 설명하는 리소스 목록을 만듭니다 .

  4. 프레임워크는 버스 드라이버의 EvtDeviceResourceRequirementsQuery 콜백 함수를 호출하여 디바이스에 대한 리소스 요구 사항 목록을 만듭니다 .

  5. PnP 관리자는 디바이스에 필요한 드라이버를 결정하고 아직 로드되지 않은 경우 디바이스에 대한 드라이버 스택을 만듭니다.

  6. PnP 관리자는 검토를 위해 디바이스의 리소스 요구 사항 목록을 드라이버 스택으로 보냅니다. 목록이 드라이버 스택 아래로 이동함에 따라 프레임워크는 각 함수를 호출하고 드라이버의 EvtDeviceFilterRemoveResourceRequirements 콜백 함수를 필터링합니다. 목록이 스택을 백업할 때 프레임워크는 각 함수를 호출하고 드라이버의 EvtDeviceFilterAddResourceRequirements 콜백 함수를 필터링합니다. 이러한 콜백 함수는 모두 리소스 요구 사항 목록을 수정할 수 있습니다.

  7. PnP 관리자는 디바이스에 대한 리소스 목록을 만들고 검토를 위해 드라이버 스택으로 보냅니다. 프레임워크는 각 함수를 호출하고 드라이버의 EvtDeviceRemoveAddedResources 콜백 함수를 필터링하여 드라이버의 EvtDeviceFilterAddResourceRequirements 콜백 함수가 추가된 리소스를 제거하므로 버스 드라이버가 이를 사용하지 않도록 합니다.

  8. 프레임워크는 PnP 관리자로부터 최종 리소스 목록을 수신하고 저장합니다.

  9. 드라이버가 WdfInterruptCreate 를 호출하여 인터럽트 개체를 만드는 경우 프레임워크는 리소스 목록에서 인터럽트 리소스를 찾아 인터럽트 개체에 할당합니다.

  10. 디바이스가 초기화되지 않은 D0 상태로 전환되면 프레임워크는 각 드라이버의 EvtDevicePrepareHardware 콜백 함수를 호출하여 디바이스 리소스 목록의 원시 및 번역된 버전을 입력 인수로 전달합니다. 드라이버는 프레임워크가 드라이버의 EvtDeviceReleaseHardware 콜백 함수를 호출할 때까지 유효한 리소스 목록을 저장할 수 있습니다.