實作 USB 閒置要求 IRP 回呼常式
呼叫 MiniportIdleNotification 時,USB 迷你埠驅動程式會呼叫 IoCallDriver ,針對 USB 閒置要求發出 I/O 要求封包 (IRP) , ( IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION) 到基礎 USB 匯流排驅動程式。 迷你埠驅動程式會發出此 IRP,通知 USB 匯流排驅動程式網路介面卡閒置且必須暫停。
USB 迷你埠驅動程式必須為 USB 閒置要求 IRP 提供 IRP 回呼常式。 當 USB 匯流排驅動程式判斷網路介面卡可以暫停並轉換為低電源狀態時,會呼叫此常式。
注意 在 USB 匯流排驅動程式處理 USB 閒置要求 IRP 之後,它會在 呼叫 IoCallDriver 的內容中以同步方式呼叫回呼常式,或在 MiniportIdleNotification 傳回之後以非同步方式呼叫回呼常式。
回呼常式只需要呼叫 NdisMIdleNotificationConfirm ,才能通知 NDIS 它可以繼續進行網路介面卡的低電源狀態轉換。 當驅動程式呼叫 NdisMIdleNotificationConfirm時,也必須指定網路介面卡可以轉換到的最低裝置電源狀態。
在 呼叫 NdisMIdleNotificationConfirm的內容中,NDIS 會執行將網路介面卡轉換為低電源狀態所需的步驟。 如需詳細資訊,請參閱 處理 NDIS 選擇性暫停閒置通知。
以下是 USB 閒置要求 IRP 的回呼常式範例。
//
// MiniportUsbIdleRequestCallback()
//
// This is the USB selective suspend idle notification. All that is
// needed is to inform NDIS that the USB stack is ready to go to a
// low-power state. Be aware that USB devices will always be requested
// to transition to a power state of NdisDeviceStateD2.
//
VOID MiniportUsbIdleRequestCallback(PVOID AdapterContext)
{
NdisMIdleNotificationConfirm(
AdapterContext->MiniportAdapterHandle,
NdisDeviceStateD2
);
return;
}
如需 USB 閒置要求回呼常式的詳細資訊,請參閱 USB 閒置要求 IRP 回呼常式。