次の方法で共有


ExAcquireResourceExclusiveLite 関数 (wdm.h)

ExAcquireResourceExclusiveLite ルーチンは、呼び出し元スレッドによる排他アクセスのために、指定されたリソースを取得します。

構文

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

パラメーター

[in, out] Resource

取得するリソースへのポインター。

[in] Wait

リソースをすぐに取得できない場合のルーチンの動作を指定します。 TRUE の場合、呼び出し元はリソースを取得できるようになるまで待機状態になります。 FALSE の場合、リソースを取得できるかどうかに関係なく、ルーチンは直ちにを返します。

戻り値

リソースが取得された場合、ExAcquireResourceExclusiveLiteTRUE を返します。 入力 WaitFALSE で、排他アクセスをすぐに許可できない場合、このルーチンは FALSE を返します。

注釈

次の一覧では、呼び出し元に特定のリソースへの排他的アクセス権が付与されるかどうかとタイミングについて説明します。

  • リソースが現在所有されていない場合は、現在のスレッドへの排他アクセスが直ちに付与されます。

  • 呼び出し元が排他アクセスのためにリソースを既に取得している場合、現在のスレッドには同じ種類のアクセスが再帰的に付与されます。

  • 呼び出し元がリソースへの共有アクセス権を持っている場合、呼び出し元は、ロックを排他的に再取得する前にロックを解放する必要があります。

  • リソースが現在別のスレッドによって排他的として所有されている場合、または呼び出し元がリソースへの共有アクセスのみを持っている場合、現在のスレッドは、リソースを取得できるようになるまで待機状態になります。

2 つのスレッドがそれぞれ同じリソースで共有ロックを保持し、両方が共有ロックを解放せずに排他的にロックを取得しようとすると、デッドロックが発生します。 つまり、各スレッドは、他のスレッドがロックに対する共有ホールドを解放するのを待ち、もう一方がロックされるまで共有ホールドを解放しません。

呼び出し元は、 ExReleaseResourceLite または ExReleaseResourceForThreadLite を呼び出すことによって、リソースを解放できます。

このルーチンを呼び出す前に、通常のカーネル APC 配信を無効にする必要があります。 KeEnterCriticalRegion を呼び出して、通常のカーネル APC 配信を無効にします。 リソースが解放されるまで、配信は無効のままにしておく必要があります。その時点で 、KeLeaveCriticalRegion を呼び出して再び有効にすることができます。 詳細については、「 APC の無効化」を参照してください。

要件

要件
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
DDI コンプライアンス規則 ExclusiveResourceAccess(wdm)HwStorPortProhibitedDDIs(storport)IrqlExApcLte3(wdm)WithinCriticalRegion(storport)、WithinCriticalRegion(storport)、 WithinCriticalRegion(wdm)

こちらもご覧ください

ExAcquireResourceSharedLite

ExGetExclusiveWaiterCount

ExGetSharedWaiterCount

ExInitializeResourceLite

ExIsResourceAcquiredExclusiveLite

ExReinitializeResourceLite

ExReleaseResourceForThreadLite

ExReleaseResourceLite

KeEnterCriticalRegion

KeLeaveCriticalRegion