WdfWaitLockAcquire 함수(wdfsync.h)

[KMDF 및 UMDF에 적용]

WdfWaitLockAcquire 메서드는 지정된 대기 잠금을 획득합니다.

구문

NTSTATUS WdfWaitLockAcquire(
  [in]           WDFWAITLOCK Lock,
  [in, optional] PLONGLONG   Timeout
);

매개 변수

[in] Lock

WdfWaitLockCreate에 대한 이전 호출에서 가져온 프레임워크 대기 잠금 개체에 대한 핸들입니다.

[in, optional] Timeout

시간 제한 값에 대한 선택적 포인터입니다. 시간 제한 값은 시스템 시간 단위(100나노초 간격)로 지정됩니다.

포인터가 NULL이 아닌 경우 프레임워크는 지정된 제한 시간 내에 완료되지 않은 경우 잠금을 가져오려는 시도를 취소합니다. 시간 제한 값은 다음과 같이 음수, 양수 또는 0일 수 있습니다.

  • 제한 시간 값이 음수이면 만료 시간은 현재 시스템 시간을 기준으로 합니다.
  • 제한 시간 값이 양수이면 만료 시간은 절대 시간으로 지정됩니다(실제로 1601년 1월 1일에 상대적인 시간).
  • 시간 제한 값이 0이면 WdfWaitLockAcquire 는 잠금을 획득하려고 시도한 다음 잠금을 획득했는지 여부에 관계없이 즉시 반환합니다.
상대 만료 시간은 지정된 제한 시간 내에 발생할 수 있는 시스템 시간 변경의 영향을 받지 않습니다. 절대 만료 시간은 시스템 시간 변경을 반영합니다.

프레임워크는 시간 값을 시스템 시간 단위로 변환하는 시간 변환 함수 를 제공합니다.

호출자가 NULL 포인터를 제공하는 경우 메서드는 잠금을 획득할 때까지 무기한 대기합니다.

반환 값

WdfWaitLockAcquire 는 다음 NTSTATUS 값을 반환할 수 있습니다.

반환 코드 설명
STATUS_SUCCESS
호출자가 대기 잠금을 획득했습니다.
STATUS_TIMEOUT
잠금을 획득하기 전에 지정된 시간 제한 간격이 만료되었습니다.
 

NT_SUCCESS(상태)는 이러한 모든 상태 값에 대해 TRUE와 같습니다.

호출자는 Timeout 포인터가 NULL인 경우 반환 값을 검사 필요가 없습니다. 이 경우 WdfWaitLockAcquire는 잠금을 획득한 후에만 반환되기 때문입니다.

드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.

설명

WdfWaitLockAcquire 메서드는 대기 잠금을 획득하거나 제한 시간이 만료될 때까지 반환되지 않습니다.

WdfWaitLockAcquire는 대기 잠금을 획득하기 전에 KeEnterCriticalRegion 을 호출합니다. 결과적으로 메서드가 반환되면 일반 커널 APC 가 비활성화됩니다. WdfWaitLockAcquire 는 호출자의 IRQL을 변경하지 않습니다.

시간 제한 포인터가 NULL이거나 시간 제한 값이 0이 아닌 경우 IRQL = PASSIVE_LEVEL WdfWaitLockAcquire를 호출해야 합니다.

시간 제한 값이 0이면 IRQL < DISPATCH_LEVEL WdfWaitLockAcquire를 호출해야 합니다. 이 메서드는 DISPATCH_LEVEL 호출할 수 있음을 나타내는 헤더 파일(wdfsync.h)과 불일치합니다.

대기 잠금에 대한 자세한 내용은 Framework-Based 드라이버에 대한 동기화 기술을 참조하세요.

예제

다음 코드 예제에서는 대기 잠금을 획득하고, 디바이스 개체를 개체 컬렉션에 추가하고, 대기 잠금을 해제합니다.

WdfWaitLockAcquire(
                   FilterDeviceCollectionLock,
                   NULL
                   );
status = WdfCollectionAdd(
                          FilterDeviceCollection,
                          deviceHandle
                          );
if (!NT_SUCCESS(status)) {
    addFailed = TRUE;
}
WdfWaitLockRelease(FilterDeviceCollectionLock);

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 wdfsync.h(Wdf.h 포함)
라이브러리 Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF)
IRQL 설명 섹션을 참조하십시오.
DDI 규정 준수 규칙 DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), WdfWaitlock(kmdf), WdfWaitlockRelease(kmdf)

추가 정보

KeEnterCriticalRegion

WdfWaitLockCreate

WdfWaitLockRelease