迷你埠驅動程式停止處理常式
NDIS 迷你埠驅動程式必須提供 MiniportHaltEx 函式給 NdisMRegisterMiniportDriver。
MiniportHaltEx 應該復原 MiniportInitializeEx 所做的一切。 例如,NDIS 迷你埠驅動程式可能會:
免費埠。 (如需詳細資訊,請參閱 釋放 NDIS Port.)
釋放 MiniportInitializeEx 宣告的所有硬體資源。
呼叫 NdisMDeregisterInterruptEx以釋放中斷資源。
釋放 MiniportInitializeEx 配置的任何記憶體。
除非 MiniportShutdownEx 函式已經將 NIC 還原為其初始狀態,否則停止 NIC。
下圖說明卸載迷你埠驅動程式。
MiniportHaltEx 應該在傳回之前完成卸載驅動程式所需的作業。 如果迷你埠驅動程式有任何未完成的接收指示 (,收到的網路資料表示它已指出最多 NDIS,但哪一個 NDIS 尚未傳回) , MiniportHaltEx 必須先傳回,直到這類資料傳回至迷你埠驅動程式的 MiniportReturnNetBufferLists 函式為止。
上圖顯示一組可由 MiniportHaltEx 函式進行的呼叫。 這些呼叫只是可以進行的呼叫子集。 實際的呼叫集取決於迷你埠驅動程式的先前動作。 迷你埠驅動程式可以在 MiniportInitializeEx 中進行這些相同的呼叫,如果因為硬體問題而無法成功初始化網路介面卡,或因為無法取得所需的資源。 在這種情況下, MiniportInitializeEx 應該藉由復原先前的動作來卸載驅動程式。 否則, MiniportHaltEx 將會復原 MiniportInitializeEx的動作。
下列清單描述反轉迷你埠驅動程式可能採取之特定動作所需的呼叫:
如果迷你埠驅動程式已註冊中斷,它應該呼叫 NdisMDeregisterInterruptEx。
如果迷你埠驅動程式設定計時器或計時器,它應該針對它所建立的每個計時器呼叫 NdisCancelTimerObject 。 如果對 NdisCancelTimerObject 的呼叫失敗,計時器可能已經引發。 在此情況下,迷你埠驅動程式應該等候計時器處理常式完成,再從 MiniportHaltEx 傳回。
如果迷你埠驅動程式已使用 NdisAllocateMemoryWithTagPriority配置任何記憶體,它應該呼叫 NdisFreeMemory 以釋放該記憶體。
如果迷你埠驅動程式使用 NdisMAllocateSharedMemory或 NdisMAllocateSharedMemoryAsyncEx配置任何記憶體,它應該呼叫 NdisMFreeSharedMemory 來釋放該記憶體。
如果迷你埠驅動程式針對具有 NdisAllocateNetBufferPool的封包描述元集區配置和初始化儲存體,它應該呼叫 NdisFreeNetBufferPool 以釋放該儲存體。
如果迷你埠驅動程式已配置或保留任何硬體資源,則應該傳回這些資源。 例如,如果迷你埠驅動程式在 NIC 上對應 I/O 埠範圍,它應該呼叫 NdisMDeregisterIoPortRange來釋放埠。