Compartir a través de


Función KePulseEvent (ntddk.h)

La rutina KePulseEvent establece de forma atómica un objeto de evento en un estado señalado, intenta satisfacer tantas esperas como sea posible y, a continuación, restablece el objeto de evento a un estado no señalado.

Sintaxis

LONG KePulseEvent(
  [in, out] PRKEVENT  Event,
  [in]      KPRIORITY Increment,
  [in]      BOOLEAN   Wait
);

Parámetros

[in, out] Event

Puntero a un objeto distribuidor de tipo KEVENT.

[in] Increment

Especifica un aumento que se va a aplicar a la prioridad de los subprocesos que están fácilmente como resultado de pulsar el evento. Normalmente se establece en cero, pero se puede establecer en uno.

[in] Wait

Especifica un valor booleano que indica si la llamada a KePulseEvent irá inmediatamente seguida de una llamada a una de las rutinas KeWaitXxx . Si es TRUE, la llamada a KePulseEvent va seguida inmediatamente de una llamada a KeWaitForMultipleObjects, KeWaitForMutexObject o KeWaitForSingleObject. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

Valor devuelto

Estado de señal anterior del objeto de evento.

Comentarios

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

La rutina KePulseEvent podría generar temporalmente irQL. Si el parámetro Wait es FALSE, la rutina, antes de que se devuelva, restaura el IRQL al valor original que tenía al principio de la llamada.

Si Wait = TRUE, la rutina devuelve sin reducir irQL. En este caso, la llamada a KePulseEvent debe seguir inmediatamente una llamada a KeWaitXxx . Al establecer Wait = TRUE, el autor de la llamada puede impedir que se produzca un cambio de contexto innecesario entre la llamada KePulseEvent y la llamada KeWaitXxx . La rutina KeWaitXxx , antes de que devuelva, restaura el IRQL a su valor original al principio de la llamada a KePulseEvent . Aunque IRQL deshabilita los cambios de contexto entre las dos llamadas, estas llamadas no se pueden usar de forma confiable como inicio y final de una operación atómica. Por ejemplo, entre estas dos llamadas, un subproceso que se ejecuta al mismo tiempo en otro procesador podría cambiar el estado del objeto de evento o del destino de la espera.

Si el autor de la llamada se ejecuta en IRQL = DISPATCH_LEVEL o en un contexto de subproceso arbitrario, el parámetro Timeout en KeWaitXxx debe ser cero.

Advertencia

Si un subproceso en espera de Event ejecuta actualmente un APC de kernel, cuando se llama a KePulseEvent , la espera de este subproceso no se satisface. Una vez completado el kernel de APC, el subproceso permanece en estado de espera.

Requisitos

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

Consulte también

KeInitializeEvent

KeReadStateEvent

KeResetEvent

KeSetEvent

KeWaitForMultipleObjects

KeWaitForSingleObject