共用方式為


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。 否則,它會傳回狀態代碼,例如下列其中一項:

狀態碼 Description
STOR_STATUS_INVALID_PARAMETER 有一個參數無效。
STOR_STATUS_INVALID_IRQL 呼叫端在嘗試取得之 SpinLock 類型的 IRQL 無效。

備註

迷你埠驅動程式必須確保它們不會嘗試取得已持有的鎖定,或以不正確的順序取得鎖定。 其中一個錯誤會導致系統死結。

埠驅動程式會在呼叫迷你埠驅動程式回呼例程之前自動保留某些鎖定。 針對每個迷你埠驅動程式回呼例程,下表指出哪些鎖定埠驅動程式會在呼叫回呼例程之前自動取得。

迷你埠驅動程式例程 埠驅動程式所持有的微調鎖定
HwStorFindAdapter
HwStorInitialize (中斷實體迷你埠) 、無 (虛擬迷你埠)
HwStorInterrupt 中斷
HwMSIInterruptRoutine 中斷
HwStorStartIo 只有在要求並行通道 <= 1) 時,StartIo 才會 (實體迷你埠
HwStorBuildIo
HwStorTimer Startio (,當 synchronizationModel PORT_CONFIGURATION_INFORMATION 的 SynchronizationModel 成員設定為 StorSynchronizeHalfDuplex)
HwStorResetBus Startio (,當 synchronizationModel PORT_CONFIGURATION_INFORMATION 的 SynchronizationModel 成員設定為 StorSynchronizeHalfDuplex)
HwStorAdapterControl 無。 (在 Windows Server 2003 中,當控件類型為 ScsiStopAdapter.) 時,會保留 StartIo 微調鎖定
HwStorUnitControl
HwStorTracingEnabled
HwStorPassiveInitializeRoutine
HwStorDpcRoutine
HwStorStateChange Startio (,當 synchronizationModel PORT_CONFIGURATION_INFORMATION 的 SynchronizationModel 成員設定為 StorSynchronizeHalfDuplex)

埠驅動程式所持有的鎖定會影響允許取得回呼例程的鎖定,因為必須依照下列順序取得微調鎖定:

  • DPC 或 StartIo
  • 中斷

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

另請參閱

STOR_SPINLOCK

StorPortReleaseSpinLock