StorPortAcquireSpinLockEx 函数 (storport.h)

StorPortAcquireSpinLockEx 例程获取指定的旋转锁。

语法

ULONG StorPortAcquireSpinLockEx(
  PVOID             HwDeviceExtension,
  STOR_SPINLOCK     SpinLock,
  PVOID             LockContext,
  PSTOR_LOCK_HANDLE LockHandle
);

参数

HwDeviceExtension

[in]指向每个适配器设备扩展的微型端口驱动程序的指针。

SpinLock

[in]指定要获取的旋转锁的 STOR_SPINLOCK 类型的枚举器值。

LockContext

[in]如果 SpinLock 设置为 DpcLock,则指向锁定的 DPC 对象的指针。 如果 SpinLock 指示 InterruptLock 类型或 StartIoLock,则此成员应为 NULL。

LockHandle

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

返回值

StorPortAcquireSpinLockEx 成功获取旋转锁时返回STOR_STATUS_SUCCESS。 否则,它将返回如下状态代码之一:

状态代码 描述
STOR_STATUS_INVALID_PARAMETER 参数无效。
STOR_STATUS_INVALID_IRQL 调用方在尝试获取的 SpinLock 类型 的 IRQL 无效。

言论

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

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

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

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

  • DPC 或 StartIo
  • 中断

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

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

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

要求

要求 价值
最低支持的客户端 Windows 10 版本 1809
标头 storport.h

另请参阅

STOR_SPINLOCK

StorPortReleaseSpinLock