2011-03-17 94 views
2

兩件事情,我想起每當我重溫使用Visual Studio的編譯器和鏈接程序生成的Windows驅動程序的主題:使用VS編譯器和鏈接程序生成的Windows驅動程序

  • 它不正式支持。事實上,互聯網上的共識是建立Windows驅動程序的正確方法是使用Windows Driver Kit中包含的編譯器,鏈接器和BUILD工具。但是,Visual Studio 2008包含/ DRIVER鏈接器選項,如下所述:Use the /DRIVER linker option to build a Windows NT kernel mode driver.它的作用是什麼?爲什麼它包含在Visual Studio中,如果不建議將它用於構建驅動程序?

  • 它的工作原理。我幾乎不敢大聲說出來,以免引起正義的內核開發者的憤怒,但事實的真相是使用Visual Studio構建的驅動程序確實可行。我們在工作場所多年來一直以這種方式構建它們,生產的二進制文件已經部署在數百臺機器上,並且沒有任何問題。然而,我知道,缺乏證據並不是缺乏證據,迄今爲止缺乏任何問題並不意味着駕駛VS的駕駛員是安全的。

這裏真正困擾我的是缺乏信息。在互聯網上有一些使用VS構建驅動程序的人發佈的帖子,它們總是繪製相同的響應 - 不支持,不這樣做,通過makefile項目將VSK與VS集成,如果你真的想要使用VS的IDE。但是,我還沒有找到一個答覆,指出你不應該用VS編譯驅動程序的具體原因。

那麼,有沒有人知道如果你使用VS來建立你的驅動程序會發生什麼?有什麼可能出錯?在什麼情況下?我知道你必須自己設置所有的編譯器和鏈接器選項,並且沒問題,但是如果我將它們設置爲錯誤,會發生什麼?驅動程序是不能編譯的,還是將無法鏈接,或者如果它建立好,它會直接崩潰還是隻有當星星對齊時纔會崩潰?爲什麼會這樣做,是什麼原因造成的?除了事實上它沒有官方支持之外,有沒有什麼理由停止用VS創造我們的車手?如果它沒有正式支持,爲什麼把/ DRIVER開關放在VS中?

回答

1

這是常識的原因是因爲產生的缺陷可以是微妙的。這其中大部分都是貨真理,儘管......因爲存在實際問題。如果我沒有記錯的話,在 2005之前(即包含編譯器的第一個DDKs)將會是。如我錯了請糾正我。

通常,我沒有看到很多人反對使用VS編譯器。對於鏈接器,你還必須設置合適的子系統值(即沒有)等等......這只是單調乏味。

但是,請記住,在任何給定時間,WDK編譯器和工具通常都會在最新版本的VS之前。考慮一下:WDK包含的內容與您用來構建Windows本身的內容密切相關。因此,對WDK工具的偏好。

技術上可以做到。但是,如果您發佈到新聞組並提及事實,請不要驚訝,如果您第一次聽到關於該主題的課程而不是您的實際問題;)

+0

自從有一個實際的問題?這就是我最感興趣的 - 一個已知的問題或出現問題的情況。你能提供更多的信息嗎? – 2011-03-21 09:33:36

+0

@Neno Ganchev:IIRC它必須做標記頁面的產生的二進制尋呼或不等... – 0xC0000022L 2011-03-21 10:57:15

0

如果未正式支持, VS中的/ DRIVER開關?

這不是將開關置於VS的問題,而是將其取出。

WDK和VS附帶的C++編譯器/鏈接器由Microsoft內部的相同團隊從相同的源代碼庫(可能來自不同的分支機構,並且在不同的時間點,但具有相同的源代碼庫)構建而成。他們可以配置他們的版本,以便/DRIVER開關不會出現在隨VS一起交付的鏈接器中嗎?當然。維護一個單獨的構建配置並檢查分別與WDK和VS一起交付的正確構建變體是否值得維護?可能不會。

至於爲什麼它沒有得到正式支持......驗證驅動程序開發工具集的專業知識在於Windows團隊,而不是VS團隊。 Windows團隊想要做的最後一件事就是要限定VS版本的驅動程序開發(Windows最終還必須提供支持),如果該版本的時間表不符合時間表隨着Windows。

與驅動程序開發針對相對較小的受衆並通過IDE構建驅動程序開闢了額外功能和測試場景這一事實相結合,並且我並不覺得它沒有官方支持。

+0

嗯,是的,我可以從組織的角度理解它,但這只是讓我相信那裏使用VS構建驅動程序並不存在已知問題,只是它沒有經過測試,可能存在未知問題,所以它們只是在安全地玩遊戲。如果存在我不知道的已知問題,我更加好奇。 – 2011-03-21 09:38:03

+0

@Neno Ganchev:在這種情況下,MS很可能不知道這些問題。從我所知道的這大多是傳給新開發人員的「傳統」。但鑑於WDK的歷史,這個傳統不能太老。例如,Windows 2000 DDK不包含驅動程序。 IIRC的XP DDK是第一個包括他們......這是關於何時必須出現。 – 0xC0000022L 2011-03-21 10:59:34

相關問題