Поделиться через


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

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

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

  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 приведён ниже. В этом примере показаны шаги, связанные с отменой IRP запроса на бездействие 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".