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]指向 DPC 对象的指针,如果 SpinLock 设置为 DpcLock,则为其保留锁。 如果 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 | 仅当请求的并发通道 <数 = 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 时中断 () |
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 10 版本 1809 |
标头 | storport.h |