Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Sterownik miniportu NDIS musi dostarczyć funkcję MiniportHaltEx do NdisMRegisterMiniportDriver.
Funkcja MiniportHaltEx powinna cofnąć wszystko, co zrobiło miniportInitializeEx . Na przykład sterownik miniportu NDIS może:
Bezpłatne porty. (Aby uzyskać więcej informacji, zobacz Zwalnianie portu NDIS).
Zwolnij wszystkie zasoby sprzętowe, które zarezerwował MiniportInitializeEx.
Zwolnij zasoby przerwań przez wywołanie NdisMDeregisterInterruptEx.
Zwolnij dowolną pamięć przydzieloną przez MiniportInitializeEx.
Zatrzymaj kartę sieciową, chyba że funkcja MiniportShutdownEx przywróciła już kartę sieciową do stanu początkowego.
Na poniższym diagramie zilustrowano proces rozładowywania sterownika miniportu.
Narzędzie MiniportHaltEx powinno wykonać operacje niezbędne do zwolnienia sterownika przed zwróceniem. Jeśli sterownik miniportu ma jakiekolwiek zaległe zgłoszenia odbioru (tj. odebrane dane sieciowe, które zostały wskazane do NDIS, ale które NDIS jeszcze nie zwrócił), MiniportHaltEx nie może zwrócić, dopóki takie dane nie zostaną zwrócone do funkcji MiniportReturnNetBufferLists.
Na powyższej ilustracji przedstawiono zestaw wywołań, które mogą być wykonywane przez funkcję MiniportHaltEx . Te wywołania są tylko podzbiorem wywołań, które można wykonać. Rzeczywisty zbiór wywołań zależy od poprzednich działań sterownika miniportu. Sterownik miniportu może wykonywać te same wywołania w miniportInitializeEx , jeśli nie może pomyślnie zainicjować karty sieciowej z powodu problemów sprzętowych lub ponieważ nie może uzyskać zasobu, którego potrzebuje. W takim przypadku funkcja MiniportInitializeEx powinna odładować sterownik, cofając swoje wcześniejsze działania. W przeciwnym razie funkcja MiniportHaltEx cofnie akcje funkcji MiniportInitializeEx.
Na poniższej liście opisano wywołania wymagane do odwrócenia niektórych akcji, które może wykonać sterownik miniportu:
Jeśli sterownik miniportu zarejestrował przerwanie, powinien wywołać polecenie NdisMDeregisterInterruptEx.
Jeśli sterownik miniportu skonfiguruje czasomierz lub czasomierze, powinien wywołać obiekt NdisCancelTimerObject dla każdego utworzonego czasomierza. Jeśli wywołanie NdisCancelTimerObject zakończy się niepowodzeniem, może to oznaczać, że timer został już wyzwolony. W takim przypadku sterownik miniportu powinien czekać na ukończenie obsługi czasomierza przed powrotem z miniportHaltEx.
Jeśli sterownik miniportu przydzielił jakąkolwiek pamięć za pomocą NdisAllocateMemoryWithTagPriority, powinien ją zwolnić, wywołując NdisFreeMemory.
Jeśli sterownik miniportu przydzielił dowolną pamięć za pomocą NdisMAllocateSharedMemory lub NdisMAllocateSharedMemoryAsyncEx, powinien wywołać NdisMFreeSharedMemory aby zwolnić tę pamięć.
Jeśli sterownik miniportu przydzielił i zainicjował pamięć dla puli deskryptorów pakietów z NdisAllocateNetBufferPool, powinien wywołać NdisFreeNetBufferPool, aby zwolnić tę pamięć.
Jeśli sterownik miniportu przydzielił lub zarezerwował jakiekolwiek zasoby sprzętowe, należy je zwrócić. Jeśli na przykład sterownik miniportu zamapował zakres portów we/wy na kartę sieciową, powinien zwolnić porty przez wywołanie NdisMDeregisterIoPortRange.
Tematy pokrewne
Stany adaptacyjne sterownika miniportu