정적 드라이버 검증 도구가 드라이버 또는 라이브러리를 지원하는지 확인
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 규칙 과 같이 계속 사용할 수 있는 몇 가지 일반 규칙이 있습니다.