共用方式為


硬體事件

某些音訊裝置提供硬體音量控制旋鈕、靜音開關或其他類型的手動控件。 應用程式可以藉由調整音量或變更音訊數據流播放的方式,來回應這些控件中的變更。 當使用者調整硬體控制項時,迷你埠驅動程式會使用 IPortEvents 介面通知埠驅動程式硬體事件已發生。 埠驅動程式接著會通知事件的應用程式,以便從裝置讀取新的控制項設定。

您的迷你埠驅動程式可以在它處理埠驅動程式的 Init 呼叫時,查詢 IPortEvents 介面(請參閱 IMiniportWavePci::Init)。 在Microsoft Windows 98 SE、Windows Me 和 Windows 2000 和更新版本上,該查詢會成功。 如需程式代碼範例,請參閱舊版 Windows 驅動程式套件 (WDK) 中的 Sb16 範例音訊配接器。

當埠驅動程式呼叫驅動程式的 IMiniport::GetDescription 方法時,方法會輸出 PCFILTER_DESCRIPTOR 結構,以指定裝置所支援的事件。 事件可以在PCFILTER_DESCRIPTOR的 PinsNodes 成員的自動化表中指定,並在 AutomationTable 成員中,該成員指向篩選器本身的自動化表。 每個事件都是由 PCEVENT_ITEM 結構指定。 您的驅動程式應該將PCEVENT_ITEM結構的 SetId 成員設定為 KSEVENTSETID_AudioControlChangeKSEVENT_CONTROL_CHANGE,並將驅動程式 EventHandler 例程的指標載入 處理程式 成員。 您的驅動程式也應該在 Flags 成員中設定PCEVENT_ITEM_FLAG_BASICSUPPORT位,以指出控件變更事件的基本支援,而且應該設定PCEVENT_ITEM_FLAG_ONESHOT和/或PCEVENT_ITEM_FLAG_ENABLE位,以指出它支援單次和/或週期性通知。

當應用程式稍後呼叫mixerOpen函式(如 Microsoft Windows SDK 檔所述)要求特定事件的通知時,埠驅動程序接著會使用指向PCEVENT_REQUEST結構的指標呼叫驅動程式的 EventHandler 例程。 這個結構的 Verb 成員設定為 PCEVENT_VERB_ADD,而其 EventItem 成員會指定要啟用的事件。 PCEVENT_REQUEST 結構也包含驅動程式應視為不透明系統數據的 KSEVENT_ENTRY 結構的指標。 啟用事件之後,您的處理程式應該使用相同的KSEVENT_ENTRY指標呼叫 IPortEvents::AddEventToEventList 。 透過此呼叫,處理程式會確認事件已啟用。

當硬體事件發生且驅動程式的中斷服務例程偵測到靜音或音量變更時,驅動程式會透過呼叫 IPortEvents::GenerateEventList,使用描述事件的一組參數來向埠驅動程式發出事件訊號。 例如,以下呼叫描述了 lineout-volume 節點的控制變更:

    pPE->GenerateEventList(NULL, KSEVENT_CONTROL_CHANGE,
                           FALSE, ULONG(-1), TRUE, LINEOUT_VOL);

在此呼叫期間,埠驅動程式會搜尋其事件清單,尋找符合呼叫參數的所有事件,並將通知傳送給監視這些事件的用戶端。 在此範例中,pPE 是 IPortEvents 物件的指標,LINEOUT_VOL是迷你埠驅動程式指派給 lineout-volume 節點的節點識別符。 未指定的參數(例如上述範例中的事件集 GUID 和針腳標識符)被視為通配符,這些通配符會始終與清單中的相應參數匹配。