다음을 통해 공유


FltAcquireResourceExclusive 함수(fltkernel.h)

FltAcquireResourceExclusive 루틴은 호출 스레드에서 단독 액세스를 위해 지정된 리소스를 획득합니다.

구문

VOID FLTAPI FltAcquireResourceExclusive(
  [in/out] PERESOURCE Resource
);

매개 변수

[in/out] Resource

불투명 ERESOURCE 구조체에 대한 포인터입니다. 이 구조체는 호출자가 비페이지 풀에서 할당하고 ExInitializeResourceLite 또는 ExReinitializeResourceLite를 호출하여 초기화해야 합니다.

반환 값

없음

설명

FltAcquireResourceExclusive 는 호출 스레드에서 단독 액세스를 위해 지정된 리소스를 획득합니다.

다음 상황에서는 호출자에게 지정된 리소스에 대한 단독 액세스 권한이 부여되는지 여부 또는 시기를 결정합니다.

  • 리소스가 현재 소유되지 않은 경우 현재 스레드에 즉시 단독 액세스 권한이 부여됩니다.

  • 호출자가 배타적 액세스를 위해 리소스를 이미 획득한 경우 현재 스레드에 동일한 유형의 액세스가 재귀적으로 부여됩니다.

  • 리소스에 대한 공유 액세스 권한이 있는 호출자는 잠금을 해제한 다음 독점적으로 다시 요청해야 합니다.

  • 리소스가 현재 다른 스레드에서 배타적으로 소유되어 있거나 호출자가 리소스에 대한 공유 액세스 권한만 있는 경우 현재 스레드는 리소스를 획득할 때까지 대기 상태로 전환됩니다.

두 스레드가 각각 동일한 리소스에 공유 잠금을 유지하고 둘 다 공유 잠금을 해제하지 않고 잠금을 독점적으로 획득하려고 하면 교착 상태가 됩니다. 즉, 각 스레드는 다른 스레드가 잠금에서 공유 보류를 해제할 때까지 기다리며, 둘 다 공유 보류를 해제하지 않습니다.

FltAcquireResourceExclusive 는 일반 커널 APC 배달을 사용하지 않도록 설정하는 ExAcquireResourceExclusiveLite 에 대한 래퍼입니다.

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

리소스를 획득한 후 해제하려면 FltReleaseResource를 호출합니다. FltAcquireResourceExclusive에 대한 모든 성공적인 호출은 FltReleaseResource에 대한 후속 호출과 일치해야 합니다.

공유 액세스를 위한 리소스를 가져오려면 FltAcquireResourceShared를 호출합니다.

시스템의 리소스 목록에서 리소스를 삭제하려면 ExDeleteResourceLite를 호출합니다.

다시 사용할 리소스를 초기화하려면 ExReinitializeResourceLite를 호출합니다.

ERESOURCE 구조에 대한 자세한 내용은 ERESOURCE 루틴 소개를 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP SP2
지원되는 최소 서버 Windows Server 2003 SP1
머리글 fltkernel.h
라이브러리 FltMgr.lib
IRQL IRQL <= APC_LEVEL