USB 유휴 요청 IRP 완료 루틴 구현
MiniportIdleNotification 호출되면 USB 미니포트 드라이버는 IoCallDriver 호출하여 USB 유휴 요청(IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION)에 대한 IRP(I/O 요청 패킷)를 기본 USB 버스 드라이버에 발급합니다. 미니포트 드라이버는 이 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 완료 루틴을 참조하세요.