Share via


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

다음 시나리오에서 디바이스 노드에는 KMDF 버스 드라이버와 PnP 디바이스를 지원하는 하나 이상의 KMDF 함수 또는 필터 드라이버가 포함됩니다.

시스템이 실행되는 동안 사용자가 디바이스를 버스에 연결하면 디바이스의 버스 드라이버와 프레임워크는 다음 작업을 수행합니다.

KMDF 버스 드라이버의 전원 강화 시퀀스에 대한 자세한 내용은 버스 드라이버용 전원 켜기 시퀀스를 참조하세요.

다음으로 PnP 관리자는 디바이스에 필요한 추가 드라이버(함수 드라이버 및 필터 드라이버)를 결정합니다. 이러한 드라이버가 아직 로드되지 않은 경우 PnP 관리자는 드라이버를 로드하고 DriverEntry 루틴을 호출합니다. 각 함수 또는 필터 드라이버에 대해 다음 작업이 발생합니다.

  • 프레임워크는 드라이버가 WdfDeviceCreate를 호출하여 드라이버의 디바이스를 나타내는 프레임워크 디바이스 개체를 만들 수 있도록 각 추가 드라이버의 EvtDriverDeviceAdd 콜백 함수를 호출합니다. 함수 드라이버는 FDO(기능 디바이스 개체)를 만들고 필터 드라이버는 필터 디바이스 개체(Filter DO)를 만듭니다.

  • 프레임워크는 각 함수를 호출하고 드라이버의 EvtDeviceFilterRemoveResourceRequirements 콜백 함수를 호출한 다음 각 드라이버의 EvtDeviceFilterAddResourceRequirements 콜백 함수를 호출합니다. 디바이스가 시작되기 직전에 프레임워크는 EvtDeviceRemoveAddedResources 콜백 함수를 호출합니다. 이러한 세 가지 콜백 함수를 사용하면 PnP 관리자가 디바이스에 리소스를 할당하기 전에 필터 및 함수 드라이버가 디바이스에 필요한 하드웨어 리소스 목록을 수정할 수 있습니다. 자세한 내용은 Framework-Based 드라이버용 하드웨어 리소스를 참조하세요.

  • 프레임워크는 디바이스가 작동(D0) 전원 상태에 도달했는지 확인합니다.

  • 디바이스를 지원하는 각 함수 및 필터 드라이버에 대해 프레임워크는 드라이버 스택에서 가장 낮은 드라이버부터 시작하여 순서대로 한 번에 하나의 드라이버를 수행합니다.

    1. 프레임워크는 드라이버의 EvtDevicePrepareHardware 콜백 함수(있는 경우)를 호출하고 PnP 관리자가 디바이스에 할당한 하드웨어 리소스 목록을 전달합니다.
    2. 프레임워크는 드라이버의 EvtDeviceD0Entry 콜백 함수(있는 경우)를 호출합니다.
    3. 프레임워크는 각 인터럽트에 대해 드라이버의 EvtInterruptEnable 콜백 함수(있는 경우)를 호출한 다음 드라이버가 디바이스 인터럽트를 사용하도록 설정할 수 있도록 드라이버의 EvtDeviceD0EntryPostInterruptsEnabled 콜백 함수를 호출합니다.
    4. 하드웨어 및 드라이버가 DMA를 지원하는 경우 프레임워크는 생성된 각 DMA 채널에 대해 드라이버의 EvtDmaEnablerFill, EvtDmaEnablerEnableEvtDmaEnablerSelfManagedIoStart 콜백 함수(있는 경우)를 호출합니다.
    5. 프레임워크는 드라이버의 EvtChildListScanForChildren 콜백 함수(있는 경우)를 호출합니다.
    6. 프레임워크는 모든 디바이스의 전원 관리형 I/O 큐를 시작합니다.
    7. 드라이버가 자체 관리형 I/O를 사용하는 경우 프레임워크는 드라이버의 EvtDeviceSelfManagedIoInit 콜백 함수를 호출합니다.

KMDF 함수 또는 필터 드라이버의 전원 강화 시퀀스에 대한 자세한 내용은 함수 또는 필터 드라이버에 대한 Power-Up 시퀀스를 참조하세요.