ExAcquireSharedStarveExclusive 함수(wdm.h)

ExAcquireSharedStarveExclusive 루틴은 동일한 리소스에 대한 단독 액세스를 획득하기 위해 보류 중인 시도를 기다리지 않고 공유 액세스를 위해 지정된 리소스를 획득합니다.

구문

BOOLEAN ExAcquireSharedStarveExclusive(
  [in, out] PERESOURCE Resource,
  [in]      BOOLEAN    Wait
);

매개 변수

[in, out] Resource

공유 액세스를 위해 가져올 리소스에 대한 포인터입니다.

[in] Wait

리소스를 즉시 가져올 수 없을 때마다 루틴의 동작을 지정합니다. TRUE이면 리소스를 가져올 수 있을 때까지 호출자가 대기 상태로 전환됩니다. FALSE이면 리소스를 가져올 수 있는지 여부에 관계없이 루틴이 즉시 반환됩니다.

반환 값

ExAcquireSharedStarveExclusive 는 요청된 액세스 권한이 부여되면 TRUE 를 반환합니다. 입력 WaitFALSE이고 공유 액세스 권한을 즉시 부여할 수 없는 경우 이 루틴은 FALSE를 반환합니다.

설명

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

  • 리소스가 현재 소유되지 않은 경우 공유 액세스 권한이 현재 스레드에 즉시 부여됩니다.
  • 호출자가 이미 리소스를 획득한 경우(공유 또는 단독 액세스용) 현재 스레드에 동일한 유형의 액세스가 재귀적으로 부여됩니다. 이 호출을 수행해도 지정된 리소스에 대한 호출자의 단독 액세스는 공유 액세스로 변환되지 않습니다.
  • 리소스가 현재 다른 스레드에서 공유된 것으로 소유되는 경우 다른 스레드가 해당 리소스에 대한 단독 액세스를 기다리는 경우에도 공유 액세스 권한이 호출자에게 즉시 부여됩니다.
  • 리소스가 현재 다른 스레드에서 배타적으로 소유된 경우 호출자는 대기 상태(대기TRUE로 설정됨)로 설정되거나 ExAcquireSharedStarveExclusiveFALSE를 반환합니다.
ExAcquireSharedStarveExclusive의 호출자는 일반적으로 중복 작업을 수행하지 못하도록 배타적 접근자를 저장하기 위해 공유 리소스에 빠르게 액세스해야 합니다. 예를 들어 파일 시스템은 캐시 관리자가 리소스에 대한 단독 액세스를 획득하고 캐시를 디스크에 쓰기 전에 캐시된 리소스(예: 캐시에 고정된 BCB)를 수정하기 위해 이 루틴을 호출할 수 있습니다.

이 루틴을 호출하기 전에 일반 커널 APC 배달을 사용하지 않도록 설정해야 합니다. KeEnterCriticalRegion을 호출하여 일반 커널 APC 배달을 사용하지 않도록 설정합니다. 리소스가 해제될 때까지 배달을 사용하지 않도록 설정해야 하며, 이때 KeLeaveCriticalRegion을 호출하여 다시 사용할 수 있습니다. 자세한 내용은 APC 비활성화를 참조하세요.

호출자는 ExReleaseResourceLite 또는 ExReleaseResourceForThreadLite를 호출하여 리소스를 해제할 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000부터 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport), IrqlExApcLte3(wdm), WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm)

추가 정보

ExAcquireResourceSharedLite

ExAcquireSharedWaitForExclusive

ExConvertExclusiveToSharedLite

ExGetExclusiveWaiterCount

ExIsResourceAcquiredExclusiveLite

ExIsResourceAcquiredSharedLite