靜態列舉 是驅動程式在系統初始化期間偵測和報告裝置是否存在的能力,並有限地能夠報告系統設定的後續變更。
如果裝置的數目和類型或功能子單位已預先決定且永久,且不相依於驅動程序執行所在的系統設定,則總線驅動程式可以使用靜態列舉。
例如,聲卡的驅動程式可能會作為匯流排驅動程式,並為聲卡的每項功能創建個別的實體設備物件(PDO),例如 MIDI、音訊和遊戲桿。
靜態子清單
架構可讓驅動程式提供靜態子清單來支持靜態列舉。 每個靜態子清單都代表連接到父裝置的子裝置清單。 父裝置的總線驅動程式必須識別父裝置的子裝置、將它們新增至父裝置的靜態子清單,以及為每個子裝置建立 PDO。
建立靜態子清單
每次驅動程式建立代表裝置功能裝置物件 (FDO) 的架構裝置物件時,架構都會為裝置建立空的靜態子清單。
當架構呼叫總線驅動程式的 EvtDriverDeviceAdd 回呼函式時,回呼函式必須呼叫 WdfDeviceCreate ,才能建立父裝置的 FDO。 如需建立 FDO 的詳細資訊,請參閱在函式驅動程式中建立裝置物件 。
然後,驅動程式必須列舉父裝置的子系、為子系建立 PDO,並將子系新增至子清單。
驅動程式可以選擇性地呼叫 WdfDeviceSetBusInformationForChildren,以提供架構有關總線的資料。 建議這樣做,因為這能讓子裝置和應用程式更容易識別系統總線。
若要為偵測到的子裝置建立 PDO,總線驅動程序必須:
呼叫 WdfPdoInitAllocate 以取得 WDFDEVICE_INIT 結構。
初始化 WDFDEVICE_INIT 結構。
呼叫 WdfDeviceCreate 以建立代表 PDO 的架構裝置物件。
如需建立 PDO 的詳細資訊,請參閱 在總線驅動程式中建立裝置物件。
呼叫 WdfDeviceCreate 之後,驅動程式必須呼叫 WdfFdoAddStaticChild ,才能將子裝置新增至子清單。
修改靜態子清單
因為驅動程式應該只針對預先決定且永久的裝置組態使用靜態子清單,因此在建立靜態子清單之後,驅動程式就不需要修改靜態子清單。 如果驅動程式判斷子裝置無法存取,驅動程式可以呼叫 WdfPdoMarkMissing。 (如果子裝置仍可存取,但變得沒有回應且無法使用,驅動程式應將WDF_DEVICE_STATE結構的 Failed 成員設定為 WdfTrue,然後呼叫 WdfDeviceSetDeviceState。
遍歷靜態的子項清單
如果您需要擷取靜態子清單的內容,驅動程式可以執行下列動作來遍歷清單: