靜態驅動程式驗證器 (SDV) 完全支援 WDM、KMDF、NDIS 和 Storport 驅動程式和連結庫,而且對其他驅動程式的支援有限。 若要判斷驅動程式或連結庫是否支援並正確設定,請閱讀本節中所述的需求。
驅動程式或程式庫需求
如果您的驅動程式或連結庫符合下列其中一個條件, 且 未連結到下列任何類別 架構連結庫,您可以在 SDV 分析工具中執行一組完整的規則。
- 您有 WDM 驅動程式或程式庫。
- 您有連結至 WdfLdr.lib 或 WdfDriverEntry.lib 的驅動程式或程式庫。
- 您有連結至 NDIS.lib 的驅動程式或函式庫。
- 您有連結到 Storport.lib 的驅動程式或程式庫。
如果您有超出上述條件的驅動程式,SDV 會考慮驅動程式「一般」並執行一組有限的檢查。
此外,請注意,由 SDV 驗證的連結庫必須是內核模式驅動程式連結庫,而不是一般 C 或 C++ 連結庫。
靜態驅動程式驗證器支持驅動程式或庫,即使驅動程式或庫連結至多個工具程式庫,也符合這些條件。
此外,若要執行分析,SDV 需要:
- 驅動程式已 使用函式角色類型宣告至少一個進入點。
- 驅動程式會正確建置和連結(在 Visual Studio 中使用 MSBuild)。
- 如果驅動程式或連結庫使用 KMDF,驅動程式或連結庫會使用 KDMF 1.7 版或更新版本。
- 如果驅動程式或連結庫使用 NDIS,它會使用 NDIS 6.0、6.1、6.20、6.30 或 6.40 版。 請注意,此列表可能會變更。
- 驅動程式不會結合驅動程式模型(例如 KMDF 與 WDM,或 KMDF 和 NDIS)。
還有其他因素會影響靜態分析結果的質量和精確度。 這些因素包括:
- 使用尚未由 SDV 處理的程式庫。
- 驅動程式的大小,特別是如果驅動程式有超過 100K 行的程式代碼。
- 使用特定語言的功能,例如虛擬函式和指標算術。
Visual Studio 專案需求
若要使用靜態驅動程序驗證器,Visual Studio 項目必須具有下列設定:
- UseDebugLibraries = false
- Platform = Win32 (x86) 或 x64
類別框架庫
如果您有 WDM 驅動程式或連結庫且想要執行 SDV,驅動程式或連結庫不得連結到下列其中一個類別架構連結庫。
| 1394bus.lib | fltMgr.lib | rdbss.lib | usbrpm.lib |
| acpi.lib | FsDepends.lib | RNDISMP.lib | videoprt.lib |
| armppm.lib | fwpkclnt.lib | RNDISMP6.lib | vwififlt.lib |
| ataport.lib | hidclass.lib | RNDISMPX.lib | watchdog.lib |
| ath_hwpci.lib | hidparse.lib | rpcxdr.lib | win32k.lib |
| athhal.lib | hwpolicy.lib | Saha.lib | winhv.lib |
| battc.lib | ipmidrv_hrmcust.lib | scsiport.lib | WMBBCLASS.lib |
| BdaSup.lib | irt30.lib | smclib.lib | |
| bdl.lib | irt30.lib | Soft1667FaultInjectionLimpetPool.lib | |
| btampm.lib | ks.lib | SoftFCKernel.lib | |
| bthport.lib | ksecdd.lib | SoftFCLimpetPool.lib | |
| BTHPRINT.lib | ksmartcpu.lib | SoftSATAKernel.lib | |
| classpnp.lib | mcd.lib | SoftStorageLimpetPool.lib | |
| clfs.lib | mpio.lib | srvnet.lib | |
| cng.lib | mrxsmb.lib | storvsp.lib | |
| crashdmp.lib | msnfsflt.lib | stream.lib | |
| csr_vfp_avdtp.lib | msrpc.lib | tape.lib | |
| diskdump.lib | mup.lib | tbs.lib | |
| drmk.lib | ndistapi.lib | tcpip.lib | |
| dumpata.lib | netio.lib | tdi.lib | |
| dumpfve.lib | ntasn1k.lib | termdd.lib | |
| dxapi.lib | parallel.lib | USBCAMD.lib | |
| dxg.lib | pciidex.lib | USBCAMD2.lib | |
| dxgkrnl.lib | portcls.lib | usbd.lib | |
| dxgmms1.lib | protogon.lib | usbport.lib |
工具程式庫
如果驅動程式或連結庫符合 驅動程式或連結庫需求,靜態驅動程序驗證器支援具有多個公用程式連結庫的驅動程式或連結庫。
| 檔案名稱 |
|---|
| BufferOverflowK.lib |
| hal.lib |
| ntoskrnl.lib |
| ntstrsafe.lib |
| rtlver.lib |
| sehupd.lib |
| wdm.lib |
| wmilib.lib |
| wdmsec.lib |
Static Driver Verifier 和 Microsoft Class Framework 函式庫
如果您使用必須連結到類別架構連結庫的WDM驅動程式,而該驅動程式在此架構清單中,則驅動程式將會無法通過靜態驅動程式驗證器的檢查。 不過,仍有一些一般規則仍可使用,例如 NullCheck 規則 來執行某種層級的靜態驗證。