FltAcquirePushLockShared 함수(fltkernel.h)

FltAcquirePushLockShared 루틴은 호출 스레드에서 공유 액세스에 대해 지정된 푸시 잠금을 획득합니다.

구문

VOID FLTAPI FltAcquirePushLockShared(
  [in, out] PEX_PUSH_LOCK PushLock
);

매개 변수

[in, out] PushLock

PEX_PUSH_LOCK 형식의 불투명 푸시 잠금 포인터입니다. 이 포인터는 FltInitializePushLock에 대한 이전 호출에 의해 초기화되어야 합니다.

반환 값

없음

설명

FltAcquirePushLockShared 루틴은 호출 스레드에서 공유 액세스에 대해 지정된 푸시 잠금을 획득합니다.

푸시 잠금은 공유 또는 배타적 액세스를 위해 획득할 수 있다는 ERESOURCE 구조(리소스라고도 함)와 유사합니다. 푸시 잠금에 대한 자세한 내용은 FltInitializePushLock에 대한 참조 항목을 참조하세요.

ERESOURCE 구조와 달리 푸시 잠금은 재귀적으로 가져올 수 없습니다. 호출자가 배타적 액세스를 위해 푸시 잠금을 이미 획득한 경우 시스템이 중단됩니다. 호출자가 공유 액세스에 대한 푸시 잠금을 이미 획득한 경우 공유 액세스를 다시 받을 수 있습니다. 그러나 FltAcquirePushLockShared 에 대한 각 호출은 FltReleasePushLock에 대한 후속 호출과 일치해야 합니다.

호출자에게 지정된 푸시 잠금에 대한 공유 액세스 권한이 부여되는 경우 다음 사항에 따라 달라집니다.

  • 푸시 잠금이 현재 소유되지 않은 경우 공유 액세스 권한이 현재 스레드에 즉시 부여됩니다.

  • 다른 스레드에서 공유 액세스를 위해 푸시 잠금을 이미 획득했으며 푸시 잠금에 대한 단독 액세스를 기다리는 스레드가 없는 경우 공유 액세스 권한이 호출자에게 즉시 부여됩니다. 전용 웨이터가 있는 경우 호출자는 대기 상태로 전환됩니다.

  • 다른 스레드에서 단독 액세스를 위해 푸시 잠금을 이미 획득했거나 배타적 액세스를 기다리는 다른 스레드가 있는 경우 푸시 잠금을 획득할 수 있을 때까지 현재 스레드가 대기 상태로 전환됩니다.

FltAcquirePushLockShared는 일반 커널 APC 배달을 사용하지 않도록 설정하므로 FltAcquirePushLockShared를 호출하기 전에 KeEnterCriticalRegion 또는 FsRtlEnterFileSystem을 호출할 필요가 없습니다.

푸시 잠금을 획득한 후 해제하려면 FltReleasePushLock을 호출합니다. FltAcquirePushLockShared에 대한 모든 호출은 FltReleasePushLock에 대한 후속 호출과 일치해야 합니다.

단독 액세스를 위한 푸시 잠금을 획득하려면 FltAcquirePushLockExclusive를 호출합니다.

푸시 잠금을 초기화하려면 FltInitializePushLock을 호출합니다.

푸시 잠금을 삭제하려면 FltDeletePushLock을 호출합니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 fltkernel.h(Fltkernel.h 포함)
라이브러리 FltMgr.lib
IRQL <= APC_LEVEL

추가 정보

FltAcquirePushLockExclusive

FltAcquirePushLockSharedEx

FltDeletePushLock

FltInitializePushLock

FltReleasePushLock

FsRtlEnterFileSystem

KeEnterCriticalRegion