驅動程式堆疊

傳送至設備驅動器的大部分要求會封裝在 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 驅動程式堆疊架構

裝置節點和裝置堆疊

迷你驅動程式和驅動程式配對

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