ExAcquireSharedStarveExclusive 関数 (wdm.h)

ExAcquireSharedStarveExclusive ルーチンは、同じリソースへの排他アクセスを取得する保留中の試行を待たずに、共有アクセス用の特定のリソースを取得します。

構文

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

パラメーター

[in, out] Resource

共有アクセス用に取得するリソースへのポインター。

[in] Wait

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

戻り値

要求されたアクセスが許可されている場合、ExAcquireSharedStarveExclusiveTRUE を返します。 このルーチンは、入力 WaitFALSE で、共有アクセスをすぐに許可できない場合に FALSE を返します。

注釈

呼び出し元に指定されたリソースへの共有アクセス権が付与されるかどうかは、次の内容によって異なります。

  • リソースが現在所有されていない場合、共有アクセスは現在のスレッドにすぐに付与されます。
  • 呼び出し元が (共有または排他アクセス用に) リソースを既に取得している場合、現在のスレッドには同じ種類のアクセスが再帰的に付与されます。 この呼び出しを行しても、指定されたリソースの呼び出し元の排他アクセスは共有アクセスに変換されないことに注意してください。
  • リソースが現在別のスレッドによって共有として所有されている場合、別のスレッドがそのリソースへの排他的アクセスを待機している場合でも、共有アクセスは呼び出し元にすぐに付与されます。
  • リソースが現在別のスレッドによって排他的として所有されている場合、呼び出し元は待機状態 (WAIT が TRUE に設定) に設定されるか、ExAcquireSharedStarveExclusiveFALSE を返します。
ExAcquireSharedStarveExclusive の呼び出し元は、排他アクセサーが冗長な作業を行うのを防ぐために、通常、共有リソースにすばやくアクセスする必要があります。 たとえば、キャッシュ マネージャーがリソースへの排他アクセス権を取得してキャッシュをディスクに書き込む前に、ファイル システムがこのルーチンを呼び出して、キャッシュに固定された BCB などのキャッシュされたリソースを変更できます。

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

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

要件

要件
サポートされている最小のクライアント Windows 2000 以降で使用できます。
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library 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