Compartir a través de


Método IWDFInterrupt::AcquireInterruptLock (wudfddi.h)

[Advertencia: UMDF 2 es la versión más reciente de UMDF y sustituye a UMDF 1. Todos los nuevos controladores UMDF deben escribirse mediante UMDF 2. No se agregan nuevas características a UMDF 1 y hay compatibilidad limitada con UMDF 1 en versiones más recientes de Windows 10. Los controladores universales de Windows deben usar UMDF 2. Para obtener más información, consulta Introducción a UMDF.]

El método AcquireInterruptLock comienza una secuencia de código que se ejecuta mientras mantiene el bloqueo de un objeto de interrupción.

Sintaxis

void AcquireInterruptLock();

Valor devuelto

Ninguno

Observaciones

Cuando un controlador llama a AcquireInterruptLock, el sistema adquiere el bloqueo de interrupción del marco.

Cuando el controlador llama a ReleaseInterruptLock, el sistema libera el bloqueo de interrupción.

Puede usar AcquireInterruptLock y ReleaseInterruptLock si el controlador debe ejecutar algunas líneas de código sin que se adelante y con el mantenimiento de interrupciones deshabilitado.

El controlador no puede llamar a AcquireInterruptLock antes de que el marco haya llamado al onInterruptEnable del controlador función de devolución de llamada o después de que el marco haya llamado a la función de devolución de llamada del controlador OnInterruptDisable.

Después de que el controlador llame a AcquireInterruptLock, no debe llamar al método de nuevo para el mismo objeto de interrupción antes de llamar a ReleaseInterruptLock.

Cuando se ejecuta en un subproceso arbitrario, como un método de devolución de llamada de cola de E/S, los controladores deben llamar a IWDFInterrupt::TryToAcquireInterruptLock en lugar de IWDFInterrupt::AcquireInterruptLock. Por ejemplo, el controlador llama a IWDFInterrupt::TryToAcquireInterruptLock desde IQueueCallbackRead::OnRead.

Al hacerlo, se evita la posibilidad de interbloqueo, como se describe en el escenario siguiente.

  1. Para determinar si se interrumpió su dispositivo, una UMDF envía E/S a su bus desde su ISR, con el bloqueo de interrupción mantenido.
  2. El controlador de bus completa una segunda solicitud en el mismo subproceso en el que recibió la solicitud anterior.
  3. La rutina de finalización de la segunda solicitud envía una solicitud al controlador UMDF.
  4. La rutina de distribución de E/S del controlador UMDF IWDFInterrupt::AcquireInterruptLock, que luego interbloqueo intenta adquirir el bloqueo de interrupción.
El controlador no debe intentar adquirir el bloqueo de forma recursiva. Si está conectado al depurador, el marco presenta un punto de interrupción en este escenario.

Para obtener más información sobre el bloqueo manual de interrupciones, consulte Sincronización del código de interrupción.

Para obtener más información sobre cómo controlar las interrupciones en los controladores UMDF, consulte acceso a hardware y control de interrupciones.

Requisitos

Requisito Valor
fin del soporte técnico No disponible en UMDF 2.0 y versiones posteriores.
de la plataforma de destino de Escritorio
versión mínima de UMDF 1.11
encabezado de wudfddi.h
DLL de WUDFx.dll

Consulte también

IWDFInterrupt

IWDFInterrupt::ReleaseInterruptLock

WdfInterruptAcquireLock