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 的枚举器值,该值指定要获取的旋转锁。 对于此函数, SpinLock 必须是 DpcLockStartIoLockInterruptLock 之一。 调用 StorportAcquireSpinLockEx 以获取其他类型的旋转锁。

[in] LockContext

指向 DPC 对象的指针,如果 SpinLock 设置为 DpcLock,则为其保留锁。 如果 SpinLock 指示 InterruptLockStartIoLock 的类型,则此成员应为 NULL。

[in/out] LockHandle

指向缓冲区的指针,该缓冲区在返回时将包含锁句柄。 若要释放锁,调用方必须将此句柄传递给 StorPortReleaseSpinLock 例程。

返回值

备注

微型端口驱动程序必须确保他们不会尝试获取已持有的锁或以错误顺序获取锁。 上述任一错误都将导致系统死锁。

某些锁在调用微型端口驱动程序回调例程之前由端口驱动程序自动保留。 对于每个微型端口驱动程序回调例程,下表指示在调用回调例程之前端口驱动程序自动获取的锁。

微型端口驱动程序例程 端口驱动程序持有的旋转锁
HwStorFindAdapter
HwStorInitialize 中断 (物理微型端口) ,无 (虚拟微型端口)
HwStorInterrupt 中断
HwMSIInterruptRoutine 中断
HwStorStartIo 仅当请求的并发通道 <数 = 1 个) 时,StartIo 才 (物理微型端口
HwStorBuildIo
HwStorTimer Startio,当 PORT_CONFIGURATION_INFORMATIONSynchronizationModel 成员设置为 StorSynchronizeHalfDuplex 时中断 ()
HwStorResetBus Startio,当 PORT_CONFIGURATION_INFORMATIONSynchronizationModel 成员设置为 StorSynchronizeHalfDuplex 时中断 ()
HwStorAdapterControl 无。 (在 Windows Server 2003 中,当控件类型为 ScsiStopAdapter.)
HwStorUnitControl
HwStorTracingEnabled
HwStorPassiveInitializeRoutine
HwStorDpcRoutine
HwStorStateChange Startio,当 PORT_CONFIGURATION_INFORMATIONSynchronizationModel 成员设置为 StorSynchronizeHalfDuplex 时中断 ()

端口驱动程序持有的锁会影响允许回调例程获取的锁,因为必须按以下顺序获取旋转锁:

  • DPC 或 StartIo
  • 中断

例如,如果端口驱动程序在调用回调例程之前获取 中断 旋转锁,则该回调例程无法再获取 DPCStartIo 旋转锁,因为 DPCStartIo 旋转锁的顺序低于 中断 旋转锁。 另一方面,如果端口驱动程序在调用回调例程之前获取 StartIo 旋转锁,该回调例程在执行时仍可能获取 中断DPC 旋转锁。

下表指示每个微型端口驱动程序例程可以获取的旋转锁。 在微型端口驱动程序例程必须同时获取 StartIo 旋转锁和 中断 旋转锁的情况下,例程必须始终首先获取 StartIo 旋转锁。

微型端口驱动程序例程 允许的旋转锁
HwStorFindAdapter
HwStorInitialize
HwStorInterrupt
HwMSIInterruptRoutine
HwStorStartIo DPC,中断。 请注意,StartIo 可以在虚拟微型端口驱动程序中获取,也可以从使用多个并发通道的物理微型端口驱动程序获取。
HwStorBuildIo DPC、StartIo、中断
HwStorTimer PORT_CONFIGURATION_INFORMATION 的SynchronizationModel 成员未设置为 StorSynchronizeHalfDuplex 时中断 ()
HwStorResetBus PORT_CONFIGURATION_INFORMATION 的SynchronizationModel 成员未设置为 StorSynchronizeHalfDuplex 时中断 ()
HwStorAdapterControl DPC、StartIo、中断。 (在 Windows Server 2003 中,当控件类型为 ScsiStopAdapter.)
HwStorUnitControl DPC、StartIo、中断
HwStorTracingEnabled DPC、StartIo、中断
HwStorPassiveInitializeRoutine
HwStorDpcRoutine DPC、StartIo、中断
HwStorStateChange PORT_CONFIGURATION_INFORMATION 的SynchronizationModel 成员未设置为 StorSynchronizeHalfDuplex 时中断 ()

要求

要求
目标平台 通用
标头 storport.h (包括 Storport.h)
DDI 符合性规则 StorPortSpinLock (storport) StorPortSpinLock3 (storport) StorPortSpinLock4 (storport)

另请参阅

STOR_SPINLOCK

StorPortReleaseSpinLock