다음을 통해 공유


I/O 큐에 대한 전원 관리

프레임워크가 드라이버의 디바이스 중 하나로 전송되는 I/O 요청을 받으면 프레임워크는 I/O 큐에 요청을 배치합니다. 드라이버는 요청 처리기를 제공하거나 큐를 폴링하여 I/O 큐에서 I/O 요청을 가져올 수 있습니다. I/O 큐에 대한 자세한 내용은 프레임워크 큐 개체를 참조 하세요.

드라이버를 디자인할 때는 드라이버가 받을 I/O 요청을 다음 두 가지 범주로 그룹화해야 합니다.

  1. 다음을 포함하여 디바이스가 작동 중(D0) 상태여야 하는 요청:

    • 디바이스의 함수 드라이버가 디바이스에서 데이터를 읽거나 디바이스에 데이터를 쓰도록 요구하는 요청을 읽거나 씁니다.
    • 디바이스 제어는 함수 또는 버스 드라이버가 디바이스에 액세스하지 않고 서비스할 수 없으면 요청합니다.
  2. 다음을 포함하여 디바이스가 작동 중(D0) 상태일 필요가 없는 요청:

    • 디바이스 제어는 함수 또는 버스 드라이버가 디바이스에 액세스하지 않고 서비스할 수 있도록 요청합니다.
    • 필터 드라이버가 받는 모든 요청일 수 있습니다.
    • 스택이 하드웨어와 통신하지 않는 소프트웨어 전용 디바이스를 지원하는 경우 드라이버 스택의 모든 드라이버가 수신하는 모든 요청입니다.

필터 드라이버 또는 하드웨어와 통신하지 않는 스택에 대한 드라이버를 작성하지 않는 한, 드라이버가 작동하지 않는 일부 드라이버와 함께 디바이스가 작동 상태에 있어야 하는 일부 요청을 수신할 가능성이 높습니다.

이러한 두 가지 유형의 요청을 지원하기 위해 프레임워크는 전원 관리 큐와 그렇지 않은 두 가지 유형의 I/O 큐를 제공합니다. 드라이버는 각 I/O 큐를 만들 때 큐의 WDF_IO_QUEUE_CONFIG 구조에 있는 PowerManaged 멤버를 WdfTrue 또는 WdfFalse로 설정하여 다음 중 하나를 나타냅니다.

  • 드라이버가 PowerManaged를 WdfTrue설정하는 경우 큐는 전원 관리됩니다.

    전원 관리 큐에서 I/O 요청을 사용할 수 있는 경우 프레임워크는 디바이스가 작동 중(D0) 상태인 경우에만 드라이버에 요청을 전달합니다. 따라서 드라이버가 전원 관리 큐에서 요청을 받을 때마다 프레임워크는 디바이스를 사용할 수 있도록 보장합니다. 디바이스가 작동 상태가 아닌 경우 프레임워크는 디바이스를 사용할 수 있게 될 때까지 큐에 요청을 저장합니다.

    디바이스가 유휴 상태이고 프레임워크가 드라이버의 전원 관리 큐 중 하나에 I/O 요청을 배치하는 경우 프레임워크는 드라이버 스택에 디바이스를 작동 상태로 복원한 후 드라이버에 요청을 전달하도록 요청합니다.

    시스템이 S0(작동 중) 상태가 아니므로 디바이스가 저전력 상태이고 프레임워크가 드라이버의 전원 관리 큐 중 하나에 I/O 요청을 배치하는 경우 프레임워크는 디바이스가 작동(D0) 상태로 돌아간 후 드라이버에 요청을 전달할 때까지 기다립니다.

    디바이스가 작동 상태가 아닌 경우 프레임워크가 전원 관리 큐에서 드라이버로 I/O 요청을 제공하지 않으므로 드라이버 스택의 전원 정책 소유자 위에 있는 드라이버는 전원 관리형 I/O 큐를 사용하지 않아야 합니다. 전원 정책 소유자 위에 있는 드라이버가 전원 관리 큐를 사용하고 디바이스가 저전력 상태인 경우 드라이버는 요청을 받지 않고 전원 정책 소유자에게 전달할 수 없습니다. 따라서 디바이스의 전원 상태를 제어하는 전원 정책 소유자는 디바이스를 절전 모드 해제하지 않습니다.

  • 드라이버가 PowerManaged를 WdfFalse설정하는 경우 큐는 전원 관리되지 않습니다.

    전원 관리되지 않는 큐에서 I/O 요청을 사용할 수 있는 경우 프레임워크는 디바이스가 작동 중(D0) 상태인지 여부에 관계없이 드라이버에 요청을 전달합니다. 디바이스에 액세스할 필요가 없는 요청만 수신하도록 큐를 설정한 경우 디바이스를 사용할 수 없는 경우에도 드라이버가 각 요청을 처리할 수 있습니다.

전원 관리 I/O 큐에 대한 자세한 내용은 Power-Managed I/O 큐 사용을 참조 하세요.

일부 드라이버는 PnP(플러그 앤 플레이) 및 전원 관리 작업을 직접 제어해야 합니다. 이러한 드라이버는 자체 관리형 I/O를 사용할 수 있습니다. 자세한 내용은 자체 관리형 I/O 사용을 참조 하세요.