다음을 통해 공유


ExAcquireSharedWaitForExclusive 함수(wdm.h)

ExAcquireSharedWaitForExclusive 루틴은 공유 액세스 권한을 부여할 수 있고 배타적인 웨이터가 없는 경우 공유 액세스를 위해 지정된 리소스를 획득합니다.

통사론

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

매개 변수

[in, out] Resource

공유 액세스를 위해 획득할 리소스에 대한 포인터입니다.

[in] Wait

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

반환 값

ExAcquireSharedWaitForExclusive 요청된 액세스 권한이 부여되거나 단독 소유자가 리소스를 해제하는 경우 TRUE 반환합니다. 이 루틴은 입력 WaitFALSE 공유 액세스 권한을 즉시 부여할 수 없는 경우 FALSE 반환합니다.

발언

대부분의 드라이버는 ExAcquireSharedWaitForExclusive 대신 ExAcquireResourceSharedLite 사용해야 합니다.

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

공유 액세스 권한을 즉시 부여할 수 없는 경우 호출자는 다른 스레드가 리소스의 배타적 소유권을 획득하고 해제할 때까지 기다릴 수 있습니다.

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

  • 리소스가 현재 소유되지 않은 경우 공유 액세스 권한은 현재 스레드에 즉시 부여됩니다.
  • 호출자에게 리소스에 대한 단독 액세스 권한이 이미 있는 경우 현재 스레드에 동일한 유형의 액세스가 재귀적으로 부여됩니다.
  • 리소스가 현재 공유로 소유하고 있으며 배타적 액세스를 획득하려는 보류 중인 시도가 없는 경우 호출자에게 즉시 공유 액세스 권한이 부여됩니다.
  • 리소스가 현재 공유로 소유되어 있지만 단독 액세스를 획득하려는 보류 중인 시도가 있는 경우 호출자는 대기 상태(WaitTRUE설정됨) 또는 exAcquireSharedWaitForExclusive FALSE 반환합니다.

    보류 중인 단독 소유권이 해제될 때까지 현재 스레드가 리소스를 획득하기 위해 대기하는 경우 현재 스레드에 리소스에 대한 공유 액세스 권한이 부여되고 실행을 다시 시작할 때 exAcquireSharedWaitForExclusiveTRUE 반환합니다.

ExAcquireSharedWaitForExclusive 동작은 호출 스레드가 이미 공유된 리소스를 소유하고 있고 전용 웨이터가 없는 한 ExAcquireResourceSharedLite 동작과 동일합니다. 이 경우 exAcquireSharedWaitForExclusive 전용 웨이터가 리소스의 배타적 소유권을 획득할 수 있습니다.

호출자가 Wait 매개 변수에 대해 TRUE 지정하는 경우 호출자는 ExReleaseResourceForThread사용하여 다른 스레드가 호출자를 대신하여 리소스를 해제할 때까지 차단합니다. 드라이버 작성기는 다른 스레드가 실제로 리소스를 해제하는지 확인해야 합니다. 그렇지 않으면 호출자가 교착 상태에 빠지게됩니다. ExAcquireResourceSharedLite 이 속성이 없으므로 드라이버는 ExAcquireSharedWaitForExclusive특정 동작을 요구하지 않는 한 해당 루틴을 사용해야 합니다.

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

요구 사항

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

참고 항목

ExAcquireResourceSharedLite

ExAcquireSharedStarveExclusive

exConvertExclusiveToSharedLite

ExGetExclusiveWaiterCount

ExIsResourceAcquiredExclusiveLite

exIsResourceAcquiredSharedLite

exReleaseResourceForThread