驅動程式堆疊

傳送至設備驅動器的大部分要求會封裝在 I/O 要求封包 中(IRP)。 每個裝置都會以裝置節點表示,而每個裝置節點都有裝置堆疊。 如需詳細資訊,請參閱 裝置節點和裝置堆疊。 若要將讀取、寫入或控制要求傳送至裝置,I/O 管理員會找出裝置的裝置節點,然後將 IRP 傳送至該節點的裝置堆疊。 有時候,處理 I/O 要求涉及多個裝置堆疊。 無論涉及多少個裝置堆疊,參與 I/O 要求的整體驅動程式順序都會稱為 要求的驅動程式堆疊 。 我們也使用驅動程式堆疊一詞來參考特定技術的分層驅動程式集。

由數個裝置堆疊處理的 I/O 要求

在某些情況下,處理 IRP 時涉及多個裝置堆疊。 下圖說明處理單一 IRP 時涉及四個裝置堆疊的情況。

四個裝置節點的圖表,每個節點都有裝置堆疊。

以下是在圖表中每個編號階段處理 IRP 的方式:

  1. IRP 是由 Disk.sys 所建立,這是 [我的 USB 儲存設備] 節點裝置堆疊中的函式驅動程式。 Disk.sys將 IRP 向下傳遞至裝置堆疊,以Usbstor.sys。

  2. 請注意,Usbstor.sys是 [我的 USB 儲存設備] 節點的 PDO 驅動程式,以及 USB 大量儲存裝置節點的 FDO 驅動程式。 此時,決定 IRP 是否由 (PDO, Usbstor.sys) 配對或 (FDO, Usbstor.sys) 配對所擁有並不重要。 IRP 是由驅動程式所擁有,Usbstor.sys,而驅動程式可以存取 PDO 和 FDO。

  3. 當Usbstor.sys完成處理 IRP 時,它會將 IRP 傳遞至Usbhub.sys。 Usbhub.sys是 USB 大量儲存裝置節點的 PDO 驅動程式,以及 USB 根中樞節點的 FDO 驅動程式。 決定 IRP 是否由 (PDO, Usbhub.sys) 配對或 (FDO, Usbhub.sys) 組所擁有並不重要。 IRP 是由驅動程式所擁有,Usbhub.sys,而驅動程式可以同時存取 PDO 和 FDO。

  4. 當Usbhub.sys完成處理 IRP 時,它會將 IRP 傳遞給 (Usbuhci.sys, Usbport.sys) 組。

    Usbuhci.sys是迷你埠驅動程式,Usbport.sys是埠驅動程式。 (迷你埠,埠)配對扮演單一驅動程式的角色。 在此情況下,迷你埠驅動程式和埠驅動程式都是由 Microsoft 所撰寫。 (Usbuhci.sys、Usbport.sys) 組是 USB 根中樞節點的 PDO 驅動程式,而 (Usbuhci.sys, Usbport.sys) 組也是 USB 主機控制器節點的 FDO 驅動程式。 (Usbuhci.sys,Usbport.sys) 配對會與主機控制器硬體進行實際通訊,進而與實體USB儲存裝置通訊。

I/O 要求的驅動程式堆疊

請考慮參與上圖中說明之 I/O 要求的四個驅動程式序列。 我們可以藉由將焦點放在驅動程式而非裝置節點及其個別裝置堆疊,以取得序列的另一個檢視。 下圖顯示從上到下循序的驅動程式。 請注意,Disk.sys與一個裝置對象相關聯,但另外三個驅動程式都與兩個裝置對象相關聯。

驅動程式堆疊的圖表,其中顯示與 fdo 相關聯的最上層驅動程式,以及與 pdo 和 fdo 相關聯的其他三個驅動程式。

參與 I/O 要求的驅動程式序列稱為 I/O 要求的驅動程式堆疊。 為了說明 I/O 要求的驅動程式堆疊,我們會依參與要求的順序,從上到下繪製驅動程式。

請注意,I/O 要求的驅動程式堆疊與裝置節點的裝置堆疊大不相同。 另請注意,I/O 要求的驅動程式堆疊不一定會保留在裝置樹狀結構的一個分支中。

技術驅動程式堆疊

請考慮上圖中顯示的 I/O 要求的驅動程式堆疊。 如果我們為每個驅動程式提供易記的名稱,並稍微變更圖表,我們有一個區塊圖,類似於 Windows 驅動程式套件 (WDK) 檔案中出現的許多圖表。

驅動程式堆疊的圖表,其中顯示驅動程式的易記名稱:上方的磁碟類別驅動程式,後面接著 usb 儲存埠驅動程式,然後是 USB 中樞驅動程式和 (usb 2 迷你埠、usb 埠) 驅動程式。

在圖表中,驅動程式堆疊分成三個區段。 我們可以將每個區段視為屬於特定技術或操作系統的特定元件或部分。 例如,我們可能會說驅動程式堆疊頂端的第一個區段屬於磁碟區管理員,第二個區段屬於操作系統的儲存元件,而第三個區段屬於操作系統的核心 USB 部分。

請考慮第三節中的驅動程式。 這些驅動程式是一組較大型核心 USB 驅動程式的子集,Microsoft提供來處理各種 USB 要求和 USB 硬體。 下圖顯示整個 USB 核心區塊圖的外觀。

此圖顯示可能 USB 核心區塊的技術驅動程式堆疊。

顯示特定技術或特定元件或操作系統部分之所有驅動程式的區塊圖稱為 技術驅動程式堆疊。 通常,技術驅動程式堆疊會指定名稱,例如 USB 核心驅動程式堆疊、儲存堆疊、1394 驅動程式堆疊和音訊驅動程式堆疊。

注意:本文中的 USB 核心區塊圖顯示數種可能的方法之一,說明 USB 1.0 和 2.0 的技術驅動程式堆疊。 如需 USB 1.0、2.0 和 3.0 驅動程式堆疊的官方圖表,請參閱 USB 驅動程式堆疊架構

裝置節點和裝置堆疊

迷你驅動程式和驅動程式組

適用於所有驅動程式開發人員的概念