функция обратного вызова PROTOCOL_UNINSTALL (ndis.h)
NDIS вызывает функцию ProtocolUninstall драйвера протокола для выполнения операций очистки перед удалением драйвера протокола.
Синтаксис
PROTOCOL_UNINSTALL ProtocolUninstall;
void ProtocolUninstall()
{...}
Возвращаемое значение
None
Remarks
Функция ProtocolUninstall является необязательной. Драйвер протокола зарегистрировал точку входа (при наличии) для этой функции в NDIS_PROTOCOL_DRIVER_CHARACTERISTICS структуры, переданной вФункция NdisRegisterProtocolDriver.
В ответ на запрос пользователя на удаление драйвера протокола NDIS вызывает функцию ProtocolUninstall драйвера протокола. NDIS вызывает ProtocolUninstall после вызова драйвера протокола Функция ProtocolUnbindAdapterEx один раз для каждого привязанного адаптера.
ProtocolUninstall выполняет операции очистки, определяемые драйвером. Например, ProtocolUninstall может запросить у клиентов закрытие открытых дескрипторов для объектов устройств, экспортированных драйвером протокола. Пока все такие дескрипторы не будут закрыты, диспетчер операций ввода-вывода не будет вызывать подпрограмму Выгрузки , зарегистрированную драйвером протокола в объекте драйвера, переданной его подпрограмме DriverEntry . После закрытия всех дескрипторов ProtocolUninstall может вызвать NdisDeregisterDeviceEx , чтобы удалить все объекты устройства, созданные драйвером протокола.
Для нижнего края протокола промежуточного драйвера может потребоваться функция ProtocolUninstall . Промежуточный драйвер может освободить свои пограничные ресурсы протокола в ProtocolUninstall , прежде чем NDIS вызовет свою функцию MiniportDriverUnload .
NDIS вызывает ProtocolUninstall по адресу IRQL = PASSIVE_LEVEL.
Примеры
Чтобы определить функцию ProtocolUninstall , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции. Windows предоставляет набор типов функций для драйверов. Объявление функции с помощью типов функций помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.Например, чтобы определить функцию ProtocolUninstall с именем MyUninstall, используйте тип PROTOCOL_UNINSTALL , как показано в следующем примере кода:
PROTOCOL_UNINSTALL MyUninstall;
Затем реализуйте функцию следующим образом:
_Use_decl_annotations_
VOID
MyUninstall(void)
{...}
Тип функции PROTOCOL_UNINSTALL определен в файле заголовка Ndis.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, которые применяются к типу функции PROTOCOL_UNINSTALL в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов NDIS.
Сведения о Use_decl_annotations см. в статье Поведение функции с заметками.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается в NDIS 6.0 и более поздних версиях. |
Целевая платформа | Windows |
Header | ndis.h (включая Ndis.h) |
IRQL | PASSIVE_LEVEL |