1. 程式人生 > >Windows Driver升級到VS2015+Win10 WDK後build的Driver在Win7無法載入

Windows Driver升級到VS2015+Win10 WDK後build的Driver在Win7無法載入

    之前一直用VS2013 + Win8.1 WDK,選擇target OS Version為 Win7,build的Driver可以正常執行。

    Win10 TH2釋出後,有一項WHQL測試為

DF - HyperVisor Code Integrity Readiness Test

這項測試要求Driver支援Device Guard功能,具體可以參考:

https://technet.microsoft.com/en-us/library/dn986865(v=vs.85).aspx
http://blogs.msdn.com/b/windows_hardware_certification/archive/2015/05/22/driver-compatibility-with-device-guard-in-windows-10.aspx

按我的理解,簡單講就是將Driver中的程式碼段和資料段區分開,資料段嚴格設定為不可執行。避免被病毒攻擊利用。

Device Guard的完美支援需要VS2015,需要將之前的VS2013升級到VS2015,升級後發現,同樣的設定build後無法在Win7系統上載入,提升“Driver Corrupted or missing",很明顯應該是compiler換成VS2015導致無法載入,通過Dependency Walker發現某些API找不到,具體為:

NtOSKrnl.exe中沒有memcmp

這讓我很驚訝,因為VS2013是OK的,看起來應該是VS2015 link的Win10 WDK中的lib有問題,通過VS build log的輸出,發現link iointex.lib中的memcmp,正是這個lib會動態link到NtOSKrnl.exe中,而Win7的NtOSKrnl.exe中沒有export memcmp導致依賴性問題。

後來有看到可以link libcntpr.lib中的memcmp,修改link順序,先link libcntpr.lib確實可以避免這邊問題。