共用方式為


什麼是驅動程式?

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

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

展開定義

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

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

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

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

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

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

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

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

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

軟體驅動程式

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

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

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

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

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

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

巴士司機

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

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

函式驅動程序的詳細資訊

到目前為止,我們對 函式驅動程序的定義說明得過於簡化。 我們指出裝置的函式驅動程式是堆疊中直接與裝置通訊的驅動程式。 這適用於直接連線到周邊元件互連 (PCI) 總線的裝置。 PCI 裝置的函式驅動程式會取得映射到該裝置的端口和內存資源的位址。 函式驅動程式會寫入這些位址,直接與裝置通訊。

不過,在許多情況下,裝置不會直接連線到PCI總線。 而是,裝置會連接到與PCI總線連接的主機總線適配器。 例如,USB 烤面包机會連接到主機匯流排適配器(稱為 USB 主機控制器),而該適配器再連接到 PCI 匯流排。 USB 烤箱具有函式驅動程式,而 USB 主機控制器也有函式驅動程式。 烤麵包機的功能驅動程式會透過傳送要求給 USB 主機控制器的功能驅動程式,間接與烤麵包機通訊。 USB 主機控制器的函式驅動程序接著會直接與與烤箱通訊的 USB 主機控制器硬體進行通訊。

圖表,示範 USB 烤箱驅動程式、USB 主機控制器驅動程式和 PCI 總線之間的互動。