функция обратного вызова NDIS_TIMER_FUNCTION (ndis.h)
Функция обратного вызова NdisTimerFunction вызывается NDIS после того, как драйвер устанавливает одноразовый или периодический таймер при срабатывании таймера.
Синтаксис
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 |