共用方式為


處理通訊協定驅動程式中的 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_ATTRIBUTESPowerManagementCapabilities成員設定為Null,而 NDIS 會將NDIS_BIND_PARAMETERSPowerManagementCapabilities成員設定為Null

    注意 從 NDIS 6.30 開始,在收到此事件的通知之後,通訊協定驅動程式必須停止產生新的 I/O 要求,且不應等候在呼叫 ProtocolNetPnPEvent內容中完成任何擱置的 I/O 要求。

    如需設定電源事件的詳細資訊,請參閱 處理中繼驅動程式中的 PnP 事件和電源管理事件

  • NetEventQueryPower

    指出查詢電源要求,此要求會查詢基礎迷你埠配接器是否可以轉換至特定的電源狀態。 通訊協定驅動程式應該一律會成功 NetEventQueryPower 。 建立作用中連線之後,通訊協定驅動程式可以呼叫 PoRegisterSystemState 來註冊連續忙碌狀態。 只要狀態註冊生效,電源管理員就不會嘗試讓系統進入睡眠狀態。 連線變成非使用中之後,通訊協定驅動程式會呼叫 PoUnregisterSystemState來取消狀態註冊。 通訊協定驅動程式絕對不應該嘗試防止系統因為 失敗 NetEventQueryRemoveDevice而轉換至睡眠狀態。 請注意, NetEventQueryPower 一律接著 NetEventSetPowerNetEventSetPower,設定裝置目前作用中的電源狀態會取消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 傳遞至ProtocolNetPnPEventProtocolBindingCoNtext參數會指定系結 .)

  • 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的呼叫。