實作 USB 閒置要求 IRP 完成常式
呼叫 MiniportIdleNotification 時,USB 迷你埠驅動程式會呼叫 IoCallDriver 發出 I/O 要求封包 (IRP) ,以取得 USB 閒置要求 (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) 至基礎 USB 匯流排驅動程式。 迷你埠驅動程式會發出此 IRP,通知 USB 匯流排驅動程式網路介面卡閒置且必須暫停。
USB 迷你埠驅動程式也必須呼叫 IoSetCompletionRoutineEx ,才能註冊 USB 閒置要求 IRP 的完成常式。 USB 匯流排驅動程式會在 USB 迷你埠驅動程式取消 IRP 之後呼叫完成常式。 當 NDIS 呼叫 MiniportCancelIdleNotification來取消閒置通知時,USB 迷你埠驅動程式會取消 IRP。
完成常式只需要呼叫 NdisMIdleNotificationComplete ,才能通知 NDIS 它可以繼續進行網路介面卡的完整電源狀態轉換。
注意 如果 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 完成常式。