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 構造体のユーザーは 、ExIsResourceAcquiredExclusiveLite などのルーチンを呼び出して、現在のスレッドがリソースに排他的にアクセスできるかどうかを判断できます)。
-
同じ理由から、デバッグ時にプッシュ ロックの現在の所有者を決定し、デッドロックを診断するためのサポート拡張機能はありません。 (ERESOURCE 構造体のユーザーは、kd または windbg の拡張機能を
!locks
使用してこれを見つけることができます。 - プッシュ ロックによるデッドロックの早期診断に役立つドライバー検証ツールのサポートはありません。
- 排他プッシュ ロックを再帰的に取得することはできません。
- プッシュ ロックは、主に共有アクセス用に取得される場合、ERESOURCE 構造体よりも効率的です。
- プッシュ・ロック用のストレージは、ページ・プールまたは非ページ・プールから割り振ることができます。 ERESOURCE 構造体は、非ページ プールからのみ割り当てる必要があります。
- EX_PUSH_LOCK構造体は、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 |
こちらもご覧ください
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示