Реализация функции обработчика MiniportCancelIdleNotification

NDIS вызывает функцию обработчика miniport Driver MiniportCancelIdleNotification , чтобы отменить процесс уведомления об простое и перенести сетевой адаптер в состояние полной мощности. При вызове этой функции драйвер минипорта должен выполнить следующие действия:

  1. Минипорт-драйвер должен отменить все шины irps, которые ранее были выданы для уведомления об простое.

  2. Драйвер минипорта вызывает NdisMIdleNotificationComplete. Этот вызов уведомляет NDIS о завершении простоя уведомления. Затем NDIS компилирует выборочную операцию приостановки, переключив сетевой адаптер в состояние полной мощности.

Например, когда вызывается MiniportCancelIdleNotification, драйвер usb-минипорта вызывает IoCancelIrp, чтобы отменить пакет запроса ввода-вывода (IRP) для запроса простоя USB (IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION). Ранее драйвер мини-порта USB выпустил этот IRP в функции обработчика MiniportIdleNotification. Как только драйвер USB-шины отменил IRP, он вызывает подпрограмму завершения IRP. Когда драйвер USB-шины вызывает подпрограмму завершения, он подтверждает отмену IRP и устройство может возобновить работу в состоянии полной мощности. В контексте подпрограммы завершения драйвер минипорта вызывает NdisMIdleNotificationComplete.

Примечание. Драйвер USB-шины может вызывать подпрограмму завершения либо синхронно в контексте вызова IoCancelIrp, либо асинхронно после возврата MiniportCancelIdleNotification.

Ниже приведен пример функции обработчика MiniportCancelIdleNotification для usb-минипорта. В этом примере показаны шаги, связанные с отменой запроса на простой USB.

//
// MiniportCancelIdleNotification()
//
// This routine is called if NDIS has to cancel an idle notification.
// All that is needed is to cancel the selective suspend IRP.
//
VOID MiniportCancelIdleNotification(
    _In_ NDIS_HANDLE MiniportAdapterContext
    )
{
    IoCancelIrp(Adapter->UsbSsIrp);
}

Рекомендации по реализации подпрограммы завершения для IRP-запроса на простой USB см. в разделе "Реализация процедуры завершения запроса простоя USB".