MINIPORT_RESTART回呼函式 (ndis.h)
MiniportRestart 函式會起始已暫停之迷你埠適配卡的重新啟動要求。
語法
MINIPORT_RESTART MiniportRestart;
NDIS_STATUS MiniportRestart(
[in] NDIS_HANDLE MiniportAdapterContext,
PNDIS_MINIPORT_RESTART_PARAMETERS RestartParameters
)
{...}
參數
[in] MiniportAdapterContext
迷你埠驅動程式在其 MiniportInitializeEx 函式中配置的內容區域句柄。 迷你埠驅動程式會使用此內容區域來維護迷你埠配接器的狀態資訊。
RestartParameters
的指標 NDIS_MINIPORT_RESTART_PARAMETERS 結構,定義迷你埠配接器的重新啟動參數。
傳回值
MiniportRestart 會傳回下列其中一個狀態值:
傳回碼 | Description |
---|---|
|
MiniportRestart 已成功透過迷你埠配接器重新啟動網路數據的流程。 |
|
MiniportRestart 未完成重新啟動作業,且作業將會以異步方式完成。 迷你埠驅動程序必須在作業完成時呼叫 NdisMRestartComplete 函式。 |
|
MiniportRestart 因為資源不足而失敗。 |
|
上述狀態值都未套用。 在此情況下,驅動程式應該使用指定失敗原因的參數呼叫 NdisWriteErrorLogEntry 函式。 |
備註
驅動程式會在呼叫 時指定 MiniportRestart 進入點 NdisMRegisterMiniportDriver 函式。
MiniportAdapterContext 參數指定的迷你埠適配卡會在 NDIS 呼叫 MiniportRestart 時進入重新啟動狀態。
當 NDIS 呼叫 MiniportRestart 時,迷你埠驅動程式:
- 必須完成繼續傳送和接收作業所需的任何工作。
- 選擇性地修改 RestartAttributes 成員中指定的重新啟動屬性 NDIS_MINIPORT_RESTART_PARAMETERS 結構。 如果 RestartAttributes 中的指標為 NULL,迷你埠驅動程式不應該修改或新增至重新啟動屬性清單。 如果 RestartAttributes 中的指標不是 NULL,它會指向 NDIS_RESTART_ATTRIBUTES 結構。 如果迷你埠驅動程式未重新啟動,則不應該修改任何屬性。
- 可以使用 來提供狀態指示 NdisMIndicateStatusEx 函式。
- 應該處理 MiniportOidRequest 函式中的狀態要求。
- 可以將新的媒體特定屬性新增至重新啟動屬性清單。 在此情況下,迷你埠驅動程序必須配置新的 NDIS_RESTART_ATTRIBUTES structure--例如,使用 NdisAllocateMemoryWithTagPriority 函式--並提供新屬性的記憶體空間。 將重新啟動屬性傳播至過度配置驅動程序之後,NDIS 會釋放迷你埠驅動程式的屬性記憶體。
- 可以修改重新啟動屬性清單中的媒體特定屬性。 如果迷你埠驅動程式需要更多記憶體空間,可以使用 NdisFreeMemory 函式釋放NDIS_RESTART_ATTRIBUTES結構,並配置新的結構以包含修改的資訊。 將重新啟動屬性傳播至過度配置驅動程序之後,NDIS 會釋放迷你埠驅動程式的屬性記憶體。
- 可以修改中的任何欄位 NDIS_RESTART_GENERAL_ATTRIBUTES 結構。 當 NDIS 在 RestartAttributes 成員中提供非 NULL 指標時 NDIS_MINIPORT_RESTART_PARAMETERS 結構,屬性清單包含一個專案,其中 NDIS_RESTART_ATTRIBUTES 結構中的 Oid 成員為 OID_GEN_MINIPORT_RESTART_ATTRIBUTES和數據成員包含NDIS_RESTART_GENERAL_ATTRIBUTES結構。
- 應該確定 NDIS_RESTART_GENERAL_ATTRIBUTES 結構包含正確的資訊。 若要確定NDIS_RESTART_GENERAL_ATTRIBUTES結構包含必要資訊,您應該先檢查 NDIS_RESTART_GENERAL_ATTRIBUTES 結構之標頭成員中指定的 NDIS_OBJECT_HEADER 結構中的 Revision 成員,以判斷結構的版本。
在迷你埠驅動程式成功重新啟動傳送和接收作業之後,它必須完成重新啟動作業。 如果驅動程式從 MiniportRestart 傳回NDIS_STATUS_SUCCESS,重新啟動作業就會完成。 如果驅動程式傳回NDIS_STATUS_PENDING,它可以繼續重新啟動作業。 驅動程式呼叫 NdisMRestartComplete 函式之後,就會完成重新啟動作業。 重新啟動作業完成後,迷你埠配接器會處於 [ 執行 中] 狀態。
迷你埠驅動程式可以繼續,指出在NDIS呼叫 MiniportRestart 之後,以及在驅動程式呼叫 NdisMRestartComplete 之前,立即收到迷你埠適配卡的封包。 迷你埠驅動程式應該準備好在驅動程式完成重新啟動要求之後接受傳送要求。
如果迷你埠驅動程式未重新啟動傳送和接收作業,驅動程序必須從 MiniportRestart 傳回適當的失敗狀態。 在此情況下,驅動程式必須停止任何已啟動的傳送或接收作業,然後返回 暫停 狀態。
NDIS 會在 IRQL = PASSIVE_LEVEL呼叫 MiniportRestart 。
例子
若要定義 MiniportRestart 函式,您必須先提供函式宣告,以識別您要定義的函式類型。 Windows 提供一組驅動程式的函式類型。 使用函式類型宣告函式有助於 驅動程式的程式代碼分析、 靜態驅動程序驗證器 (SDV) ,以及其他驗證工具會尋找錯誤,而且這是撰寫 Windows 操作系統驅動程式的需求。例如,若要定義名為 「 MyRestart」 的 MiniportRestart 函式,請使用 MINIPORT_RESTART 類型,如下列程式代碼範例所示:
MINIPORT_RESTART MyRestart;
然後,實作您的函式,如下所示:
_Use_decl_annotations_
NDIS_STATUS
MyRestart(
NDIS_HANDLE MiniportAdapterContext,
PNDIS_MINIPORT_RESTART_PARAMETERS RestartParameters
)
{...}
MINIPORT_RESTART函式類型定義於 Ndis.h 頭檔中。 若要在執行程式代碼分析工具時更精確地識別錯誤,請務必將 Use_decl_annotations 註釋新增至函式定義。 Use_decl_annotations註釋可確保使用頭檔中套用至MINIPORT_RESTART函式類型的批註。 如需函式宣告需求的詳細資訊,請參閱 使用 NDIS 驅動程式的函式角色類型來宣告函式。
如需 Use_decl_annotations的詳細資訊,請參閱 標註函式行為。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | NDIS 6.0 和更新版本支援。 |
目標平台 | Windows |
標頭 | ndis.h (包括 Ndis.h) |
IRQL | PASSIVE_LEVEL |