所有驅動程式都必須跨所有 Windows 支援的硬體平臺可攜式。 若要達成跨平臺可攜性,驅動程式寫入器應該:
C 程式碼(無彙編語言)。
只使用 WDK 中提供的程式設計介面和標頭,與 Windows 互動。
用 C 編寫驅動程式
所有核心模式驅動程式都應該以 C 撰寫,以便使用系統相容的 C 編譯器重新編譯、重新連結,並在不同的 Microsoft Windows 平臺上執行,而不需要重寫或取代任何程式代碼。 大多數作業系統元件完全以 C 編碼,只有一小部分 HAL 和核心元件以彙編語言編寫,因此作業系統可以輕鬆跨硬體平台移植。 您無法在核心模式驅動程式中使用許多 C++ 語言建構,因此您應該仔細評估使用這類建構。 如需驅動程式包含 C++ 功能時所發生問題的詳細資訊,請參閱 核心模式驅動程式的 C++:優點和缺點 白皮書。
如果其他系統相容編譯器不保證支援任何特定系統相容的 C 編譯器或 C 支援程式庫的功能,驅動程式就不應該依賴這些功能。 一般而言,驅動程式程式代碼應該符合 ANSI C 標準,而且不相依於此標準描述為「實作定義」的任何專案。
要編寫可移植驅動程序,最好避免:
對資料類型的相依性,其大小或版面配置可能因平台而異。
呼叫任何維護狀態的標準 C 執行階段程式庫函式。
呼叫作業系統提供的替代支援常式的任何標準 C 執行階段程式庫函式。
使用 WDK-Supplied 介面
每個 Windows NT 執行元件都會匯出一組核心模式驅動程式支援常式,驅動程式和所有其他核心模式元件會呼叫這些常式。 如果支援常式的基礎實作會隨著時間而變更,則其呼叫端會保持可攜式,因為定義元件的介面不會變更。
WDK 提供一組標頭檔,定義系統特定的數據類型和常數,以協助驅動程式(及所有其他核心模式元件)維持跨平台的可攜性。 所有核心模式驅動程式都包含其中一個主要 WDK 核心模式標頭檔 Wdm.h 或 Ntddk.h。 主要標頭檔不僅會提取定義基本核心模式類型的系統提供的標頭,也會在使用對應的編譯器指示詞編譯驅動程式時,從任何處理器架構特定的標頭中提取適當的選擇。
某些驅動程式,例如 SCSI 迷你埠驅動程式、 NDIS 驅動程式和 視訊迷你埠驅動程式,包含其他系統提供的標頭檔。
如果驅動程式需要平臺相依的定義,最好在 #ifdef 陳述式內隔離這些定義,以便針對適當的硬體平臺編譯和連結每個驅動程式。 不過,您幾乎一律可以使用 WDK 主要標頭檔所提供的支援常式、宏、常數和類型,避免在驅動程式中實作任何平臺特定的條件式編譯程式碼。
核心模式驅動程式可以使用 WDK 中記載的核心模式 RtlXxx 常式。 核心模式驅動程式無法呼叫使用者模式 RtlXxx 常式。