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、Interrupt (當 SynchronizationModelPORT_CONFIGURATION_INFORMATION 成員設定為 StorSynchronizeHalfDuplex時) |
HwStorResetBus | Startio、Interrupt (當 SynchronizationModelPORT_CONFIGURATION_INFORMATION 成員設定為 StorSynchronizeHalfDuplex時) |
HwStorAdapterControl | 沒有。 (在 Windows Server 2003 中,當控件類型為 ScsiStopAdapter 時,StartIo 微調鎖定已保留。 |
HwStorUnitControl | 沒有 |
HwStorTracingEnabled | 沒有 |
HwStorPassiveInitializeRoutine | 沒有 |
HwStorDpcRoutine | 沒有 |
HwStorStateChange | Startio、Interrupt (當 SynchronizationModelPORT_CONFIGURATION_INFORMATION 成員設定為 StorSynchronizeHalfDuplex時) |
埠驅動程式持有的鎖定會影響允許擷取回呼例程的鎖定,因為微調鎖定必須依下列順序取得:
- DPC 或 StartIo
- 中斷
例如,如果埠驅動程式在呼叫回呼例程之前取得 中斷 微調鎖定,該回呼例程就無法再取得 DPC 或 StartIo 微調鎖定,因為 DPC 和 StartIo 微調鎖定的順序低於 中斷 微調鎖定。 另一方面,如果埠驅動程式在呼叫回呼例程之前取得 StartIo 微調鎖定,該回呼例程在執行時,仍然可以取得 中斷 或 DPC 微調鎖定。
下表指出每個迷你埠驅動程式例程可以取得哪些微調鎖定。 在迷你埠驅動程式例程必須同時取得 StartIo 微調鎖定和 中斷 微調鎖定的情況下,例程一律必須先取得 StartIo 微調鎖定。
迷你埠驅動程式例程 | 允許的微調鎖定 |
---|---|
HwStorFindAdapter | 沒有 |
HwStorInitialize | 沒有 |
HwStorInterrupt | 沒有 |
HwMSIInterruptRoutine | 沒有 |
HwStorStartIo | DPC,插斷。 請注意,StartIo 可以在虛擬迷你埠驅動程式中取得,或是從使用多個並行通道的實體迷你埠驅動程式取得。 |
HwStorBuildIo | DPC、StartIo、Interrupt |
HwStorTimer | 中斷 (當 SynchronizationModel 成員 PORT_CONFIGURATION_INFORMATION 未設定 為 storSynchronizeHalfDuplex時) |
HwStorResetBus | 中斷 (當 SynchronizationModel 成員 PORT_CONFIGURATION_INFORMATION 未設定 為 storSynchronizeHalfDuplex時) |
HwStorAdapterControl | DPC、StartIo、Interrupt。 (在 Windows Server 2003 中,當控件類型為 ScsiStopAdapter 時,不允許任何微調鎖定。 |
HwStorUnitControl | DPC、StartIo、Interrupt |
HwStorTracingEnabled | DPC、StartIo、Interrupt |
HwStorPassiveInitializeRoutine | 沒有 |
HwStorDpcRoutine | DPC、StartIo、Interrupt |
HwStorStateChange | 中斷 (當 SynchronizationModel 成員 PORT_CONFIGURATION_INFORMATION 未設定 為 storSynchronizeHalfDuplex時) |
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 10 版本 1809 |
標頭 | storport.h |