Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйвер минипорта NDIS должен предоставить функцию MiniportHaltEx для NdisMRegisterMiniportDriver.
MiniportHaltEx должен отменить все, что MiniportInitializeEx сделал. Например, драйвер минипорта NDIS может:
Бесплатные порты. (Дополнительные сведения см. в разделе освобождение порта NDIS.)
Выпустите все аппаратные ресурсы, которые утверждения MiniportInitializeEx.
Освободите ресурсы прерывания путем вызова NdisMDeregisterInterruptEx.
Освободите любую память, выделенную MiniportInitializeEx.
Остановите сетевой адаптер, если функция MiniportShutdownEx не восстановила сетевой адаптер до начального состояния.
На следующей схеме показана выгрузка минипорт-драйвера.
MiniportHaltEx должен завершить операции, необходимые для выгрузки драйвера, перед тем как вернуться. Если драйвер минипорта имеет какие-либо незавершенные индикации получения (то есть полученные сетевые данные, которые он указал в NDIS, но которые NDIS еще не вернул), MiniportHaltEx не должен возвращаться до тех пор, пока эти данные не будут возвращены минипорт-водителю через функцию MiniportReturnNetBufferLists.
На предыдущем рисунке показан набор вызовов, которые может выполнять функция MiniportHaltEx. Эти вызовы представляют собой только подмножество вызовов, которые могут быть сделаны. Фактический набор вызовов зависит от предыдущих действий драйвера минипорта. Драйвер минипорта может выполнять эти же вызовы в MiniportInitializeEx если он не может успешно инициализировать сетевой адаптер из-за проблем с оборудованием или из-за того, что он не может получить необходимый ресурс. В таком случае MiniportInitializeEx должен выгрузить драйвер, отменив предыдущие действия. В противном случае MiniportHaltEx отменит действия MiniportInitializeEx.
В следующем списке описываются вызовы, необходимые для отмены определенных действий, которые может предпринять драйвер минипорта:
Если драйвер минипорта зарегистрировал прерывание, он должен вызвать NdisMDeregisterInterruptEx.
Если драйвер минипорта настраивает таймер или таймеры, следует вызвать NdisCancelTimerObject для каждого созданного таймера. Если вызов NdisCancelTimerObject не удаётся, таймер, возможно, уже сработал. В этом случае драйвер минипорта должен ждать завершения обработчика таймера, прежде чем вернуться из MiniportHaltEx.
Если драйвер минипорта выделил любую память с NdisAllocateMemoryWithTagPriority, он должен вызывать NdisFreeMemory, чтобы освободить память.
Если драйвер минипорта выделил любую память с помощью NdisMAllocateSharedMemoryили NdisMAllocateSharedMemoryAsyncEx, следует вызвать NdisMFreeSharedMemory, чтобы освободить эту память.
Если мини-драйвер выделил и инициализировал хранилище для пула дескрипторов пакетов с NdisAllocateNetBufferPool, он должен вызывать NdisFreeNetBufferPool, чтобы освободить это хранилище.
Если минипорт-драйвер выделил или зарезервировал какие-либо аппаратные ресурсы, их следует вернуть. Например, если драйвер минипорта сопоставлял диапазон портов ввода-вывода в сетевом адаптере, он должен освободить порты, вызвав NdisMDeregisterIoPortRange.
Связанные разделы
Состояния адаптера минипорт-драйвера