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


Обработка неожиданного удаления сетевого адаптера

Неожиданное удаление происходит, когда пользователь удаляет сетевой интерфейс карта (NIC) из работающей системы без предварительного уведомления системы через пользовательский интерфейс.

Драйверы miniport для Windows Vista и более поздних версий операционной системы должны быть в состоянии справиться с неожиданным удалением. В частности, драйверы минипорта NDIS с нижним краем модели драйвера Windows (WDM) должны иметь возможность обрабатывать такие события. Если драйвер минипорта NDIS-WDM не обрабатывает неожиданное удаление, все ожидающие IRP, которые водитель минипорта отправил базовому водителю автобуса до неожиданного удаления, не могут быть завершены.

Для Windows Vista и более поздних версий драйвер минипорта (например, драйвер минипорта с нижним краем WDM), который не управляет оборудованием напрямую, должен устанавливать флаг атрибута NDIS_MINIPORT_ATTRIBUTES_SURPRISE_REMOVE_OK при вызове атрибута NdisMSetMiniportAttributes. Установка этого флага предотвращает отображение предупреждения при неожиданном удалении сетевого адаптера пользователем. Драйвер мини-порта, который не может справиться с неожиданным удалением, не должен устанавливать этот флаг.

Драйвер мини-порта, поддерживающий неожиданное удаление, должен сам пытаться обнаружить неожиданное удаление во время обычных операций вне контекста MiniportDevicePnPEventNotify. После удаления сетевой карты попытка считывать порты ввода-вывода сетевого адаптера обычно приводит к возврату значений, для которых все биты имеют один. Если драйвер мини-порта считывает такое значение, он должен проверка наличие оборудования с более убедительным тестом. Например, драйвер мини-порта может записать значение в порт ввода-вывода, а затем попытаться считывать значение из этого порта. Драйвер мини-порта также может проверка допустимых значений в регистрах ввода-вывода сетевого адаптера. Обнаружение неожиданного удаления таким образом предотвращает зависание драйвера мини-порта в бесконечном цикле при попытке считывать регистры удаленной сетевой карты в прерывании DPC. Драйвер мини-порта, который перестает отвечать таким образом, не позволяет NDIS вызывать функцию MiniportDevicePnPEventNotify драйвера.