Power-Managed I/O 큐 사용

드라이버가 I/O 큐를 만들 때 큐가 전원 관리되는지 여부를 지정할 수 있습니다. 전원 관리형 큐에서 I/O 요청을 사용할 수 있는 경우 프레임워크는 디바이스가 작동 중(D0) 상태인 경우에만 드라이버에 요청을 전달합니다. 프레임워크는 프레임워크가 전원 관리 큐에서 드라이버로 전달한 모든 I/O 요청이 완료, 취소 또는 연기될 때까지 디바이스가 작동 상태를 벗어나도록 허용하지 않습니다.

전원 관리형 I/O 큐에 대한 자세한 내용은 I/O 큐에 대한 전원 관리를 참조하세요.

Power-Managed 큐에 대한 콜백 함수

드라이버가 전원 관리형 I/O 큐를 사용하는 경우 두 가지 추가 콜백 함수를 제공할 수 있습니다.

EvtIoStop
EvtIoStop 콜백 함수는 지정된 I/O 요청 처리를 중지합니다. 디바이스가 작동 중(D0) 상태를 벗어나거나 제거되면 프레임워크는 드라이버가 소유하는 요청과 I/O 대상으로 전달한 요청을 포함하여 드라이버가 완료되지 않은 모든 I/O 요청에 대해 I/O 큐의 EvtIoStop 콜백 함수를 한 번 호출합니다.

EvtIoResume
EvtIoResume 콜백 함수는 이전에 중지된 I/O 요청 처리를 다시 시작합니다. 프레임워크는 디바이스가 작동 상태로 돌아온 후 큐에서 드라이버에 I/O 요청 배달을 다시 시작할 때 I/O 큐의 EvtIoResume 콜백 함수를 호출합니다.

프레임워크가 드라이버의 EvtIoStop 콜백 함수를 호출할 때마다 함수는 일반적으로 I/O 요청을 완료 하거나 취소 하거나 WdfRequestStopAcknowledge 를 호출하여 요청의 소유권을 프레임워크에 반환합니다.

이렇게 하는 것은 선택 사항이지만 일반적으로 전원 관리 큐에 대한 EvtIoStop 콜백 함수를 제공해야 합니다. EvtIoStop을 제공하면 드라이버가 디바이스 및 시스템이 저전력 상태로 진입하기 전에 경과하는 시간을 단축하는 데 도움이 될 수 있습니다.

전원 관리 큐 에 EvtIoStop 을 제공하지 않으면 디바이스(또는 시스템)를 더 낮은 전원 상태로 이동하거나 디바이스를 제거하기 전에 전원 관리 큐에서 드라이버로 전달되는 모든 요청이 완료될 때까지 프레임워크가 대기합니다. 잠재적으로 이 동작은 시스템이 최대 절전 모드 상태 또는 다른 낮은 시스템 전원 상태로 진입하는 것을 방지할 수 있습니다. 극단적인 경우 시스템이 버그 검사 코드 9F와 충돌할 수 있습니다.

드라이버가 I/O 대상에 요청을 전달하지 않고 확정되지 않은 시간 동안 요청을 보유하지 않는 경우 전원 관리 큐 에 대해 EvtIoStop 을 안전하게 생략할 수 있습니다.

디스패처 개체 대기 중

일반적으로 드라이버는 비비타 스레드 컨텍스트 내에서 디스패처 개체를 동기화 메커니즘으로만 사용해야 합니다.

요청 처리기는 임의 스레드 컨텍스트에서 실행되므로 전원 관리 큐에 대한 요청 처리기는 커널 디스패처 개체가 설정될 때까지 기다리지 않아야 합니다. 이렇게 하면 교착 상태가 발생할 수 있습니다.

드라이버가 디스패처 개체를 대기할 수 있는 시기 및 할 수 없는 경우 수행할 작업에 대한 자세한 내용은 커널 디스패처 개체 소개를 참조하세요.