共用方式為


MINIPORT_SHUTDOWN回呼函式 (ndis.h)

NDIS 會在系統關閉時呼叫迷你埠驅動程式的 MiniportShutdownEx 函式。 此函式會將迷你埠置於關機狀態,其中不會發生任何其他回呼(包括 MiniportHaltEx)。 如需迷你連接埠驅動程式狀態的詳細資訊,請參閱 Miniport 配接器狀態和作業

Note 您必須使用 MINIPORT_SHUTDOWN 類型來宣告函式。 如需詳細資訊,請參閱下列範例一節。
 

語法

MINIPORT_SHUTDOWN MiniportShutdown;

void MiniportShutdown(
  [in] NDIS_HANDLE MiniportAdapterContext,
  [in] NDIS_SHUTDOWN_ACTION ShutdownAction
)
{...}

參數

[in] MiniportAdapterContext

迷你埠驅動程式在其 MiniportInitializeEx 函式中配置的內容區域句柄。 驅動程式會使用此內容區域來維護迷你埠配接器的狀態資訊。

[in] ShutdownAction

NDIS 呼叫 shutdown 函式的原因。 下列值有效:

NdisShutdownPowerOff

表示 NDIS 稱為 MiniportShutdownEx,因為系統正在關閉。

NdisShutdownBugCheck

表示 NDIS 因為發生系統錯誤,MiniportShutdownEx

傳回值

沒有

言論

驅動程式會在呼叫 時指定 MiniportShutdownEx 進入點 NdisMRegisterMiniportDriver 函式。

MiniportShutdownEx 會將迷你埠配接器還原為已知的初始狀態(NDIS 之前的狀態稱為迷你埠驅動程式的 MiniportInitializeEx 函式。 這可確保迷你埠適配卡處於已知狀態,並準備好在發生系統關機后重新啟動計算機時重新初始化,包括無法復原的系統錯誤。

MiniportShutdownEx 可以藉由呼叫 NdisMGetBusDataNdisMSetBusData 函式來讀取或寫入 I/O 埠、記憶體對應裝置 I/O 空間或總線特定設定空間,讓硬體安全重新啟動。

如果 NDIS 因為無法復原的錯誤而呼叫 MiniportShutdownEx,則 ShutdownAction 參數會設定為 NdisShutdownBugCheck,且 MiniportShutdownEx 在高 IRQL 執行。 在此情況下,迷你埠驅動程式不得呼叫任何 NdisXxx 函式,但可以在任何 IRQL 呼叫的函式除外。

如果 NDIS 因為使用者起始關機而呼叫 MiniportShutdownExMiniportShutdownEx 在 IRQL = PASSIVE_LEVEL 執行,而迷你埠驅動程式可以呼叫其他 NdisXxx 函式。

如果 NDIS 因為無法復原的錯誤而呼叫 MiniportShutdownEx,則 ShutdownAction 參數會設定為 NdisShutdownBugCheck,且 MiniportShutdownEx 在高 IRQL 執行。 在此情況下,迷你埠驅動程式不得呼叫任何 NdisXxx 函式,但可以在任何 IRQL 呼叫的函式除外。 從 NDIS 6.30 迷你埠開始,除非迷你埠在其配接器註冊屬性中提供 NDIS_MINIPORT_ATTRIBUTES_REGISTER_BUGCHECK_CALLBACK 旗標,否則 NDIS 不會在 BugCheck 期間呼叫 MiniportShutdownEx

如果 ShutdownAction 的值是 NdisShutdownPowerOff,迷你埠驅動程式可能會選擇性地釋放其資源。 不過,這既不需要也不鼓勵,因為系統關機不需要。

如果 ShutdownAction 的值是 NdisShutdownBugCheck,則迷你埠驅動程式不得釋放其資源。

重要 如果 MiniportHaltEx 造成系統錯誤,則 miniport 驅動程式會看到 MiniportShutdownEx 的巢狀呼叫,ShutdownActionNdisShutdownBugCheck。 在此情況下,MiniportShutdownEx 應該立即傳回,而不需要進行任何工作。

 

範例

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

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

MINIPORT_SHUTDOWN MyShutdownEx;

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

_Use_decl_annotations_
VOID
 MyShutdownEx(
    NDIS_HANDLE  MiniportAdapterContext,
    NDIS_SHUTDOWN_ACTION  ShutdownAction
    )
  {...}

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

如需 Use_decl_annotations的相關信息,請參閱 批注函式行為

要求

要求 價值
最低支援的用戶端 NDIS 6.0 和更新版本支援。
目標平臺 窗戶
標頭 ndis.h (包括 Ndis.h)
IRQL 請參閱一節

另請參閱

Miniport 驅動程式的配接器狀態

Miniport 配接器關機

Miniport 配接器狀態和作業

MiniportInitializeEx

NdisMGetBusData

NdisMRegisterMiniportDriver

NdisMSetBusData