次の方法で共有


ExAcquirePushLockShared マクロ (wdm.h)

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

構文

void ExAcquirePushLockShared(
   Lock
);

パラメーター

Lock

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

戻り値

なし

解説

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

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

取得後にプッシュ ロックを解放するには、 ExReleasePushLockShared を呼び出します。 ExAcquirePushLockShared への各呼び出しは、ExReleasePushLockShared の後続の呼び出しと一致する必要があります。

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

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

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

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

このルーチンを呼び出す前に、ドライバー は KeEnterCriticalRegion を呼び出すことによって、通常のカーネル APC 配信を無効にする必要があります。 KeLeaveCriticalRegion を呼び出して、プッシュ ロックが解除された後に配信を再び有効にできます。 詳細については、「 APC の無効化」を参照してください。

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

要件

要件
サポートされている最小のクライアント Windows 10 Version 1809
Header wdm.h

こちらもご覧ください

ExInitializePushLock

KeEnterCriticalRegion

ExReleasePushLockShared

ExAcquirePushLockExclusive