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
指向 DPC 对象的指针,如果 SpinLock 设置为 DpcLock,则为其保留锁。 如果 SpinLock 指示 InterruptLock 或 StartIoLock 的类型,则此成员应为 NULL。
[in/out] LockHandle
指向缓冲区的指针,该缓冲区在返回时将包含锁句柄。 若要释放锁,调用方必须将此句柄传递给 StorPortReleaseSpinLock 例程。
返回值
无
备注
微型端口驱动程序必须确保他们不会尝试获取已持有的锁或以错误顺序获取锁。 上述任一错误都将导致系统死锁。
某些锁在调用微型端口驱动程序回调例程之前由端口驱动程序自动保留。 对于每个微型端口驱动程序回调例程,下表指示在调用回调例程之前端口驱动程序自动获取的锁。
微型端口驱动程序例程 | 端口驱动程序持有的旋转锁 |
---|---|
HwStorFindAdapter | 无 |
HwStorInitialize | 中断 (物理微型端口) ,无 (虚拟微型端口) |
HwStorInterrupt | 中断 |
HwMSIInterruptRoutine | 中断 |
HwStorStartIo | 仅当请求的并发通道 <数 = 1 个) 时,StartIo 才 (物理微型端口 |
HwStorBuildIo | 无 |
HwStorTimer | Startio,当 PORT_CONFIGURATION_INFORMATION 的 SynchronizationModel 成员设置为 StorSynchronizeHalfDuplex 时中断 () |
HwStorResetBus | Startio,当 PORT_CONFIGURATION_INFORMATION 的 SynchronizationModel 成员设置为 StorSynchronizeHalfDuplex 时中断 () |
HwStorAdapterControl | 无。 (在 Windows Server 2003 中,当控件类型为 ScsiStopAdapter.) |
HwStorUnitControl | 无 |
HwStorTracingEnabled | 无 |
HwStorPassiveInitializeRoutine | 无 |
HwStorDpcRoutine | 无 |
HwStorStateChange | Startio,当 PORT_CONFIGURATION_INFORMATION 的 SynchronizationModel 成员设置为 StorSynchronizeHalfDuplex 时中断 () |
端口驱动程序持有的锁会影响允许回调例程获取的锁,因为必须按以下顺序获取旋转锁:
- DPC 或 StartIo
- 中断
例如,如果端口驱动程序在调用回调例程之前获取 中断 旋转锁,则该回调例程无法再获取 DPC 或 StartIo 旋转锁,因为 DPC 和 StartIo 旋转锁的顺序低于 中断 旋转锁。 另一方面,如果端口驱动程序在调用回调例程之前获取 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) |