Поделиться через


функция обратного вызова NDIS_TIMER_FUNCTION (ndis.h)

Функция обратного вызова NdisTimerFunction вызывается NDIS после того, как драйвер устанавливает одноразовый или периодический таймер при срабатывании таймера.

Примечание Функцию необходимо объявить с помощью типа NDIS_TIMER_FUNCTION . Дополнительные сведения см. в следующем разделе Примеры.
 

Синтаксис

NDIS_TIMER_FUNCTION NdisTimerFunction;

void NdisTimerFunction(
  [in] PVOID SystemSpecific1,
  [in] PVOID FunctionContext,
  [in] PVOID SystemSpecific2,
  [in] PVOID SystemSpecific3
)
{...}

Параметры

[in] SystemSpecific1

Указатель на системное значение, зарезервированное для использования системой.

[in] FunctionContext

Указатель на предоставленную драйвером область контекста, переданную драйвером в функцию NdisSetTimerObject . Если параметр FunctionContextобъекта NdisSetTimerObject имеет значение NULL, NDIS использует значение по умолчанию, указанное драйвером в NDIS_TIMER_CHARACTERISTICS структура. Драйвер передал структуру функции NdisAllocateTimerObject для инициализации связанного объекта таймера.

[in] SystemSpecific2

Указатель на системное значение, зарезервированное для использования системой.

[in] SystemSpecific3

Указатель на системное значение, зарезервированное для использования системой.

Возвращаемое значение

None

Remarks

Любой драйвер NDIS может иметь одну или несколько функций обратного вызова NdisTimerFunction . Каждый такой обратный вызов NdisTimerFunction должен быть связан с другим выделенным драйвером и инициализированным объектом таймера.

Драйвер инициализирует объект таймера, выделенный драйвером, вызываяФункция NdisAllocateTimerObject.

Последующий вызов функции NdisSetTimerObject приводит к тому, что обратный вызов NdisTimerFunction , связанный с объектом таймера, будет выполняться через указанный интервал или периодически.

Чтобы отменить вызовы NdisTimerFunction, вызовите функцию NdisCancelTimerObject . NDIS может по-прежнему вызывать NdisTimerFunction , если время ожидания уже истекло до вызова NdisCancelTimerObject.

Если обратный вызов NdisTimerFunction совместно использует ресурсы с другими функциями драйвера, драйвер должен синхронизировать доступ к этим ресурсам с помощью спин-блокировки.

Примеры

Чтобы определить функцию NdisTimerFunction , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции. Windows предоставляет набор типов функций для драйверов. Объявление функции с помощью типов функций помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить функцию NdisTimerFunction с именем MyTimerCallback, используйте тип NDIS_TIMER_FUNCTION , как показано в этом примере кода:

NDIS_TIMER_FUNCTION MyTimerCallback;

Затем реализуйте функцию следующим образом:

_Use_decl_annotations_
VOID
 MyTimerCallback(
    PVOID  SystemSpecific1,
    PVOID  FunctionContext,
    PVOID  SystemSpecific2,
    PVOID  SystemSpecific3
    )
  {...}

Тип функции NDIS_TIMER_FUNCTION определен в файле заголовка Ndis.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, которые применяются к типу функции NDIS_TIMER_FUNCTION в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в разделе Объявление функций с помощью типов ролей функций для драйверов NDIS.

Сведения о Use_decl_annotations см. в статье О поведении функции.

Требования

Требование Значение
Минимальная версия клиента Поддерживается в NDIS 6.0 и более поздних версиях.
Целевая платформа Windows
Header ndis.h (включая Ndis.h)
IRQL DISPATCH_LEVEL

См. также раздел

Инициализация таймеров NDIS

NDIS_TIMER_CHARACTERISTICS

NdisAllocateTimerObject

NdisCancelTimerObject

NdisSetTimerObject

Таймеры обслуживания

Настройка и очистка таймеров