共用方式為


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 指出一種類型為 InterruptLockStartIoLock,則此成員應該是 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
  • 中斷

例如,如果埠驅動程式在呼叫回呼例程之前取得 中斷 微調鎖定,該回呼例程就無法再取得 DPCStartIo 微調鎖定,因為 DPCStartIo 微調鎖定的順序低於 中斷 微調鎖定。 另一方面,如果埠驅動程式在呼叫回呼例程之前取得 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

另請參閱

STOR_SPINLOCK

StorPortReleaseSpinLock