정적 드라이버 검증 도구가 드라이버 또는 라이브러리를 지원하는지 확인

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
  • 플랫폼 = 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

정적 드라이버 검증 도구 및 Microsoft Class Framework 라이브러리

클래스 프레임워크 라이브러리 목록에서 클래스 프레임워크 라이브러리에 연결해야 하는 WDM 드라이버로 작업하는 경우 드라이버는 정적 드라이버 검증 도구 조건에 실패합니다. 그러나 일정 수준의 정적 확인을 수행하기 위해 NullCheck 규칙 과 같이 계속 사용할 수 있는 몇 가지 일반 규칙이 있습니다.