次の方法で共有


FltAcquirePushLockShared 関数 (fltkernel.h)

FltAcquirePushLockShared ルーチンは、呼び出し元のスレッドによる共有アクセスに対して、指定されたプッシュ ロックを取得します。

構文

VOID FLTAPI FltAcquirePushLockShared(
  [in, out] PEX_PUSH_LOCK PushLock
);

パラメーター

[in, out] PushLock

PEX_PUSH_LOCK型の不透明なプッシュ ロック ポインター。 このポインターは、 FltInitializePushLock の以前の呼び出しによって初期化されている必要があります。

戻り値

[なし] :

解説

FltAcquirePushLockShared ルーチンは、呼び出し元のスレッドによる共有アクセスに対して、指定されたプッシュ ロックを取得します。

プッシュ ロックは、共有アクセスまたは排他アクセス用に取得できる点で、ERESOURCE 構造体 (リソースとも呼ばれます) に似ています。 プッシュ ロックの詳細については、 FltInitializePushLock のリファレンス エントリを参照してください。

ERESOURCE 構造体とは異なり、プッシュ ロックを再帰的に取得することはできません。 呼び出し元が排他アクセスのプッシュ ロックを既に取得している場合、システムはハングします。 呼び出し元が既に共有アクセスのプッシュ ロックを取得している場合は、再び共有アクセスを受信できます。 ただし、 FltAcquirePushLockShared の各呼び出しは、 FltReleasePushLock の後続の呼び出しと一致する必要があります。

呼び出し元に、指定されたプッシュ ロックへの共有アクセス権が付与されるタイミングは、次に依存します。

  • プッシュ ロックが現在所有されていない場合は、現在のスレッドに対してすぐに共有アクセスが許可されます。

  • 別のスレッドによる共有アクセスに対してプッシュ ロックが既に取得されていて、プッシュ ロックへの排他アクセスを待機しているスレッドがない場合、共有アクセスはすぐに呼び出し元に付与されます。 排他ウェイターがある場合、呼び出し元は待機状態になります。

  • 別のスレッドによる排他アクセスのためにプッシュ ロックが既に取得されている場合、または排他アクセスを待機している別のスレッドがある場合、現在のスレッドは、プッシュ ロックを取得できるようになるまで待機状態になります。

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

プッシュ ロックを取得した後で解放するには、 FltReleasePushLock を呼び出します。 FltAcquirePushLockShared に対するすべての呼び出しは、FltReleasePushLock の後続の呼び出しと一致する必要があります。

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

プッシュ ロックを初期化するには、 FltInitializePushLock を呼び出します。

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

要件

要件
対象プラットフォーム ユニバーサル
Header fltkernel.h (Fltkernel.h を含む)
Library FltMgr.lib
IRQL <= APC_LEVEL

こちらもご覧ください

FltAcquirePushLockExclusive

FltAcquirePushLockSharedEx

FltDeletePushLock

FltInitializePushLock

FltReleasePushLock

FsRtlEnterFileSystem

KeEnterCriticalRegion