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 必須是下列其中一項: DpcLock、 StartIoLock 或 InterruptLock。 呼叫 StorportAcquireSpinLockEx 以取得其他類型的微調鎖定。
[in] LockContext
如果 SpinLock 設定為 DpcLock,則會保留鎖定的 DPC 物件的指標。 如果 SpinLock 指出 InterruptLock 或 StartIoLock 的類型,這個成員應該是 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
- 中斷
例如,如果埠驅動程式在呼叫回呼例程之前取得 中斷 微調鎖定,該回呼例程就無法再取得 DPC 或 StartIo 微調鎖定,因為 DPC 和 StartIo 微調鎖定的順序低於 中斷 微調鎖定的順序。 另一方面,如果埠驅動程式在呼叫回呼例程之前取得 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) |