共用方式為


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 必須是下列其中一項: DpcLockStartIoLockInterruptLock。 呼叫 StorportAcquireSpinLockEx 以取得其他類型的微調鎖定。

[in] LockContext

如果 SpinLock 設定為 DpcLock,則會保留鎖定的 DPC 物件的指標。 如果 SpinLock 指出 InterruptLockStartIoLock 的類型,這個成員應該是 NULL。

[in/out] LockHandle

傳回時緩衝區的指標將包含鎖定句柄。 若要釋放鎖定,呼叫端必須將此句柄傳遞至 StorPortReleaseSpinLock 例程。

傳回值

備註

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

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

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

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

  • DPC 或 StartIo
  • 中斷

例如,如果埠驅動程式在呼叫回呼例程之前取得 中斷 微調鎖定,該回呼例程就無法再取得 DPCStartIo 微調鎖定,因為 DPCStartIo 微調鎖定的順序低於 中斷 微調鎖定的順序。 另一方面,如果埠驅動程式在呼叫回呼例程之前取得 StartIo 微調鎖定,該回呼例程在執行時,仍然可以取得 中斷DPC 微調鎖定。

下表指出每個迷你埠驅動程式例程可以取得的微調鎖定。 在迷你埠驅動程式例程必須同時取得 StartIo 微調鎖定和 中斷 微調鎖定的情況下,例程一律必須先取得 StartIo 微調鎖定。

Miniport 驅動程式例程 允許的微調鎖定
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) 時中斷 (

規格需求

需求
目標平台 Universal
標頭 storport.h (包含 Storport.h)
DDI 合規性規則 StorPortSpinLock (storport) StorPortSpinLock3 (storport) StorPortSpinLock4 (storport)

另請參閱

STOR_SPINLOCK

StorPortReleaseSpinLock