Обработчик остановки драйвера miniport

Драйвер мини-порта NDIS должен предоставить функцию MiniportHaltExв NdisMRegisterMiniportDriver.

MiniportHaltEx должен отменить все, что сделал MiniportInitializeEx . Например, драйвер мини-порта NDIS может:

На следующей схеме показана выгрузка драйвера мини-порта.

Схема, иллюстрирующая процесс выгрузки драйвера минипорта.

MiniportHaltEx должен завершить операции, необходимые для выгрузки драйвера перед возвратом. Если драйвер мини-порта имеет какие-либо незавершенные признаки получения (то есть полученные сетевые данные, которые он указал до NDIS, но которые NDIS еще не вернул), MiniportHaltEx не должен возвращать, пока такие данные не будут возвращены в функцию MiniportReturnNetBufferLists драйвера мини-порта.

На предыдущем рисунке показан набор вызовов, которые могут выполняться функцией MiniportHaltEx . Эти вызовы являются лишь подмножеством вызовов, которые можно выполнить. Фактический набор вызовов зависит от предыдущих действий драйвера мини-порта. Драйвер мини-порта может выполнять те же вызовы в MiniportInitializeEx , если ему не удается успешно инициализировать сетевой адаптер из-за проблем с оборудованием или из-за того, что ему не удается получить необходимый ресурс. В этом случае MiniportInitializeEx должен выгрузить драйвер, отменив его предыдущие действия. В противном случае MiniportHaltEx отменит действия MiniportInitializeEx.

В следующем списке описаны вызовы, необходимые для отмены определенных действий, которые может предпринять драйвер мини-порта:

  • Если драйвер мини-порта зарегистрировал прерывание, он должен вызвать NdisMDeregisterInterruptEx.

  • Если драйвер мини-порта настроит таймер или таймеры, он должен вызывать NdisCancelTimerObject для каждого созданного таймера. Если вызов NdisCancelTimerObject завершается сбоем, возможно, таймер уже сработал. В этом случае драйвер мини-порта должен дождаться завершения обработчика таймера перед возвратом из MiniportHaltEx.

  • Если драйвер мини-порта выделил любую память с помощью NdisAllocateMemoryWithTagPriority, он должен вызвать NdisFreeMemory , чтобы освободить ее.

  • Если драйвер мини-порта выделил любую память с помощью NdisMAllocateSharedMemory или NdisMAllocateSharedMemoryAsyncEx, он должен вызвать NdisMFreeSharedMemory , чтобы освободить ее.

  • Если драйвер мини-порта выделил и инициализировал хранилище для пула дескрипторов пакетов с NdisAllocateNetBufferPool, он должен вызвать NdisFreeNetBufferPool , чтобы освободить это хранилище.

  • Если драйвер мини-порта выделил или зарезервировал какие-либо аппаратные ресурсы, они должны быть возвращены. Например, если драйвер мини-порта сопоставил диапазон портов ввода-вывода с сетевой картой, он должен освободить порты, вызвав NdisMDeregisterIoPortRange.

Состояния адаптера драйвера miniport

Освобождение порта NDIS

Остановка адаптера miniport

Состояния и операции адаптера miniport

Функции сброса и остановки драйвера miniport