NDIS 迷你埠驅動程序必須提供 MiniportHaltEx 函式,才能註冊至 NdisMRegisterMiniportDriver。
MiniportHaltEx 應該復原 MiniportInitializeEx 所做的一切。 例如,NDIS 迷你埠驅動程式可能會:
自由港 (如需詳細資訊,請參閱 釋放 NDIS 埠。)
釋放所有 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 來釋放該記憶體。
如果迷你埠驅動程式已配置或保留任何硬體資源,則應該傳回這些資源。 例如,如果迷你埠驅動程式在網路介面卡上對應了一個 I/O 範圍的埠,則應該透過呼叫 NdisMDeregisterIoPortRange來釋放這些埠。