共用方式為


範例 WDM 裝置堆疊

本節說明一組驅動程式可能為 USB 硬體建立的裝置物件。 它說明 WDM 裝置物件及其分層方式。

下圖顯示範例驅動程式所建立的裝置物件。 如需詳細資訊,請參閱 WDM 驅動程式層:範例

圖表說明用於 USB 搖桿的 WDM 裝置物件層範例。

從此圖底部開始,範例裝置堆疊中的裝置物件包括:

  1. PCI 總線的 PDO 和 FDO。

    根總線驅動程式會列舉內部系統總線(根總線),併為找到的每個裝置建立 PDO。 其中一個 PDO 適用於 PCI 總線。 (此圖未顯示根匯流排的PDO和FDO。)

    PnP 管理員會將 PCI 驅動程式識別為 PCI 匯流排的函式驅動程式、載入驅動程式 (如果尚未載入) ,並將 PDO 傳遞至 PCI 驅動程式。 在 AddDevice 例程中,PCI 驅動程式會建立 PCI 總線的 FDO(IoCreateDevice),並將 FDO 附加至 PCI 總線的裝置堆棧 (IoAttachDeviceToDeviceStack)。 PCI 驅動程式作為 PCI 總線的功能驅動程式,其責任的一部分就是建立並附加此 FDO。

    此範例不包含 PCI 匯流排的篩選驅動程式。

  2. USB 主機控制器的 PDO 和 FDO。

    PnP 管理員會指示PCI驅動程式啟動其裝置(IRP_MN_START_DEVICE),然後查詢PCI驅動程式是否有其子系(IRP_MN_QUERY_DEVICE_RELATIONSBusRelations 的關聯類型)。 作為回應,PCI 驅動程式會列舉其總線上的裝置。 在此範例中,PCI 驅動程式會尋找 USB 主機控制器,併為該裝置建立 PDO。 圖中的寬箭號表示 USB 主機控制器是 PCI 總線的「子系」。 PCI 驅動程式會為其子裝置建立 PDO,這是其作為 PCI 總線的總線驅動程式的職責之一。

    PnP 管理員將 USB 主機控制器的小類別驅動程式/類別驅動程式組識別為 USB 主機控制器的功能驅動程式,並載入該組驅動程式。 PnP 管理員會在適當的時間呼叫驅動程式組,以建立和連結 USB 主機控制器的 FDO。

    此範例不包含 USB 主機控制器的篩選驅動程式。

  3. USB 中樞的 PDO 和 FDO。

    USB 主機控制器會列舉其總線、找出唯一埠中的USB中樞,併為中樞建立 PDO。 USB 中樞驅動程式會為該中樞建立並附加 FDO。

    此範例不包含 USB 中樞的篩選驅動程式。

  4. 遊戲桿裝置的 PDO、FDO 和兩個篩選 DO。

    USB 中樞驅動程式會列舉其總線、找出 HID 裝置(遊戲桿),併為遊戲桿建立 PDO。

    在此範例中,會在機桿裝置的登錄中設定較低層級的篩選驅動程式,因此 PnP 管理員會載入篩選驅動程式。 篩選驅動程式會判斷它與裝置相關,並建立篩選 DO 並將其附加至裝置堆疊。

    PnP 管理員會判斷遊戲桿裝置的函式驅動程式是 HID 類別/迷你類別驅動程式組,並載入這些驅動程式。 驅動程式配對是由連結至類別驅動程式 DLL 的迷你類別驅動程式所組成。 它們一起充當設備的一個功能驅動程序。 類別/迷你類別驅動程式組會建立一個裝置物件 FDO,並將其連結至裝置堆疊。

    上層篩選驅動程式會以類似較低層級篩選的方式,建立篩選 DO 並連結至裝置堆疊。

父匯流排驅動程式一律會在特定裝置的裝置堆疊底部建立 PDO。 當驅動程式處理 PnP 或電源 IRP 時,它們必須將每個 IRP 一路傳遞至 PDO 及其相關聯的總線驅動程式。

下圖顯示與上圖相同的裝置堆疊,但強調每個驅動程式所建立和管理的裝置物件。

從驅動程序的觀點說明範例裝置物件層的圖表。

總線驅動程式跨越多個裝置堆疊。 匯流排驅動程式會為其匯流排配接器或控制器建立 FDO,並為其每個子裝置建立 PDO。