다음을 통해 공유


FltAcquireResourceShared 함수(fltkernel.h)

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

구문

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

매개 변수

[in/out] Resource

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

반환 값

없음

설명

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

호출자에게 지정된 리소스에 대한 공유 액세스 권한이 부여되는지 여부는 다음 사항에 따라 달라집니다.

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

  • 호출자가 이미 리소스를 획득한 경우(공유 또는 단독 액세스용) 현재 스레드에 동일한 유형의 액세스가 재귀적으로 부여됩니다. 이 호출을 수행해도 지정된 리소스에 대한 호출자의 단독 소유권이 공유로 변환되지는 않습니다.

  • 리소스가 현재 다른 스레드에서 공유된 것으로 소유하고 있고 리소스에 대한 단독 액세스를 기다리는 스레드가 없는 경우 호출자에게 공유 액세스 권한이 즉시 부여됩니다. 전용 웨이터가 있는 경우 호출자가 대기 상태로 전환됩니다.

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

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

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

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

단독 액세스를 위한 리소스를 획득하려면 FltAcquireResourceExclusive를 호출합니다.

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

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

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

요구 사항

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