處理通訊協定驅動程式中的 PnP 事件和電源管理事件
當作業系統發出 隨插即用 (PnP) I/O 要求封包 (IRP) 或電源管理 IRP 到代表網路介面卡 (NIC) 的目標裝置物件時,NDIS 會攔截 IRP。 NDIS 藉由呼叫驅動程式的 ProtocolNetPnPEvent 函式,向每個系結的通訊協定驅動程式和每個系結中繼驅動程式指出事件。 在 對 ProtocolNetPnPEvent的呼叫中,NDIS 會將指標傳遞至包含 NET_PNP_EVENT結構的NET_PNP_EVENT_NOTIFICATION 。 NET_PNP_EVENT 結構描述所指出的 PnP 事件或電源管理事件。 如需通訊協定驅動程式 PnP 介面的詳細資訊,請參閱 處理通訊協定驅動程式中的 PnP 事件通知。
下列清單包含 PnP 和電源管理事件,如 NET_PNP_EVENT 結構中的 NetEvent 程式碼所指出:
NetEventSetPower
指出設定電源要求,指定迷你埠介面卡應該轉換為特定電源狀態。 電源管理感知通訊協定驅動程式應該一律會傳回NDIS_STATUS_SUCCESS來成功此事件。 舊的通訊協定驅動程式可以傳回NDIS_STATUS_NOT_SUPPORTED,表示 NDIS 應該從迷你埠介面卡解除系結。
發出設定電源要求之後,如果迷你埠配接器轉換為低電源狀態,NDIS 會暫停驅動程式堆疊。 如果迷你埠介面卡轉換至工作狀態 (D0) ,NDIS 會在設定電源要求之前重新開機驅動程式堆疊。 如需暫停和重新開機驅動程式堆疊的詳細資訊,請參閱 暫停驅動程式堆疊。
如果迷你埠配接器處於低電源狀態,通訊協定驅動程式就無法發出任何 OID 要求。 這項需求是額外的電源管理限制,會新增至驅動程式堆疊處於暫停狀態時所套用的其他限制。
如果基礎迷你埠介面卡不是電源管理感知,迷你埠驅動程式會將NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES的PowerManagementCapabilities成員設定為Null,而 NDIS 會將NDIS_BIND_PARAMETERS的PowerManagementCapabilities成員設定為Null。
注意 從 NDIS 6.30 開始,在收到此事件的通知之後,通訊協定驅動程式必須停止產生新的 I/O 要求,且不應等候在呼叫 ProtocolNetPnPEvent內容中完成任何擱置的 I/O 要求。
如需設定電源事件的詳細資訊,請參閱 處理中繼驅動程式中的 PnP 事件和電源管理事件。
NetEventQueryPower
指出查詢電源要求,此要求會查詢基礎迷你埠配接器是否可以轉換至特定的電源狀態。 通訊協定驅動程式應該一律會成功 NetEventQueryPower 。 建立作用中連線之後,通訊協定驅動程式可以呼叫 PoRegisterSystemState 來註冊連續忙碌狀態。 只要狀態註冊生效,電源管理員就不會嘗試讓系統進入睡眠狀態。 連線變成非使用中之後,通訊協定驅動程式會呼叫 PoUnregisterSystemState來取消狀態註冊。 通訊協定驅動程式絕對不應該嘗試防止系統因為 失敗 NetEventQueryRemoveDevice而轉換至睡眠狀態。 請注意, NetEventQueryPower 一律接著 NetEventSetPower。 NetEventSetPower,設定裝置目前作用中的電源狀態會取消NetEventQueryPower。
注意 從 NDIS 6.30 開始,在收到此事件的通知之後,通訊協定驅動程式不應等候在 呼叫 ProtocolNetPnPEvent的內容中完成任何擱置的 I/O 要求。
NetEventQueryRemoveDevice
指出查詢移除裝置要求,此要求會查詢是否可以移除 NIC 而不中斷作業。 例如,如果通訊協定驅動程式無法釋放裝置 (,因為裝置正在使用中) ,它必須傳回 NDIS_STATUS_FAILURE,使 NetEventQueryRemoveDevice 失敗。
NetEventCancelRemoveDevice
指出取消移除裝置要求,這會取消移除基礎 NIC。 通訊協定驅動程式應該一律會傳回NDIS_STATUS_SUCCESS來成功此事件。
NetEventReconfigure
表示網路元件的組態已變更。 例如,如果使用者變更 TCP/IP 的 IP 位址,NDIS 會使用 NetEventReconfigure 程式碼向 TCP/IP 通訊協定指出此事件。 如果通訊協定驅動程式無法套用指定的組態變更,而且沒有可用的預設值,則通訊協定驅動程式可能會傳回失敗碼。 嘗試配置記憶體失敗的範例是通訊協定傳回失敗碼的情況。 傳回錯誤碼可能會導致提示使用者重新開機系統。
通訊協定應該驗證傳遞至其ProtocolNetPnPEvent函式的NetEventReconfigure相關資料。 如需這類資料的詳細資訊,請參閱 通訊協定驅動程式NET_PNP_EVENT。
NetEventBindList
表示通訊協定驅動程式已重新設定其系結清單處理順序。 此清單表示在處理時套用至通訊協定系結的相對順序,例如,可能會路由傳送至數個系結之一的使用者要求。 與此事件一起傳遞的緩衝區包含格式化為 Null 終止 Unicode 字串的裝置名稱清單。 每個裝置名稱的格式與傳遞給ProtocolBindAdapterEx呼叫的DeviceName參數相同。
通訊協定應該驗證傳遞至其ProtocolNetPnPEvent函式的NetEventBindList相關資料。 如需這類資料的詳細資訊,請參閱 通訊協定驅動程式NET_PNP_EVENT。
通訊協定應該驗證傳遞至其ProtocolNetPnPEvent函式的NetEventBindList相關資料。 如需這類資料的詳細資訊,請參閱 通訊協定驅動程式NET_PNP_EVENT。
NetEventBindsComplete
表示通訊協定驅動程式已系結至其可系結的所有 NIC。 除非將 PnP NIC 插入系統,否則 NDIS 不會再指出對通訊協定驅動程式的系結。
NetEventPnPCapabilities
表示使用者已啟用或停用基礎介面卡的喚醒功能。 (NDIS 傳遞至ProtocolNetPnPEvent的ProtocolBindingCoNtext參數會指定系結 .)
NetEventPause
表示指定的通訊協定系結應該進入暫停狀態。 系結會在 NDIS 完成系結的所有未處理傳送要求之後進入暫停狀態。 如需暫停系結的詳細資訊,請參閱 暫停系結。
NetEventRestart
表示指定的通訊協定系結已進入重新開機狀態。 當通訊協定驅動程式準備好繼續傳送和接收系結的作業之後,系結就會進入執行中狀態。 如需重新開機系結的詳細資訊,請參閱 重新開機系結。
NetEventPortActivation
指出與指定系結相關聯的埠清單啟用。 如需暫停系結的詳細資訊,請參閱 處理埠啟用 PnP 事件。
NetEventPortDeactivation
指出與指定系結相關聯之埠清單的停用。 如需暫停系結的詳細資訊,請參閱 處理埠停用 PnP 事件。
NetEventIMReEnableDevice
表示 NDIS 6.0 或更新版本的中繼驅動程式虛擬迷你埠的設定已變更。 NetEventIMReEnableDevice 類似于 NetEventReconfigure 事件,不同之處在于中繼驅動程式會收到單一虛擬迷你埠的這個事件,而 NetEventReconfigure 事件會套用至所有中繼驅動程式的虛擬迷你埠。 例如,中繼驅動程式會在使用者停用時收到NetEventIMReEnableDevice事件,然後從裝置管理員或其他來源啟用單一虛擬迷你埠。 如需中繼驅動程式電源管理的範例,請參閱 GitHub 上Windows 驅動程式範例存放庫中提供的NDIS MUX 中繼驅動程式和通知物件驅動程式範例。
NET_PNP_EVENT 結構的 Buffer 成員會指向緩衝區,其中包含所指出事件的特定資訊。
通訊協定驅動程式可以使用NdisCompleteNetPnPEvent以非同步方式完成ProtocolNetPnPEvent的呼叫。