функция обратного вызова PROTOCOL_CLOSE_ADAPTER_COMPLETE_EX (ndis.h)
NDIS вызывает функцию ProtocolCloseAdapterCompleteEx драйвера протокола, чтобы завершить операцию закрытия адаптера, для которой функция NdisCloseAdapterEx возвращала NDIS_STATUS_PENDING.
Синтаксис
PROTOCOL_CLOSE_ADAPTER_COMPLETE_EX ProtocolCloseAdapterCompleteEx;
void ProtocolCloseAdapterCompleteEx(
[in] NDIS_HANDLE ProtocolBindingContext
)
{...}
Параметры
[in] ProtocolBindingContext
Дескриптор области контекста, выделенной драйвером протокола. Драйвер протокола хранит сведения о контексте для каждой привязки в этой области контекста. Драйвер предоставил этот дескриптор NDIS, когда драйвер вызывал функцию NdisOpenAdapterEx .
Возвращаемое значение
None
Remarks
ProtocolCloseAdapterCompleteEx является обязательной функцией.
Если ProtocolUnbindAdapterEx ожидает вызова NDIS ProtocolCloseAdapterCompleteEx, эта функция может просто указать, что она была вызвана и возвращена (например, обновляет область контекста ProtocolBindingContext ). Это позволяет функции ProtocolCloseAdapterCompleteEx завершить операцию отмены привязки.
После того как драйвер протокола вызывает функцию NdisCloseAdapterEx , дескриптор NdisBindingHandle , возвращаемый функцией NdisOpenAdapterEx , больше недействителен. Поэтому ProtocolCloseAdapterCompleteEx не может вызывать функции NdisXxx , требующие этого дескриптора в качестве параметра.
Если Функция ProtocolUnbindAdapterEx еще не сделала этого. ProtocolCloseAdapterCompleteEx может освободить ресурсы, выделенные драйвером протокола для операций сетевого ввода-вывода для каждой привязки.
Если ProtocolUnbindAdapterEx вернул NDIS_STATUS_PENDING и сохранил дескриптор UnbindContext в области контекста в ProtocolBindingContext, ProtocolCloseAdapterCompleteEx может вызватьФункция NdisCompleteUnbindAdapterEx для завершения операции отмены привязки. Следовательно, ProtocolCloseAdapterCompleteEx не должен освобождать область контекста до тех пор, пока она не вызовет NdisCompleteUnbindAdapterEx.
NDIS вызывает ProtocolCloseAdapterCompleteEx по адресу IRQL = PASSIVE_LEVEL.
Примеры
Чтобы определить функцию ProtocolCloseAdapterCompleteEx , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции. Windows предоставляет набор типов функций для драйверов. Объявление функции с помощью типов функций помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.Например, чтобы определить функцию ProtocolCloseAdapterCompleteEx с именем MyCloseAdapterCompleteEx, используйте тип PROTOCOL_CLOSE_ADAPTER_COMPLETE_EX , как показано в следующем примере кода:
PROTOCOL_CLOSE_ADAPTER_COMPLETE_EX MyCloseAdapterCompleteEx;
Затем реализуйте функцию следующим образом:
_Use_decl_annotations_
VOID
MyCloseAdapterCompleteEx(
NDIS_HANDLE ProtocolBindingContext
)
{...}
Тип функции PROTOCOL_CLOSE_ADAPTER_COMPLETE_EX определен в файле заголовка Ndis.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, которые применяются к типу функции PROTOCOL_CLOSE_ADAPTER_COMPLETE_EX в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов NDIS.
Сведения о Use_decl_annotations см. в статье Поведение функции с заметками.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается в NDIS 6.0 и более поздних версиях. |
Целевая платформа | Windows |
Header | ndis.h (включая Ndis.h) |
IRQL | PASSIVE_LEVEL |