функция обратного вызова SET_OPTIONS (ndis.h)
NDIS вызывает функцию XxxSetOptions драйвера, чтобы разрешить драйверу регистрировать дополнительные службы. Эта функция определяется как MiniportSetOptions для драйверов мини-портов, ProtocolSetOptions для драйверов протоколов или FilterSetOptions для драйверов фильтров.
Синтаксис
SET_OPTIONS SetOptions;
NDIS_STATUS SetOptions(
[in] NDIS_HANDLE NdisDriverHandle,
[in] NDIS_HANDLE DriverContext
)
{...}
Параметры
[in] NdisDriverHandle
Дескриптор, идентифицирующий драйвер. NDIS возвращает этот дескриптор драйверу, когда он возвращается из функции регистрации драйвера ( NdisMRegisterMiniportDriver для драйверов минипорта, NdisRegisterProtocolDriver для драйверов протокола и NdisFRegisterFilterDriver для драйверов фильтров).
[in] DriverContext
Дескриптор, переданный драйвером в NdisRegisterXxxDriver , идентифицирующий область контекста драйвера, где Xxx — это тип драйвера (минипорт, протокол или фильтр).
Возвращаемое значение
XxxSetOptions возвращает одно из следующих значений состояния:
Код возврата | Описание |
---|---|
|
XxxSetOptions успешно зарегистрировал дополнительные службы и ресурсы драйвера. |
|
XxxSetOptions не удалось выделить ресурсы, необходимые драйверу. |
|
Попытка драйвера зарегистрировать параметры завершилась сбоем. Обычно такое состояние ошибки распространяется из функции NdisXxx или подпрограммы поддержки режима ядра. |
Комментарии
XxxSetOptions — это необязательная функция. NDIS вызывает XxxSetOptions в контексте вызова драйвера кФункция NdisRegisterXxxDriver, где Xxx — это тип драйвера (минипорт, протокол или фильтр).
XxxSetOptions регистрирует дополнительные службы и может выделять другие ресурсы драйвера. Чтобы зарегистрировать необязательные функции MiniportXxx, ProtocolXx или FilterXxx , драйвер вызывает функцию NdisSetOptionalHandlers . Драйвер передает дескриптор из параметра NdisDriverHandle в параметре NdisHandleNdisSetOptionalHandlers и передает структуру характеристик в параметр OptionalHandlers .
Драйверы miniport могут применяться к дополнительным службам, определенным в следующих структурах характеристик:
- NDIS_MINIPORT_CO_CHARACTERISTICS
- NDIS_MINIPORT_PNP_CHARACTERISTICS
- NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS
- NDIS_PROVIDER_CHIMNEY_OFFLOAD_GENERIC_CHARACTERISTICS (см. документацию по разгрузке дымохода TCP NDIS 6.0)
- NDIS_PROVIDER_CHIMNEY_OFFLOAD_TCP_CHARACTERISTICS(см. документацию по разгрузке дымохода TCP NDIS 6.0)
Драйверы протокола могут применяться к необязательным службам, определенным в следующих структурах характеристик:
- NDIS_PROTOCOL_CO_CHARACTERISTICS
- NDIS_CO_CLIENT_OPTIONAL_HANDLERS
- NDIS_CO_CALL_MANAGER_OPTIONAL_HANDLERS
В текущей версии Windows нет дополнительных служб драйверов фильтров.
NDIS может вызывать другие функции драйвера MiniportXxx, ProtocolXxx или FilterXxx в любое время после возврата XxxSetOptions . Драйвер должен быть готов к обратному вызову при его функции инициализации:(MiniportInitializeEx для драйверов miniport, ProtocolBindAdapterEx для драйверов протоколов и FilterAttach для драйверов фильтров).
Для драйверов минипорта адаптеры минипорта находятся в состоянии Остановлено до вызова NDIS MiniportInitializeEx. Для драйверов протокола привязки протокола находятся в состоянии Unbound перед вызовом NDIS ProtocolBindAdapterEx. Для драйверов фильтров модули фильтров находятся в состоянии "Отсоединенный" , прежде чем NDIS вызовет FilterAttach.
Если попытка выделить ресурсы или службы завершается сбоем, XxxSetOptions должен отменить все выделения, которые были успешно выполнены, прежде чем вернуть управление с состоянием, отличающимся от NDIS_STATUS_SUCCESS.
XxxDriverUnload мини-порта и фильтров должны отменить все операции, выполненные в XxxSetOptions.
NDIS вызывает XxxSetOptions в IRQL = PASSIVE_LEVEL.
Примеры
Чтобы определить функцию XxxSetOptions , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции. Windows предоставляет набор типов функций для драйверов. Объявление функции с помощью типов функций помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.В файле заголовка Ndis.h функция обратного вызова SET_OPTIONS определяется следующим образом:
typedef SET_OPTIONS (*SET_OPTIONS_HANDLER);
typedef SET_OPTIONS (MINIPORT_SET_OPTIONS);
typedef SET_OPTIONS (PROTOCOL_SET_OPTIONS);
typedef SET_OPTIONS (FILTER_SET_OPTIONS);
Это позволяет всем драйверам NDIS реализовать функции обратного вызова XxxSetOptions с одинаковым синтаксисом. Драйверы минипорта используют тип MINIPORT_SET_OPTIONS , драйверы протокола — тип PROTOCOL_SET_OPTIONS , а драйверы фильтров — тип FILTER_SET_OPTIONS .
Например, чтобы определить функцию MiniportSetOptions с именем MySetOptions, используйте тип MINIPORT_SET_OPTIONS , как показано в этом примере кода:
MINIPORT_SET_OPTIONS MySetOptions;
Затем реализуйте функцию следующим образом:
_Use_decl_annotations_
NDIS_STATUS
MySetOptions(
NDIS_HANDLE NdisDriverHandle,
NDIS_HANDLE DriverContext
)
{...}
Тип функции SET_OPTIONS определен в файле заголовка Ndis.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, которые применяются к типу функции SET_OPTIONS в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в разделе Объявление функций с помощью типов ролей функций для драйверов NDIS.
Сведения о Use_decl_annotations см. в статье О поведении функции.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается в NDIS 6.0 и более поздних версиях. |
Целевая платформа | Windows |
Header | ndis.h (включая Ndis.h) |
IRQL | PASSIVE_LEVEL |