什麼是驅動程式?

驅動程式是一種軟體元件,可讓操作系統和裝置通訊。 例如,當應用程式需要從裝置讀取數據時,它會呼叫操作系統所實作的函式。 操作系統接著會呼叫驅動程式所實作的函式。 驅動程式通常是由裝置製造商所開發,知道如何與裝置硬體通訊以取得數據。 一旦驅動程式取得數據,它會將它傳回操作系統,然後將它傳回給應用程式。

此圖顯示應用程式、作業系統和驅動程式之間的互動。

展開定義

我們的說明可簡化驅動程式的概念。 以下是需要考慮的一些重點:

  • 驅動程式不一定要由裝置製造商開發。 如果裝置遵循已發佈的硬體標準,Microsoft 可以撰寫驅動程式,因此裝置設計工具不需要提供驅動程式。

  • 並非所有驅動程式都直接與裝置通訊。 通常,在 驅動程式堆疊 中分層的數個驅動程式會參與 I/O 要求。 可視化堆棧的傳統方式是在頂端的第一個參與者和底部的最後一個參與者,如下圖所示。 堆疊中的某些驅動程式會將要求從一種格式變更為另一種格式。 這些驅動程式不會直接與裝置通訊。 相反地,他們會變更要求,並將它傳遞給堆疊中較低位置的驅動程式。

    此圖說明應用程式、作業系統、三個驅動程式和裝置之間的通訊。

    函式驅動程式:直接與裝置通訊的驅動程式稱為 函式驅動程式

    篩選驅動程式:執行輔助處理的驅動程式稱為 篩選驅動程式

    如需堆疊的詳細資訊,請參閱 驅動程式堆疊

  • 有些篩選驅動程式會觀察和記錄 I/O 要求的相關信息,但不會主動參與這些要求。 例如,某些篩選驅動程式會作為驗證器,以確保堆疊中的其他驅動程式會正確處理 I/O 要求。

我們可以將驅動程式的定義精簡為觀察或參與操作系統與裝置之間通訊的任何軟體元件。

軟體驅動程式

我們的擴充定義相當精確,但仍不完整,因為某些驅動程式完全與任何硬體裝置無關。

例如,如果您需要撰寫可存取核心操作系統數據結構的工具,您可以將此工具分割成兩個元件。 第一個元件會在使用者模式中執行,並呈現使用者介面。 第二個元件會在核心模式中執行,並存取核心操作系統數據。 在使用者模式中執行的元件稱為應用程式,而核心模式中執行的元件稱為 軟體驅動程式。 軟體驅動程式未與硬體裝置相關聯。

下圖說明與內核模式軟體驅動程式通訊的使用者模式應用程式。

描述應用程式與軟體驅動程式之間關聯性的圖表。

軟體驅動程式一律會在核心模式中執行。 它們主要是寫入以存取只能在核心模式中使用的受保護數據。 不過,並非所有設備驅動器都需要存取內核模式數據和資源,因此某些設備驅動器會在使用者模式中執行。

如需處理器模式的詳細資訊,請參閱 使用者模式和核心模式

公交車驅動程式

另一種類型的驅動程式是 總線驅動程式。 若要瞭解總線驅動程式,您必須瞭解裝置節點和裝置樹狀結構。

如需裝置樹狀架構、裝置節點和總線驅動程式的相關信息,請參閱 裝置節點和裝置堆疊

函式驅動程序的詳細資訊

到目前為止,我們的說明會過度簡化 函式驅動程序的定義。 我們指出裝置的函式驅動程式是堆疊中直接與裝置通訊的一個驅動程式。 這適用於直接連線到周邊元件互連的裝置, (PCI) 總線。 PCI 裝置的函式驅動程式會取得對應至裝置上埠和記憶體資源的位址。 函式驅動程式會透過寫入這些位址,直接與裝置通訊。

不過,在許多情況下,裝置不會直接連線到PCI總線。 相反地,裝置會連線到連接至PCI總線的主總線適配卡。 例如,USB pci 會連線到主機總線適配卡 (稱為 USB 主機控制器) ,該控制器會連線到 PCI 總線。 USB 咖啡機具有函式驅動程式,而USB主機控制器也有函式驅動程式。 適用於咖啡機的函式驅動程式會透過將要求傳送至USB主機控制器的函式驅動程式,間接與咖啡機通訊。 USB 主機控制器的函式驅動程序接著會直接與USB主機控制器硬體通訊,該硬體會與咖啡機通訊。

此圖示範 USB 咖啡機驅動程式、USB 主機控制器驅動程式和 PCI 總線之間的互動。