다음을 통해 공유


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을 변경하지 않습니다.

Timeout 포인터가 NULL 시간 제한 값이 0이 아니면 WdfWaitLockAcquire IRQL = PASSIVE_LEVEL 호출해야 합니다.

제한 시간 값이 0이면 WdfWaitLockAcquire IRQL < DISPATCH_LEVEL 호출해야 합니다. 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