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 必须是:DpcLock、StartIoLock或 InterruptLock之一。 调用 StorportAcquireSpinLockEx 以获取其他类型的旋转锁。
[in] LockContext
如果 SpinLock 设置为 DpcLock,则指向锁定的 DPC 对象的指针。 如果 SpinLock 指示 InterruptLock 类型或 StartIoLock,则此成员应为 NULL。
[in/out] LockHandle
指向返回的缓冲区的指针将包含锁句柄。 若要释放锁,调用方必须将此句柄传递给 StorPortReleaseSpinLock 例程。
返回值
没有
言论
微型端口驱动程序必须确保它们不会尝试获取已持有的锁或按不正确的顺序获取锁。 其中任一错误都将导致系统死锁。
某些锁在调用微型端口驱动程序回调例程之前由端口驱动程序自动保留。 对于每个微型端口驱动程序回调例程,下表指示在调用回调例程之前,端口驱动程序会自动获取哪些锁。
微型端口驱动程序例程 | 端口驱动程序持有的旋转锁 |
---|---|
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
- 中断
例如,如果端口驱动程序在调用回调例程之前获取 中断 旋转锁,该回调例程将无法再获取 DPC 或 StartIo 旋转锁,因为 DPC 和 StartIo 旋转锁的顺序低于 中断 旋转锁。 另一方面,如果端口驱动程序在调用回调例程之前获取 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) |
要求
要求 | 价值 |
---|---|
目标平台 | 普遍 |
标头 | storport.h (包括 Storport.h) |
DDI 符合性规则 | StorPortSpinLock(storport),StorPortSpinLock3(storport),StorPortSpinLock4(storport) |