範例 WDM 裝置堆疊
本節說明一組可能用於 USB 硬體的驅動程式所建立的裝置物件,以說明 WDM 裝置物件及其分層方式。
下圖顯示 WDM 驅動程式層中所述範例驅動程式所建立的裝置物件:範例。
從此圖底部開始,範例裝置堆疊中的裝置物件包括:
適用于 PCI 匯流排的 PDO 和 FDO。
根匯流排驅動程式會列舉內部系統匯流排 (根匯流排) ,並為找到的每個裝置建立 PDO。 其中一個 PDO 適用于 PCI 匯流排。 (圖中不會顯示根匯流排的 PDO 和 FDO。)
PnP 管理員會將 PCI 驅動程式識別為 PCI 匯流排的函式驅動程式、載入驅動程式 (如果尚未載入) ,並將 PDO 傳遞給 PCI 驅動程式。 在其 AddDevice 常式中,PCI 驅動程式會為 PCI 匯流排建立 FDO (IoCreateDevice) ,並將 FDO 連結到 IoAttachDeviceToDeviceStack (IoAttachDeviceToDeviceStack) 。 PCI 驅動程式會建立並附加此 FDO 做為其 PCI 匯流排函式驅動程式的責任。
此範例中沒有 PCI 匯流排的篩選準則驅動程式。
適用于 USB 主機控制器的 PDO 和 FDO。
PnP 管理員會指示 PCI 驅動程式啟動其裝置 (IRP_MN_START_DEVICE) ,然後查詢 PCI 驅動程式的子系 (IRP_MN_QUERY_DEVICE_RELATIONS 與 BusRelations) 的關聯類型。 為了回應,PCI 驅動程式會列舉其匯流排上的裝置。 在此範例中,PCI 驅動程式會尋找 USB 主機控制器,並為該裝置建立 PDO。 圖中的寬箭號表示 USB 主機控制器是 PCI 匯流排的「子系」。 PCI 驅動程式會為其子裝置建立 PDO,作為其 PCI 匯流排匯流排驅動程式責任的一部分。
PnP 管理員會將 USB 主機控制器迷你類別/類別驅動程式組識別為 USB 主機控制器的函式驅動程式,並載入驅動程式組。 PnP 管理員會在適當的時間呼叫驅動程式配對,以建立和附加 USB 主機控制器的 FDO。
在此範例中,USB 主機控制器沒有篩選驅動程式。
適用于 USB 中樞的 PDO 和 FDO。
USB 主機控制器會列舉其匯流排、找出唯一端口中的 USB 中樞,並建立中樞的 PDO。 USB 中樞驅動程式會建立並連結中樞的 FDO。
在此範例中,USB 中樞沒有篩選驅動程式。
搖桿裝置的 PDO、FDO 和兩個篩選 DO。
USB 中樞驅動程式會列舉其匯流排、找出 HID 裝置 (搖桿) ,並建立搖桿的 PDO。
在此範例中,搖桿裝置的登錄中已設定較低層級的篩選驅動程式,因此 PnP 管理員會載入篩選驅動程式。 篩選驅動程式會判斷它與裝置相關,並建立篩選 DO 並將其連結至裝置堆疊。
PnP 管理員會判斷搖桿裝置的函式驅動程式是 HID 類別/迷你類別驅動程式配對,並載入這些驅動程式。 驅動程式配對是由連結至類別驅動程式 DLL 的迷你類別驅動程式所組成;它們會一起作為裝置的一個函式驅動程式。 類別/迷你類別驅動程式配對會建立一個裝置物件 FDO,並將它附加至裝置堆疊。
上層篩選驅動程式會以類似較低層級篩選的方式,建立並附加篩選 DO 至裝置堆疊。
請注意,父匯流排驅動程式所建立的 PDO 一律位於特定裝置的裝置堆疊底部。 當驅動程式處理 PnP 或電源 IRP 時,它們必須將每個 IRP 一路向下傳遞至 PDO 及其相關聯的匯流排驅動程式。
下圖顯示與上圖相同的裝置堆疊,但強調哪些裝置物件是由哪些驅動程式建立和管理。
匯流排驅動程式跨越多個裝置堆疊。 匯流排驅動程式會為其匯流排配接器/控制器建立 FDO,並為其每個子裝置建立 PDO。