Share via


MINIPORT_SYNCHRONIZE_INTERRUPT回呼函式 (ndis.h)

如果任何以小於 DIRQL 執行的驅動程式函式與 MiniportInterrupt 函式共用資源,迷你埠驅動程式必須提供 MiniportSynchronizeInterrupt 處理程式。

對於訊息訊號中斷,如果任何在小於 DIRQL 執行的驅動程式函式與 MiniportMessageInterrupt 函式與 MiniportMessageInterrupt 函式一起發出訊號的中斷,迷你埠驅動程式會提供 MiniportSynchronizeMessageInterrupt 處理程式。

注意 您必須使用非訊息訊號中斷 的MINIPORT_SYNCHRONIZE_INTERRUPT 類型,或使用訊息訊號中斷的 MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT 類型來宣告此函式。 如需詳細資訊,請參閱下列範例一節。
 

語法

MINIPORT_SYNCHRONIZE_INTERRUPT MiniportSynchronizeInterrupt;

BOOLEAN MiniportSynchronizeInterrupt(
  [in] NDIS_HANDLE SynchronizeContext
)
{...}

參數

[in] SynchronizeContext

當迷你埠驅動程式的 MiniportXxx 或內部函式呼叫 時所提供的內容區域句柄 NdisMSynchronizeWithInterruptEx 函 式。

傳回值

MiniportSynchronizeInterrupt 會傳回布爾值,其中包含驅動程式決定的意義。 當 NDIS 從 NdisMSynchronizeWithInterruptEx 傳回時,NDIS 會傳回相同的值。

備註

注意 本節中的資訊也可以藉由替代 「MiniportMessageInterrupt」 的 “MiniportInterrupt” 取代 “MiniportSynchronizeInterrupt”,以及替代 “MiniportSynchronizeInterrupt” 來套用至訊息訊號中斷。
 
如果任何以小於 DIRQL 執行的迷你埠驅動程式函式會與驅動程式的 MiniportInterrupt 函式共用資源,例如 NIC 快取器,該驅動程式就無法直接存取這些資源。 如果這類較低優先順序的函式嘗試直接存取共用資源, MiniportInterrupt 可能會先佔,這可能會覆寫較低優先順序驅動程式函式的狀態變更。

若要使用 MiniportInterrupt同步存取共用資源,較低優先順序的驅動程式函式必須呼叫 NdisMSynchronizeWithInterruptEx 函 式。 驅動程式的 MiniportSynchronizeInterrupt 函式會存取 DIRQL 上的共享資源。 呼叫 NdisMSynchronizeWithInterruptEx 可防止這類迷你埠驅動程式中的競爭狀況和死結。

在 DIRQL () 上執行的任何較低優先順序驅動程式函式彼此共用資源,但與在 DIRQL) 上執行的任何函式,都應該使用微調鎖定來保護這些共用資源。

當驅動程式的 MiniportInitializeEx 函式呼叫 時,MiniportSynchronizeInterrupt 會在指派的 DIRQL 上執行 NdisMRegisterInterruptEx 函 式。 就像在 DIRQL 上執行的任何驅動程式函式一樣, MiniportSynchronizeInterrupt 應該儘快將控制權傳回給呼叫端,而且只能呼叫安全在任何 IRQL 呼叫的 NdisXxx 函式。

例子

若要定義 MiniportSynchronizeInterrupt 函式,您必須先提供函式宣告來識別您要定義的函式類型。 Windows 提供一組驅動程式的函式類型。 使用函式類型宣告函式有助於 驅動程式的程式代碼分析靜態驅動程式驗證程式 (SDV) ,以及其他驗證工具尋找錯誤,而且是撰寫 Windows 作業系統驅動程式的需求。

例如,若要定義名為 「 MySynchronizeInterrupt」 的 MiniportSynchronizeInterrupt 函式,請使用 MINIPORT_SYNCHRONIZE_INTERRUPT 類型,如下列程式代碼範例所示:

MINIPORT_SYNCHRONIZE_INTERRUPT MySynchronizeInterrupt;

然後,實作您的函式,如下所示:

_Use_decl_annotations_
BOOLEAN
 MySynchronizeInterrupt(
    NDIS_HANDLE  SynchronizeContext
    )
  {...}

若要針對訊息訊號中斷定義 MiniportSynchronizeMessageInterrupt 函式,請使用 MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT 類型,如下列程式代碼範例所示:

MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT MySynchronizeMessageInterrupt;

然後,實作您的函式,如下所示:

_Use_decl_annotations_
BOOLEAN
 MySynchronizeMessageInterrupt(
    NDIS_HANDLE  SynchronizeContext
    )
  {...}

MINIPORT_SYNCHRONIZE_INTERRUPTMINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT函式類型定義於 Ndis.h 頭檔中。 若要在執行程式代碼分析工具時更精確地識別錯誤,請務必將 Use_decl_annotations 註釋新增至函式定義。 Use_decl_annotations批註可確保會使用套用至頭檔中函式類型的註釋。 如需函數宣告需求的詳細資訊,請參閱 使用 NDIS 驅動程式的函式角色類型來宣告函式。

如需 Use_decl_annotations的詳細資訊,請參閱 標註函式行為

規格需求

需求
最低支援的用戶端 NDIS 6.0 和更新版本支援。
目標平台 Windows
標頭 ndis.h (包含 Ndis.h)
IRQL 請參閱一節

另請參閱

MiniportInetrrupt

MiniportInitializeEx

NdisAllocateSpinLock

NdisMRegisterInterruptEx

NdisMSynchronizeWithInterruptEx