次の方法で共有


FltInitializePushLock 関数 (fltkernel.h)

FltInitializePushLock ルーチンは、プッシュ ロック変数を初期化します。

構文

VOID FLTAPI FltInitializePushLock(
  [out] PEX_PUSH_LOCK PushLock
);

パラメーター

[out] PushLock

プッシュ ロック変数を初期化するには、呼び出し元から提供されるストレージへのポインター 。 少なくとも sizeof(EX_PUSH_LOCK)の値である必要があります。 ストレージは、32 ビット プラットフォームでは 4 バイトアラインメントされ、64 ビット プラットフォームでは 8 バイトアラインされている必要があります。

戻り値

なし

解説

プッシュ ロックは、ファイル システム ミニフィルターに適した選択肢になることはほとんどありません。 以下で説明するように、それらの特性の一部は、ファイル システムの本質的に再入可能な性質と互換性がない可能性があります。

プッシュ ロックは、次の方法で ERESOURCE 構造体 ("リソース" とも呼ばれます) に似ています。

  • プッシュ ロックは、一連のスレッドによる同期に使用できます。
  • プッシュ ロックは、共有アクセスまたは排他アクセス用に取得できます。
  • 呼び出し元はプッシュ ロック変数のストレージを提供しますが、EX_PUSH_LOCK構造体は不透明です。つまり、そのメンバーはシステム使用用に予約されています。
ERESOURCE 構造体と比較すると、プッシュ ロックには次の欠点があります。
  • 排他的アクセスを許可するためのアルゴリズムは、すべてのスレッドに公平ではありません。 排他ロック競合のレベルが高い場合、スレッドに排他アクセスが許可される順序に関する保証はありません。
  • 実行時にプッシュ ロックの現在の所有者を決定するためのサポート ルーチンはありません。 (ERESOURCE 構造体のユーザーは 、ExIsResourceAcquiredExclusiveLite などのルーチンを呼び出して、現在のスレッドがリソースに排他的にアクセスできるかどうかを判断できます)。
  • 同じ理由から、デバッグ時にプッシュ ロックの現在の所有者を決定し、デッドロックを診断するためのサポート拡張機能はありません。 (ERESOURCE 構造体のユーザーは、kd または windbg の拡張機能を !locks 使用してこれを見つけることができます。
  • プッシュ ロックによるデッドロックの早期診断に役立つドライバー検証ツールのサポートはありません。
  • 排他プッシュ ロックを再帰的に取得することはできません。
プッシュ ロックには、ERESOURCE 構造体よりも次の利点があります。
  • プッシュ ロックは、主に共有アクセス用に取得される場合、ERESOURCE 構造体よりも効率的です。
  • プッシュ・ロック用のストレージは、ページ・プールまたは非ページ・プールから割り振ることができます。 ERESOURCE 構造体は、非ページ プールからのみ割り当てる必要があります。
  • EX_PUSH_LOCK構造体は、ERESOURCE 構造体よりもはるかに小さくなります。
これらの利点のいずれかが魅力的でない限り、ERESOURCE は通常、読み取り/書き込み同期の問題に対するより堅牢で保守可能なソリューションです。

排他アクセスのプッシュ ロックを取得するには、 FltAcquirePushLockExclusive を呼び出します。

共有アクセスのプッシュ ロックを取得するには、 FltAcquirePushLockShared を呼び出します。

プッシュ ロックを解放するには、 FltReleasePushLock を呼び出します。

プッシュ ロックを削除するには、 FltDeletePushLock を呼び出します。

要件

要件
サポートされている最小のクライアント このルーチンは、Microsoft Windows XP SP2、Microsoft Windows Server 2003 SP1 以降で使用できます。
対象プラットフォーム ユニバーサル
Header fltkernel.h (Fltkernel.h を含む)
Library FltMgr.lib
[DLL] Fltmgr.sys
IRQL <= APC_LEVEL

こちらもご覧ください

ExIsResourceAcquiredExclusiveLite

FltAcquirePushLockExclusive

FltAcquirePushLockShared

FltDeletePushLock

FltReleasePushLock