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


Функция WdfTimerCreate (wdftimer.h)

[Применимо к KMDF и UMDF]

Метод WdfTimerCreate создает объект таймера платформы.

Синтаксис

NTSTATUS WdfTimerCreate(
  [in]  PWDF_TIMER_CONFIG      Config,
  [in]  PWDF_OBJECT_ATTRIBUTES Attributes,
  [out] WDFTIMER               *Timer
);

Параметры

[in] Config

Указатель на структуру WDF_TIMER_CONFIG .

[in] Attributes

Указатель на структуру WDF_OBJECT_ATTRIBUTES , содержащую атрибуты объекта для нового объекта таймера.

[out] Timer

Указатель на расположение, которое получает дескриптор к новому объекту таймера платформы.

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

WdfTimerCreate возвращает STATUS_SUCCESS, если операция выполнена успешно. В противном случае этот метод может вернуть одно из следующих значений:

Код возврата Description
STATUS_WDF_PARENT_NOT_SPECIFIED Параметр "Атрибуты" был NULL или элемент ParentObject структуры WDF_OBJECT_ATTRIBUTES , указывающей атрибуты , имеет значение NULL.
СТАТУС_НЕДЕЙСТВИТЕЛЬНЫЙ_ПАРАМЕТР Указан недопустимый параметр.
STATUS_INVALID_DEVICE_REQUEST Элемент ParentObject структуры WDF_OBJECT_ATTRIBUTES не ссылался на объект устройства платформы или объект, цепочка родителей которого приводит к объекту устройства платформы.
STATUS_INSUFFICIENT_RESOURCES Недостаточно памяти.
STATUS_WDF_INCOMPATIBLE_EXECUTION_LEVEL Элемент AutomaticSerialization структуры WDF_TIMER_CONFIG имеет значение TRUE, но для родительского объекта устройства задано значениеWdfExecutionLevelPassive.

Список других возвращаемых значений, возвращаемых методом WdfTimerCreate , см. в разделе "Ошибки создания объектов Framework".

Этот метод также может возвращать другие значения NTSTATUS.

Замечания

Когда драйвер вызывает WdfTimerCreate, он должен предоставить WDF_OBJECT_ATTRIBUTES структуру и указать родительский объект в элементе ParentObject структуры. Родительский объект может быть объектом платформы или любым объектом, цепочка родителей которого ведет к объекту устройства платформы. Платформа удаляет объект таймера при удалении объекта устройства.

После создания объекта таймера драйвер должен вызвать WdfTimerStart , чтобы запустить часы таймера независимо от того, является ли таймер периодическим или нет.

Если драйвер предоставляет функции обратного вызова EvtCleanupCallback или EvtDesisCallback для объекта таймера платформы, обратите внимание, что платформа вызывает эти функции обратного вызова в IRQL = PASSIVE_LEVEL.

Дополнительные сведения об объектах таймера платформы см. в разделе "Использование таймеров".

Примеры

Следующий пример кода инициализирует структуру WDF_TIMER_CONFIG и структуру WDF_OBJECT_ATTRIBUTES , а затем вызывает WdfTimerCreate.

WDF_TIMER_CONFIG  timerConfig;
WDF_OBJECT_ATTRIBUTES  timerAttributes;
WDFTIMER  timerHandle;
NTSTATUS  status;

WDF_TIMER_CONFIG_INIT(
                      &timerConfig,
                      MyEvtTimerFunc
                      );

// Consider allowing a tolerance for the due time and period.
// For more information on no-wake timers and timer coalescing, see:
// https://learn.microsoft.com/en-us/windows-hardware/drivers/kernel/no-wake-timers
timerConfig.TolerableDelay = 10;

WDF_OBJECT_ATTRIBUTES_INIT(&timerAttributes);
timerAttributes.ParentObject = DeviceHandle;

status = WdfTimerCreate(
                        &timerConfig,
                        &timerAttributes,
                        &timerHandle
                        );

if (!NT_SUCCESS(status)) {
    return status;
}

Требования

Требование Ценность
целевая платформа Всеобщий
Минимальная версия KMDF 1.0
Минимальная версия UMDF 2.0
Header wdftimer.h (include Wdf.h)
Library Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
правил соответствия DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

См. также