Обработка неожиданного удаления сетевого адаптера
Неожиданное удаление происходит, когда пользователь удаляет сетевой интерфейс карта (NIC) из работающей системы без предварительного уведомления системы через пользовательский интерфейс.
Драйверы miniport для Windows Vista и более поздних версий операционной системы должны быть в состоянии справиться с неожиданным удалением. В частности, драйверы минипорта NDIS с нижним краем модели драйвера Windows (WDM) должны иметь возможность обрабатывать такие события. Если драйвер минипорта NDIS-WDM не обрабатывает неожиданное удаление, все ожидающие IRP, которые водитель минипорта отправил базовому водителю автобуса до неожиданного удаления, не могут быть завершены.
Для Windows Vista и более поздних версий драйвер минипорта (например, драйвер минипорта с нижним краем WDM), который не управляет оборудованием напрямую, должен устанавливать флаг атрибута NDIS_MINIPORT_ATTRIBUTES_SURPRISE_REMOVE_OK при вызове атрибута NdisMSetMiniportAttributes. Установка этого флага предотвращает отображение предупреждения при неожиданном удалении сетевого адаптера пользователем. Драйвер мини-порта, который не может справиться с неожиданным удалением, не должен устанавливать этот флаг.
Драйвер мини-порта, поддерживающий неожиданное удаление, должен сам пытаться обнаружить неожиданное удаление во время обычных операций вне контекста MiniportDevicePnPEventNotify. После удаления сетевой карты попытка считывать порты ввода-вывода сетевого адаптера обычно приводит к возврату значений, для которых все биты имеют один. Если драйвер мини-порта считывает такое значение, он должен проверка наличие оборудования с более убедительным тестом. Например, драйвер мини-порта может записать значение в порт ввода-вывода, а затем попытаться считывать значение из этого порта. Драйвер мини-порта также может проверка допустимых значений в регистрах ввода-вывода сетевого адаптера. Обнаружение неожиданного удаления таким образом предотвращает зависание драйвера мини-порта в бесконечном цикле при попытке считывать регистры удаленной сетевой карты в прерывании DPC. Драйвер мини-порта, который перестает отвечать таким образом, не позволяет NDIS вызывать функцию MiniportDevicePnPEventNotify драйвера.