次の方法で共有


ExAcquireResourceExclusiveLite 関数 (wdm.h)

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

構文

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

パラメーター

[in, out] Resource

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

[in] Wait

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

戻り値

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

備考

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

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

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

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

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

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

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

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

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
DDI コンプライアンス規則 する ExclusiveResourceAccess(wdm)HwStorPortProhibitedDDDIs(storport), IrqlExApcLte3(wdm), WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm)

関連項目

ExAcquireResourceSharedLite

ExGetExclusiveWaiterCount する

ExGetSharedWaiterCount する

ExInitializeResourceLite

ExIsResourceAcquiredExclusiveLite

ExReinitializeResourceLite

ExReleaseResourceForThreadLite

ExReleaseResourceLite

KeEnterCriticalRegion

KeLeaveCriticalRegion