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


Функция 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, если операция выполнена успешно. В противном случае этот метод может возвращать одно из следующих значений:

Код возврата Описание
STATUS_WDF_PARENT_NOT_SPECIFIED
Параметр Attributes имеет значение NULL, или элемент ParentObjectструктуры WDF_OBJECT_ATTRIBUTES , указанной атрибутами , имеет значение NULL.
STATUS_INVALID_PARAMETER
Указан недопустимый параметр.
STATUS_INVALID_DEVICE_REQUEST
Элемент ParentObject структуры WDF_OBJECT_ATTRIBUTES не ссылался на объект устройства платформы или объект, цепочка родителей которого приводит к объекту устройства платформы.
STATUS_INSUFFICIENT_RESOURCES
Недостаточно памяти.
STATUS_WDF_INCOMPATIBLE_EXECUTION_LEVEL
Для элемента AutomaticSerialization структуры WDF_TIMER_CONFIG задано значение TRUE, но для родительского объекта устройства был задан уровень выполнения WdfExecutionLevelPassive.
 

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

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

Комментарии

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

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

Если драйвер предоставляет функции обратного вызова EvtCleanupCallback или EvtDegradCallback для объекта таймера платформы, обратите внимание, что платформа вызывает эти функции обратного вызова в 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
                      );

timerConfig.AutomaticSerialization = TRUE;

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
Верхняя часть wdftimer.h (включая Wdf.h)
Библиотека Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
Правила соответствия DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

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

WDF_OBJECT_ATTRIBUTES

WDF_OBJECT_ATTRIBUTES_INIT

WDF_TIMER_CONFIG

WDF_TIMER_CONFIG_INIT

WdfTimerStart