PnP 관리자가 시스템 리소스를 재배포합니다.

사용자가 시스템에 디바이스를 추가하고 디바이스에 PnP 관리자가 이미 다른 디바이스에 할당한 시스템 리소스가 필요한 경우 PnP 관리자는 리소스를 다시 할당하려고 시도합니다.

이 프로세스 중에 PnP 관리자는 디바이스를 중지하고 작동 중(D0) 상태에서 제거합니다. 그런 다음 새 리소스를 사용하여 다시 시작할 수 있도록 디바이스에 새 리소스 목록을 제공합니다.

리소스를 재배포할 때 PnP 관리자는 디바이스의 드라이버 중 하나에 다음이 있는 경우 디바이스의 리소스 할당을 변경하지 않습니다.

Power-Down 시퀀스

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

  1. 드라이버가 자체 관리형 I/O를 사용하는 경우 프레임워크는 드라이버의 EvtDeviceSelfManagedIoSuspend 콜백 함수를 호출합니다.

  2. 프레임워크는 디바이스의 전원 관리형 I/O 큐를 모두 중지합니다.

  3. 하드웨어 및 드라이버가 DMA를 지원하는 경우 프레임워크는 생성된 각 DMA 채널에 대해 드라이버의 EvtDmaEnablerSelfManagedIoStop, EvtDmaEnablerFlushEvtDmaEnablerDisable 콜백 함수를 호출합니다.

  4. 드라이버가 디바이스 인터럽트를 사용하지 않도록 설정할 수 있도록 드라이버의 EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisable 콜백 함수(있는 경우)를 호출합니다.

  5. 프레임워크는 드라이버의 EvtDeviceD0Exit 콜백 함수(있는 경우)를 호출합니다.

  6. 프레임워크는 PnP 관리자가 디바이스에 할당한 하드웨어 리소스 목록을 전달하는 드라이버의 EvtDeviceReleaseHardware 콜백 함수(있는 경우)를 호출합니다.

버스 드라이버는 스택에서 가장 낮은 드라이버이며 마지막으로 호출됩니다. 프레임워크는 버스 드라이버의 EvtDeviceD0Exit 콜백 함수를 호출할 때 디바이스의 PDO 및 WdfPowerDeviceD3FinalTargetState 값을 나타내는 프레임워크 디바이스 개체에 핸들을 전달합니다. 버스 드라이버는 프레임워크가 WdfDeviceInitSetReleaseHardwareOrderOnFailure를 호출하여 EvtDeviceReleaseHardware 콜백 함수를 호출하는 시기를 제어할 수 있습니다.

Power-Up 시퀀스

호출된 첫 번째 드라이버는 버스 드라이버입니다. 프레임워크가 버스 드라이버의 EvtDeviceD0Entry 콜백 함수를 호출하면 콜백 함수는 디바이스(버스의 자식 디바이스)를 작동(D0) 상태로 복원합니다.

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

  1. 프레임워크는 드라이버의 EvtDevicePrepareHardware 콜백 함수(있는 경우)를 호출하여 PnP 관리자가 디바이스에 할당한 하드웨어 리소스 목록을 전달합니다.

  2. 프레임워크는 드라이버의 EvtDeviceD0Entry 콜백 함수(있는 경우)를 호출합니다.

  3. 프레임워크는 드라이버가 디바이스 인터럽트를 사용하도록 설정할 수 있도록 드라이버의 EvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabled 콜백 함수(있는 경우)를 호출합니다.

  4. 하드웨어 및 드라이버가 DMA를 지원하는 경우 프레임워크는 생성된 각 DMA 채널에 대해 드라이버의 EvtDmaEnablerFill, EvtDmaEnablerEnableEvtDmaEnablerSelfManagedIoStart 콜백 함수를 호출합니다.

  5. 프레임워크는 드라이버의 EvtChildListScanForChildren 콜백 함수(있는 경우)를 호출합니다.

  6. 프레임워크는 디바이스의 전원 관리형 I/O 큐를 모두 다시 시작합니다.

  7. 드라이버가 자체 관리형 I/O를 사용하는 경우 프레임워크는 드라이버의 EvtDeviceSelfManagedIoRestart 콜백 함수를 호출합니다.