Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Применимо к 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) |