IWDFInterrupt::AcquireInterruptLock 메서드(wudfddi.h)

[경고: UMDF 2는 UMDF의 최신 버전이며 UMDF 1을 대체합니다. 모든 새 UMDF 드라이버는 UMDF 2를 사용하여 작성해야 합니다. UMDF 1에 새 기능이 추가되지 않으며 최신 버전의 Windows 10 UMDF 1에 대한 지원이 제한되어 있습니다. 유니버설 Windows 드라이버는 UMDF 2를 사용해야 합니다. 자세한 내용은 UMDF를 사용하여 시작 참조하세요.]

AcquireInterruptLock 메서드는 인터럽트 개체의 잠금을 유지하면서 실행되는 코드 시퀀스를 시작합니다.

구문

void AcquireInterruptLock();

반환 값

없음

설명

드라이버가 AcquireInterruptLock을 호출하면 시스템은 프레임워크의 인터럽트 잠금을 획득합니다.

드라이버가 ReleaseInterruptLock을 호출하면 시스템에서 인터럽트 잠금을 해제합니다.

드라이버가 선점되지 않고 인터럽트 서비스를 사용하지 않도록 설정하지 않고 몇 줄의 코드를 실행해야 하는 경우 AcquireInterruptLockReleaseInterruptLock 을 사용할 수 있습니다.

프레임워크가 드라이버의 OnInterruptEnable 콜백 함수를 호출하거나 프레임워크가 드라이버의 OnInterruptDisable 콜백 함수를 호출한 후에는 드라이버 가 AcquireInterruptLock을 호출할 수 없습니다.

드라이버 가 AcquireInterruptLock을 호출한 후에 는 ReleaseInterruptLock을 호출하기 전에 동일한 인터럽트 개체에 대해 메서드를 다시 호출하면 안 됩니다.

I/O 큐 콜백 메서드와 같은 임의의 스레드에서 실행하는 경우 드라이버는 IWDFInterrupt::AcquireInterruptLock 대신 IWDFInterrupt::TryToAcquireInterruptLock을 호출해야 합니다. 예를 들어 드라이버는 IQueueCallbackRead::OnRead에서 IWDFInterrupt::TryToAcquireInterruptLock을 호출합니다.

이렇게 하면 다음 시나리오에 설명된 대로 교착 상태가 발생할 가능성이 방지됩니다.

  1. 디바이스가 중단되었는지 확인하기 위해 UMDF는 인터럽트 잠금이 유지된 상태에서 ISR 내에서 버스로 I/O를 보냅니다.
  2. 버스 드라이버는 위의 요청을 받은 동일한 스레드에서 두 번째 요청을 완료합니다.
  3. 두 번째 요청의 완료 루틴은 UMDF 드라이버에 요청을 보냅니다.
  4. UMDF 드라이버의 I/O 디스패치 루틴은 IWDFInterrupt::AcquireInterruptLock을 호출한 다음, 인터럽트 잠금을 획득하려고 시도하는 교착 상태를 호출합니다.
드라이버는 잠금을 재귀적으로 획득하려고 시도해서는 안 됩니다. 디버거에 연결된 경우 프레임워크는 이 시나리오에서 중단점을 도입합니다.

수동 인터럽트 잠금에 대한 자세한 내용은 인터럽트 코드 동기화를 참조하세요.

UMDF 드라이버에서 인터럽트 처리에 대한 자세한 내용은 하드웨어 액세스 및 인터럽트 처리를 참조하세요.

요구 사항

요구 사항
지원 종료 UMDF 2.0 이상에서는 사용할 수 없습니다.
대상 플랫폼 데스크톱
최소 UMDF 버전 1.11
머리글 wudfddi.h
DLL WUDFx.dll

추가 정보

IWDFInterrupt

IWDFInterrupt::ReleaseInterruptLock

WdfInterruptAcquireLock