可攜式

所有驅動程式都必須可移植到所有 Windows 支援的硬體平臺。 若要達到跨平臺可移植性,驅動程式寫入器應該:

  • C 中的程式代碼 (沒有元件語言) 。

  • 僅使用 WDK 中提供的程式設計介面和標頭,與 Windows 互動。

以 C 撰寫驅動程式程式代碼

所有內核模式驅動程式都應該以 C 撰寫,以便使用系統相容的 C 編譯程式重新編譯、重新連結,並在不同的 Microsoft Windows 平台上執行,而不需重寫或取代任何程式代碼。 大部分的操作系統元件全都以 C 撰寫,只有一小部分的 HAL 和核心元件是以元件語言撰寫,因此操作系統可輕易地跨硬體平臺移植。 您無法在內核模式驅動程式中使用許多 C++ 語言建構,因此您應該仔細評估使用這類建構。 如需驅動程式包含 C++ 功能時所發生問題的詳細資訊,請參閱 核心模式驅動程式的 C++:P ros 和 Cons 白皮書。

如果其他系統相容編譯程式不保證支持這些功能,驅動程式不應依賴任何特定系統相容 C 編譯程式或 C 支援連結庫的功能。 一般而言,驅動程式程式代碼應符合 ANSI C 標準,且不取決於此標準描述為「實作定義」的任何專案。

若要撰寫可攜式驅動程式,最好避免:

  • 相依於不同平臺的大小或版面配置可能會有所不同的數據類型。

  • 呼叫維護狀態的任何標準 C 執行時間連結庫函式。

  • 呼叫作業系統提供替代支援例程的任何標準 C 運行時間連結庫函式。

使用 WDK-Supplied 介面

每個 Windows NT 執行元件都會匯出一組內核模式驅動程式支援驅動程式和其他所有內核模式元件呼叫的例程。 如果支援例程的基礎實作隨著時間變更,其呼叫端仍可攜,因為定義元件的介面不會變更。

WDK 提供一組頭文件,這些頭檔定義系統特定的數據類型和常數,驅動程式 (和所有其他核心模式元件) 用來協助維護從一個平臺到另一個平臺的可移植性。 所有內核模式驅動程式都包含其中一個主要 WDK 核心模式頭檔、Wdm.h 或 Ntddk.h。 當驅動程式使用對應的編譯程式指示詞編譯時,主要標頭檔不僅會提取定義基本核心模式類型的系統提供的標頭,也會從任何處理器架構特定標頭中選取適當的選項。

某些驅動程式,例如 SCSI 迷你埠驅動程式NDIS 驅動程式視訊迷你埠驅動程式,包括其他系統提供的頭檔。

如果驅動程式需要平臺相依的定義,最好在 #ifdef 語句中隔離這些定義,以便針對適當的硬體平臺編譯和連結每個驅動程式。 不過,您幾乎一律可以避免使用 WDK 主要標頭檔提供的支援例程、宏、常數和類型,在驅動程式中實作任何平臺特定、有條件地編譯的程式代碼。

內核模式驅動程式可以使用 WDK 中記載的核心模式 RtlXxx 例程。 核心模式驅動程式無法呼叫使用者模式 RtlXxx 例程。