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 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 del 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 attributes NULL, o el miembro ParentObject de la estructura WDF_OBJECT_ATTRIBUTES que Attributes especifica que se NULL. |
|
Se especificó un parámetro no válido. |
|
El ParentObject miembro 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 de WDF_TIMER_CONFIG se estableció en TRUE, pero el nivel de ejecución de del objeto de dispositivo primario se estableció en WdfExecutionLevelPassive. |
Para obtener una lista de otros valores devueltos que podría devolver el método WdfTimerCreate, consulte Errores de creación de objetos de marco.
Este método también puede devolver otros valores de NTSTATUS.
Observaciones
Cuando el controlador llama a WdfTimerCreate, debe proporcionar una estructura 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 EvtCleanupCallback o EvtDestroyCallback funciones de devolución de llamada para el objeto de 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 del temporizador del marco, vea Using Timers.
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 | Valor |
---|---|
de la plataforma de destino de | Universal |
versión mínima de KMDF | 1.0 |
versión mínima de UMDF | 2.0 |
encabezado de | wdftimer.h (incluya Wdf.h) |
biblioteca de | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
irQL | <=DISPATCH_LEVEL |
reglas de cumplimiento de DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |