Función WdfTimerCreate (wdftimer.h)
[Se aplica a KMDF y UMDF]
El método WdfTimerCreate crea un objeto de temporizador de marco.
Sintaxis
NTSTATUS WdfTimerCreate(
[in] PWDF_TIMER_CONFIG Config,
[in] PWDF_OBJECT_ATTRIBUTES Attributes,
[out] WDFTIMER *Timer
);
Parámetros
[in] Config
Puntero a una estructura de WDF_TIMER_CONFIG .
[in] Attributes
Puntero a una estructura de WDF_OBJECT_ATTRIBUTES que contiene atributos de objeto para el nuevo objeto de temporizador.
[out] Timer
Puntero a una ubicación que recibe un identificador para el nuevo objeto de temporizador del marco.
Valor devuelto
WdfTimerCreate devuelve STATUS_SUCCESS si la operación se realiza correctamente. De lo contrario, este método podría devolver uno de los siguientes valores:
Código devuelto | Descripción |
---|---|
|
El parámetro Attributes era NULL o el miembro ParentObject de la estructura WDF_OBJECT_ATTRIBUTES que Attributes especifica era NULL. |
|
Se especificó un parámetro no válido. |
|
El miembro ParentObject de la estructura WDF_OBJECT_ATTRIBUTES no hizo referencia a un objeto de dispositivo de marco ni a un objeto cuya cadena de elementos primarios conduce a un objeto de dispositivo de marco. |
|
No había memoria suficiente. |
|
El miembro AutomaticSerialization de la estructura WDF_TIMER_CONFIG se estableció en TRUE, pero el nivel de ejecución del objeto de dispositivo primario se estableció en WdfExecutionLevelPassive. |
Para obtener una lista de otros valores devueltos que el método WdfTimerCreate podría devolver, vea Errores de creación de objetos de marco.
Este método también podría devolver otros valores NTSTATUS.
Comentarios
Cuando el controlador llama a WdfTimerCreate, debe proporcionar una estructura de WDF_OBJECT_ATTRIBUTES y debe especificar un objeto primario en el miembro ParentObject de la estructura. El objeto primario puede ser un objeto de dispositivo de marco o cualquier objeto cuya cadena de elementos primarios conduce a un objeto de dispositivo de marco. El marco eliminará el objeto de temporizador cuando elimine el objeto de dispositivo.
Después de crear un objeto de temporizador, el controlador debe llamar a WdfTimerStart para iniciar el reloj del temporizador, independientemente de si el temporizador es periódico o no.
Si el controlador proporciona funciones de devolución de llamada EvtCleanupCallback o EvtDestroyCallback para el objeto del temporizador del marco, tenga en cuenta que el marco llama a estas funciones de devolución de llamada en IRQL = PASSIVE_LEVEL.
Para obtener más información sobre los objetos de temporizador del marco, vea Uso de temporizadores.
Ejemplos
En el ejemplo de código siguiente se inicializa una estructura de WDF_TIMER_CONFIG y una estructura de WDF_OBJECT_ATTRIBUTES y, a continuación, se llama a 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;
}
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Universal |
Versión mínima de KMDF | 1.0 |
Versión mínima de UMDF | 2.0 |
Encabezado | wdftimer.h (incluya Wdf.h) |
Library | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | <=DISPATCH_LEVEL |
Reglas de cumplimiento de DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |