次の方法で共有


FltAcquireResourceExclusive 関数 (fltkernel.h)

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

構文

VOID FLTAPI FltAcquireResourceExclusive(
  [in/out] PERESOURCE Resource
);

パラメーター

[in/out] Resource

不透明な ERESOURCE 構造体へのポインター。 この構造体は、非ページ プールから呼び出し元によって割り当てられ 、ExInitializeResourceLite または ExReinitializeResourceLite を呼び出すことによって初期化される必要があります。

戻り値

なし

解説

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

次の状況では、呼び出し元に特定のリソースへの排他アクセス権が与えられるかどうかを判断します。

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

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

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

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

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

FltAcquireResourceExclusive は、通常のカーネル APC 配信を無効にする ExAcquireResourceExclusiveLite のラッパーです。

FltAcquireResourceExclusive は通常のカーネル APC 配信を無効にするため、FltAcquireResourceExclusive を呼び出す前に KeEnterCriticalRegion または FsRtlEnterFileSystem を呼び出す必要はありません。

取得後にリソースを解放するには、 FltReleaseResource を呼び出します。 FltAcquireResourceExclusive への呼び出しが成功するたびに、FltReleaseResource の後続の呼び出しと一致する必要があります。

共有アクセス用のリソースを取得するには、 FltAcquireResourceShared を呼び出します。

システムのリソース リストからリソースを削除するには、 ExDeleteResourceLite を呼び出します。

再利用のためにリソースを初期化するには、 ExReinitializeResourceLite を呼び出します。

ERESOURCE 構造体の詳細については、「 ERESOURCE ルーチンの概要」を参照してください。

要件

要件
サポートされている最小のクライアント Windows XP SP2
サポートされている最小のサーバー Windows Server 2003 SP1
Header fltkernel.h
Library FltMgr.lib
IRQL IRQL <= APC_LEVEL