USB 유휴 요청 IRP 완료 루틴 구현

MiniportIdleNotification이 호출되면 USB 미니포트 드라이버는 IoCallDriver를 호출하여 기본 USB 버스 드라이버에 USB 유휴 요청(IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION)에 대한 IRP(I/O 요청 패킷)를 발급합니다. 미니포트 드라이버는 이 IRP를 발급하여 USB 버스 드라이버에 네트워크 어댑터가 유휴 상태이며 일시 중단되어야 하다는 사실을 알릴 수 있습니다.

USB 미니포트 드라이버는 USB 유휴 요청 IRP에 대한 완료 루틴을 등록하려면 IoSetCompletionRoutineEx 도 호출해야 합니다. USB 버스 드라이버는 USB 미니포트 드라이버에 의해 취소된 후 IRP를 완료할 때 완료 루틴을 호출합니다. USB 미니포트 드라이버는 NDIS가 MiniportCancelIdleNotification을 호출하여 유휴 알림을 취소할 때 IRP를 취소합니다.

완료 루틴은 네트워크 어댑터의 전체 전원 상태 전환을 계속할 수 있음을 NDIS에 알리기 위해 NdisMIdleNotificationComplete 만 호출해야 합니다.

참고 USB 미니포트 드라이버가 NDIS의 다른 유휴 알림 중에 IRP 리소스를 다시 사용하는 경우 완료 루틴은 STATUS_MORE_PROCESSING_REQUIRED 반환해야 합니다.

다음은 USB 유휴 요청 IRP에 대한 완료 루틴의 예입니다.

//
// MiniportUsbIdleRequestCompletion()
//
// This is the IO_COMPLETION_ROUTINE for the selective suspend IOCTL.
// All that is needed is to inform NDIS that the IdleNotification
// operation is complete.
//
VOID MiniportUsbIdleRequestCompletion(PVOID AdapterContext)
{
    NdisMIdleNotificationComplete(Adapter->MiniportAdapterHandle);

    // We will be reusing the IRP later, so do not let the IO manager delete it.
    return STATUS_MORE_PROCESSING_REQUIRED;
}

USB 유휴 요청 콜백 루틴에 대한 자세한 내용은 USB 유휴 요청 IRP 완료 루틴을 참조하세요.