Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby zwolnić moduł dostawcy, system operacyjny wywołuje funkcję Unload modułu dostawcy. Zobacz Inicjowanie i rejestrowanie modułu dostawcy , aby uzyskać więcej informacji na temat sposobu określania funkcji Unload modułu dostawcy podczas inicjowania.
Funkcja Unload modułu dostawcy gwarantuje, że moduł dostawcy zostanie wyrejestrowany z rejestratora modułów sieciowych (NMR), zanim moduł dostawcy zostanie zwolniony z pamięci systemowej. Moduł dostawcy inicjuje wyrejestrowanie z NMR, wywołując funkcję NmrDeregisterProvider, którą zwykle wywołuje z funkcji Unload. Moduł dostawcy nie może powrócić z funkcji Unload , dopóki nie zostanie całkowicie wyrejestrowany z nmR. Jeśli wywołanie metody NmrDeregisterProvider zwróci STATUS_PENDING, moduł dostawcy musi wywołać funkcję NmrWaitForProviderDeregisterComplete , aby poczekać na zakończenie wyrejestrowania, zanim powróci z funkcji Unload .
Na przykład:
// Variable containing the handle for the registration
HANDLE ProviderHandle;
// Unload function
VOID
Unload(
IN PDRIVER_OBJECT DriverObject
)
{
NTSTATUS Status;
// Deregister the provider module from the NMR
Status =
NmrDeregisterProvider(
ProviderHandle
);
// Check if pending
if (Status == STATUS_PENDING)
{
// Wait for the deregistration to be completed
NmrWaitForProviderDeregisterComplete(
ProviderHandle
);
}
// An error occurred
else
{
// Handle error
...
}
}
Jeśli moduł dostawcy jest zarejestrowany jako dostawca wielu interfejsów programowania sieciowego (NPI), musi wywołać nmrDeregisterProvider dla każdego obsługiwanego serwera NPI. Jeśli moduł sieciowy jest zarejestrowany zarówno jako moduł dostawcy, jak i moduł klienta (czyli jest to dostawca jednego serwera NPI i klienta innego serwera NPI), musi wywołać zarówno NmrDeregisterProvider , jak i NmrDeregisterClient.
Moduł sieciowy musi poczekać, aż wszystkie wyrejestrowania zostaną zakończone, zanim powróci z funkcji Unload.
Moduł dostawcy nie musi wywoływać NmrDeregisterProvider wewnątrz funkcji Unload. Na przykład w sytuacji, gdy moduł dostawcy jest podskładem złożonego sterownika, wyrejestrowanie modułu dostawcy może wystąpić, gdy podskład moduł dostawcy jest dezaktywowany. Jednak w takiej sytuacji sterownik musi nadal upewnić się, że moduł dostawcy został całkowicie wyrejestrowany z NMR przed powrotem z funkcji Unload .