共用方式為


IWDFInterrupt::AcquireInterruptLock 方法 (wudfddi.h)

[警告: UMDF 2 是最新版的 UMDF,並取代 UMDF 1。 所有新的 UMDF 驅動程式都應該使用 UMDF 2 來撰寫。 未將新功能新增至 UMDF 1,而且較新版本的 Windows 10 上不支援 UMDF 1。 通用 Windows 驅動程式必須使用 UMDF 2。 如需詳細資訊,請參閱使用 UMDF 使用者入門。]

AcquireInterruptLock 方法會開始程式代碼序列,在保存中斷對象的鎖定時執行。

Syntax

void AcquireInterruptLock();

傳回值

備註

當驅動程式呼叫 AcquireInterruptLock 時,系統會取得架構的中斷鎖定。

當驅動程式呼叫 ReleaseInterruptLock 時,系統會釋放中斷鎖定。

如果您的驅動程式必須執行幾行程式代碼,而不需先佔,且中斷服務已停用,您可以使用 AcquireInterruptLockReleaseInterruptLock

在架構呼叫驅動程式的 OnInterruptEnable 回呼函式或架構呼叫驅動程式的 OnInterruptDisable 回呼函式之後,您的驅動程式無法呼叫 AcquireInterruptLock

在驅動程式呼叫 AcquireInterruptLock 之後,在呼叫 ReleaseInterruptLock 之前,它不得針對相同的中斷物件再次呼叫 方法。

在任意線程中執行時,例如 I/O 佇列回呼方法,驅動程式必須呼叫 IWDFInterrupt::TryToAcquireInterruptLock ,而不是 IWDFInterrupt::AcquireInterruptLock。 例如,驅動程式會從IQueueCallbackRead::OnRead 呼叫 IWDFInterrupt::TryToAcquireInterruptLock

這麼做可避免死結的可能性,如下列案例所述。

  1. 為了判斷其裝置是否中斷,UMDF 會從其ISR內將I/O傳送至其總線,並保留中斷鎖定。
  2. 總線驅動程式會在收到上述要求的相同線程中完成第二個要求。
  3. 第二個要求的完成例程會將要求傳送至 UMDF 驅動程式。
  4. UMDF 驅動程式的 I/O 發送例程會呼叫 IWDFInterrupt::AcquireInterruptLock,然後死結嘗試取得中斷鎖定。
驅動程式不得嘗試以遞歸方式取得鎖定。 如果連線到調試程序,架構就會在此案例中引進斷點。

如需手動中斷鎖定的詳細資訊,請參閱 同步處理中斷程序代碼

如需在 UMDF 驅動程式中處理中斷的詳細資訊,請參閱 存取硬體和處理中斷

規格需求

需求
終止支援 UMDF 2.0 和更新版本中無法使用。
目標平台 桌面
最低UMDF版本 1.11
標頭 wudfddi.h
Dll WUDFx.dll

另請參閱

IWDFInterrupt

IWDFInterrupt::ReleaseInterruptLock

WdfInterruptAcquireLock