Función KeCancelTimer (wdm.h)

La rutina KeCancelTimer quita un objeto de temporizador antes del intervalo del temporizador, si se ha establecido alguno, expira.

Sintaxis

BOOLEAN KeCancelTimer(
  [in, out] PKTIMER unnamedParam1
);

Parámetros

[in, out] unnamedParam1

Puntero a un objeto de temporizador inicializado, para el que el autor de la llamada proporciona el almacenamiento.

Valor devuelto

Si el objeto de temporizador especificado está en la cola del temporizador del sistema, KeCancelTimer devuelve TRUE.

Comentarios

Si el objeto de temporizador está actualmente en la cola del temporizador del sistema, se quita de la cola. Si un objeto DPC está asociado al temporizador, también se cancela. De lo contrario, no se realiza ninguna operación.

La rutina devuelve TRUE si el temporizador sigue en la cola del temporizador. Se quita un temporizador noperiódico de la cola del sistema en cuanto expira. Por lo tanto, para temporizadores noperiódicos, KeCancelTimer devuelve FALSE si el DPC del temporizador se ha puesto en cola. Los temporizadores periódicos siempre están en la cola del temporizador, por lo que KeCancelTimer siempre devuelve TRUE para temporizadores periódicos.

Tenga en cuenta que un DPC que ya se está ejecutando se ejecuta hasta la finalización. El controlador debe asegurarse de que el DPC se haya completado antes de liberar los recursos utilizados por el DPC. En el caso de un temporizador noperiódico, puede usar primitivos de sincronización, como objetos de evento, para sincronizar entre el controlador y el DPC. El controlador puede comprobar el código de retorno de KeCancelTimer para determinar si se está ejecutando el DPC. Si es así, el DPC puede indicar el evento antes de salir y el controlador puede esperar a que ese evento se restablezca al estado no señalado.

Dado que para los temporizadores periódicos KeCancelTimer siempre devuelve TRUE, los controladores deben usar una técnica diferente para esperar hasta que se haya completado el DPC. Use la rutina KeFlushQueuedDpcs para bloquear hasta que se ejecute el DPC.

Los controladores no necesitan sincronizarse para los datos almacenados en variables globales o extensiones de objeto de controlador. El sistema llama automáticamente a KeFlushQueuedDpcs antes de desasignar cualquiera de estas regiones.

Para obtener más información sobre los objetos de temporizador, vea Objetos de temporizador y DDC.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 2000.
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport), IrqlKeDispatchLte(wdm)

Consulte también

KeInitializeTimer

KeReadStateTimer

KeSetTimer