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 controladores UMDF nuevos deben escribirse con 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 con UMDF.

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

Sintaxis

void AcquireInterruptLock();

Valor devuelto

None

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 tener que adelantarse y con el mantenimiento de interrupciones deshabilitado.

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

Después de que el controlador llame a AcquireInterruptLock, no debe volver a llamar al método 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.

Esto evita la posibilidad de interbloqueo, tal como se describe en el siguiente escenario.

  1. Para determinar si se interrumpe 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 llama a 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 introduce un punto de interrupción en este escenario.

Para obtener más información sobre el bloqueo manual de interrupciones, vea Sincronizar código de interrupción.

Para obtener más información sobre el control de interrupciones en los controladores UMDF, consulte Acceso a hardware y control de interrupciones.

Requisitos

Requisito Value
Finalización del soporte técnico No disponible en UMDF 2.0 y versiones posteriores.
Plataforma de destino Escritorio
Versión mínima de UMDF 1.11
Encabezado wudfddi.h
Archivo DLL WUDFx.dll

Consulte también

IWDFInterrupt

IWDFInterrupt::ReleaseInterruptLock

WdfInterruptAcquireLock