若要停用 NDIS 埠,迷你埠驅動程式會將埠停用即插即用 (PnP) 事件傳送至 NDIS。 在迷你埠驅動程式成功啟用埠之後,驅動程式必須先停用埠,才能釋放埠。 此外,驅動程序可能會因應用程式的特定原因而停用埠。 埠可以在停用后重新啟用,但如果已釋出埠,就無法重新啟用該埠。
若要傳送埠停用 PnP 事件,迷你埠驅動程式會在呼叫 NdisMNetPnPEvent 函式時,使用 NetEventPortDeactivation PnP 事件代碼。 若要停用埠,迷你埠驅動程式必須設定 NetPnPEvent 參數 NdisMNetPnPEvent 指向的 NET_PNP_EVENT_NOTIFICATION 結構成員,如下所示:
PortNumber
事件通知的原始來源埠。 將此成員設定為零,因為 NetPnPEvent 成員所指定的結構中,埠號碼是在 Buffer 成員中提供的。
NetPnPEvent
描述埠停用事件的 NET_PNP_EVENT 結構。 設定此結構的成員,如下所示:
NetEvent
描述事件的事件程序代碼。 將此成員設定為 NetEventPortDeactivation。
緩衝區
指向 NDIS_PORT_NUMBER 型別元素陣列的指標。 陣列包含迷你端口驅動程式正在停用的所有端口號碼。
緩衝區長度
Buffer 中指定的位元組數目。 將 緩衝區長度 設定為 緩衝 所指向的陣列大小。 若要取得陣列中的元素數目,請將bufferLength中的值除以NDIS_PORT_NUMBER數據類型的大小 。
其他成員
將NET_PNP_EVENT的其餘成員設定為 NULL。
迷你埠驅動程式可以提供一個包含要停用埠的陣列。 不過,如果迷你埠配接器的預設埠是 NetEventPortDeactivation PnP 事件的目標,則預設埠必須是陣列中指定的唯一埠。
迷你埠驅動程式可以隨時停用作用中的埠。 不過,在迷你埠驅動程式停用埠之前,它必須確定沒有未完成的狀態指示或接收與該埠相關聯的指示。 在迷你埠驅動程式傳送埠停用 PnP 事件之後,它不得起始任何狀態或接收與已停用埠相關聯的指示。
迷你埠驅動程式也可以重新啟用埠。 如需開啟 NDIS 連接埠的詳細資訊,請參閱 啟用 NDIS 連接埠。
當迷你埠驅動程式停用埠時,NDIS 會使用 NetEventPortDeactivation PnP 事件,通知系結至迷你埠驅動程式的所有通訊協定驅動程式。 此 PnP 事件會列出那些已變更為已配置狀態的埠,且不包含任何已停用的埠。 如需處理通訊協定驅動程式中埠停用事件的詳細資訊,請參閱 處理埠停用 PnP 事件。
在迷你埠驅動程式配置 NDIS 埠之前,驅動程式必須呼叫 NdisMSetMiniportAttributes 函式,以在 NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 結構中設定註冊屬性。 迷你埠驅動程式可以在呼叫 NdisMSetMiniportAttributes時設定NDIS_MINIPORT_CONTROLS_DEFAULT_PORT屬性旗標來控制預設埠的啟用。 如果迷你埠驅動程式承擔了啟用預設埠的責任並且已經啟用了預設埠,則它必須在從 MiniportHaltEx 函式返回之前停用該預設埠。
NDIS_PORT_NUMBER項目陣列所指定的所有埠都必須處於啟動狀態。 迷你埠驅動程序不應該嘗試停用已停用的埠。
如果 NDIS 無法停用埠數位中的任何埠,埠數位中的任何埠都不會變更狀態。 如果停用失敗,是因為某些指定的埠不存在,則 NdisMNetPnPEvent 函式會傳回 NDIS_STATUS_INVALID_PORT 傳回值。 如果停用失敗,是因為某些埠未處於啟動狀態,NdisMNetPnPEvent 會返回NDIS_STATUS_INVALID_PORT_STATE傳回值。
在呼叫 NdisMNetPnPEvent 返回之前,該埠不會被停用,且迷你埠驅動程式必須能夠處理 OID 要求並發送與該埠相關的要求。
當迷你埠驅動程式停用預設埠時,NDIS 會關閉上層通訊協定驅動程式與迷你埠配接器之間的所有綁定。 如果迷你埠驅動程序嘗試停用預設埠,且預設埠已經停用,NdisMNetPnPEvent 會失敗並傳回NDIS_STATUS_INVALID_PORT_STATE傳回值。 如果迷你埠驅動程序嘗試停用預設埠,且預設埠不是NDIS_PORT_NUMBER元素陣列中指定的唯一埠,NdisMNetPnPEvent 會失敗並傳回NDIS_STATUS_INVALID_PORT傳回值。 如果迷你埠驅動程式將 Buffer 成員設定為 NULL 或 BufferLength 成員為零,NDIS 會使 NdisMNetPnPEvent 呼叫失敗並傳回 NDIS_STATUS_INVALID_PARAMETER 的值。
成功停用埠之後,埠會處於分配狀態。 迷你埠驅動程式無法在埠處於配置中的狀態時,指示已接收的數據或狀態。