StorPortAcquireSpinLock 関数 (storport.h)

StorPortAcquireSpinLock ルーチンは、指定されたスピン ロックを取得します。

構文

VOID StorPortAcquireSpinLock(
  [in]     PVOID             DeviceExtension,
  [in]     STOR_SPINLOCK     SpinLock,
  [in]     PVOID             LockContext,
  [in/out] PSTOR_LOCK_HANDLE LockHandle
);

パラメーター

[in] DeviceExtension

アダプターごとのミニポート ドライバーのデバイス拡張機能へのポインター。

[in] SpinLock

取得するスピン ロックを指定する STOR_SPINLOCK 型の列挙子値を指定します。 この関数の 場合、SpinLockDpcLockStartIoLock、または InterruptLock のいずれかである必要があります。 StorPortAcquireSpinLockEx を呼び出して、他の種類のスピン ロックを取得します。

[in] LockContext

SpinLockDpcLock に設定されている場合にロックが保持される DPC オブジェクトへのポインター。 SpinLockInterruptLock または StartIoLock のいずれかの型を示す場合、このメンバーは NULL にする必要があります。

[in/out] LockHandle

返されるとロック ハンドルを格納するバッファーへのポインター。 ロックを解放するには、呼び出し元がこのハンドルを StorPortReleaseSpinLock ルーチンに渡す必要があります。

戻り値

None

注釈

ミニポート ドライバーは、既に保持されているロックを取得したり、正しくない順序でロックを取得したりしないようにする必要があります。 これらの間違いのいずれかによって、システムのデッドロックが発生します。

特定のロックは、ミニポート ドライバーコールバック ルーチンを呼び出す前に、ポート ドライバーによって自動的に保持されます。 ミニポート ドライバーコールバック ルーチンごとに、次の表は、コールバック ルーチンを呼び出す前に、ポート ドライバーが自動的に取得するロックを示します。

ミニポート ドライバー ルーチン ポート ドライバーによって保持されるスピン ロック
HwStorFindAdapter None
HwStorInitialize 割り込み (物理ミニポート)、なし (仮想ミニポート)
HwStorInterrupt 割り込む
HwMSIInterruptRoutine 割り込む
HwStorStartIo StartIo (物理ミニポートのみ要求された同時実行チャネル <= 1)
HwStorBuildIo None
HwStorTimer Startio、割り込み (PORT_CONFIGURATION_INFORMATIONSynchronizationModel メンバーが StorSynchronizeHalfDuplex に設定されている場合)
HwStorResetBus Startio、割り込み (PORT_CONFIGURATION_INFORMATIONSynchronizationModel メンバーが StorSynchronizeHalfDuplex に設定されている場合)
HwStorAdapterControl なし。 (Windows Server 2003 では、コントロールの種類が ScsiStopAdapter の場合、StartIo スピン ロックが保持されていました)。
HwStorUnitControl None
HwStorTracingEnabled None
HwStorPassiveInitializeRoutine None
HwStorDpcRoutine None
HwStorStateChange Startio、割り込み (PORT_CONFIGURATION_INFORMATIONSynchronizationModel メンバーが StorSynchronizeHalfDuplex に設定されている場合)

スピン ロックは次の順序で取得する必要があるため、ポート ドライバーによって保持されるロックは、コールバック ルーチンを取得できるロックに影響します。

  • DPC または StartIo
  • 割り込む

たとえば、ポート ドライバーがコールバック ルーチンを呼び出す前に割り込みスピン ロックを取得した場合、DPCStartIo スピン ロックは割り込みスピン ロックよりも低い順序であるため、そのコールバック ルーチンは DPC または StartIo スピン ロックを取得できなくなります。 一方、ポート ドライバーがコールバック ルーチンを呼び出す前に StartIo スピン ロックを取得した場合、そのコールバック ルーチンは、実行時に 割り込み または DPC スピン ロックを取得できます。

次の表は、各ミニポート ドライバー ルーチンが取得できるスピン ロックを示しています。 ミニポート ドライバー ルーチンが StartIo スピン ロックと 割り込み スピン ロックの両方を取得する必要がある場合、ルーチンは常に 最初に StartIo スピン ロックを取得する必要があります。

ミニポート ドライバー ルーチン 許可されたスピン ロック
HwStorFindAdapter None
HwStorInitialize None
HwStorInterrupt None
HwMSIInterruptRoutine None
HwStorStartIo DPC、割り込み。 StartIo は、仮想ミニポート ドライバーで、または複数の同時実行チャネルを使用する物理ミニポート ドライバーから取得できることに注意してください。
HwStorBuildIo DPC、StartIo、割り込み
HwStorTimer 割り込み (PORT_CONFIGURATION_INFORMATIONSynchronizationModel メンバーが StorSynchronizeHalfDuplex に設定されていない場合)
HwStorResetBus 割り込み (PORT_CONFIGURATION_INFORMATIONSynchronizationModel メンバーが StorSynchronizeHalfDuplex に設定されていない場合)
HwStorAdapterControl DPC、StartIo、割り込み。 (Windows Server 2003 では、コントロールの種類が ScsiStopAdapter の場合、スピン ロックは許可されません)。
HwStorUnitControl DPC、StartIo、割り込み
HwStorTracingEnabled DPC、StartIo、割り込み
HwStorPassiveInitializeRoutine None
HwStorDpcRoutine DPC、StartIo、割り込み
HwStorStateChange 割り込み (PORT_CONFIGURATION_INFORMATIONSynchronizationModel メンバーが StorSynchronizeHalfDuplex に設定されていない場合)

Requirements

Requirement 価値
ターゲット プラットフォーム の 万国
Header storport.h (Storport.h を含む)
DDI コンプライアンス規則 を する StorPortSpinLock(storport)StorPortSpinLock3(storport)StorPortSpinLock4(storport)

こちらも参照ください

STOR_SPINLOCK

StorPortReleaseSpinLock