WDM(잠금 규칙 집합)
이러한 규칙을 사용하여 드라이버가 공유 리소스를 올바르게 관리하는지 확인합니다.
섹션 내용
항목 | Description |
---|---|
CancelSpinLock 규칙은 드라이버가 IoReleaseCancelSpinLock을 호출하기 전에 IoAcquireCancelSpinLock을 호출하고 드라이버가 IoAcquireCancelSpinLock에 대한 후속 호출 전에 IoReleaseCancelSpinLock을 호출하도록 지정합니다. |
|
CancelSpinlockRelease 규칙은 IoAcquireCancelSpinLock 및 IoReleaseCancelSpinLock에 대한 호출이 엄격한 변경에 사용되도록 지정합니다. 즉, IoAcquireCancelSpinLock 에 대한 모든 호출에는 IoReleaseCancelSpinLock에 대한 해당 호출이 있어야 합니다. |
|
CriticalRegions 규칙은 드라이버가 KeLeaveCriticalRegion을 호출하기 전에 KeEnterCriticalRegion을 호출해야 하며, 드라이버가 KeEnterCriticalRegion에 대한 후속 호출 전에 KeLeaveCriticalRegion을 호출하도록 지정합니다. (중첩된 호출은 허용됩니다.) |
|
ExclusiveResourceAccess 규칙은 ExReleaseResourceLite 또는 ExReleaseResourceForThreadLite를 호출하기 전에 드라이버가 ExAcquireResourceExclusiveLite를 호출하도록 지정하고 드라이버가 ExAcquireResourceExclusiveLite에 대한 후속 호출 전에 ExReleaseResourceLite 또는 ExReleaseResourceForThreadLite를 호출하도록 지정합니다. |
|
GuardedRegions 규칙은 KeEnterGuardedRegion 및 KeLeaveGuardedRegion에 대한 호출이 엄격한 변경에 사용되는지 확인합니다. |
|
QueuedSpinLock 규칙은 드라이버가 KeReleaseInStackQueuedSpinLock을 호출하기 전에 KeAcquireInStackQueuedSpinLock을 호출하고 드라이버가 KeAcquireInStackQueuedSpinLock에 대한 후속 호출 전에 KeReleaseInStackQueuedSpinLock을 호출하도록 지정합니다. |
|
QueuedSpinLockRelease 규칙은 KeAcquireInStackQueuedSpinLock 및 KeReleaseInStackQueuedSpinLock에 대한 호출이 엄격한 교대로 사용되도록 지정합니다. |
|
SpinLock 규칙은 KeAcquireSpinLock을 호출한 후 드라이버가 KeAcquireSpinLock 또는 KeAcquireSpinLockRaiseToDpc에 대한 후속 호출 전에 KeReleaseSpinLock을 호출하도록 지정합니다. |
|
SpinLockDpc 규칙은 KeAcquireSpinLock 또는KeAcquireSpinLockRaiseToDpc 및 KeReleaseSpinLock에 대한 호출을 엄격한 교대로 수행하도록 지정합니다. 즉, KeAcquireSpinLock 또는 KeAcquireSpinLockRaiseToDpc를 호출한 후 드라이버는 KeAcquireSpinLock 또는 KeAcquireSpinLockRaiseToDpc에 대한 후속 호출 전에 KeReleaseSpinLock을 호출해야 합니다. |
|
SpinlockRelease 규칙은 KeReleaseSpinLock에 대한 호출이 KeAcquireSpinLock 및 KeAcquireSpinLockRaiseToDpc를 사용하여 엄격하게 변경되도록 지정합니다. 즉, 드라이버는 KeAcquireSpinLock 또는 KeAcquireSpinLockRaiseToDpc를 호출한 후 KeAcquireSpinLock 또는 KeAcquireSpinLockRaiseToDpc에 대한 후속 호출 전에 KeReleaseSpinLock을 호출해야 합니다. |
|
SpinLockSafe 규칙은 스핀 잠금을 유지하는 동안 IoStartNextPacket 및 IoCompleteRequest가 호출되지 않도록 지정합니다. |
|
WithinCriticalRegion 규칙은 특정 동기화 함수에 대한 드라이버의 호출이 KeEnterCriticalRegion을 호출한 후 KeLeaveCriticalRegion을 호출하기 전에만 표시되도록 지정합니다. 영향을 받는 동기화 함수는 다음과 같습니다. |
잠금 규칙 집합을 선택하려면
Microsoft Visual Studio에서 드라이버 프로젝트(.vcxProj)를 선택합니다. 드라이버 메뉴에서 정적 드라이버 검증 도구 시작...을 클릭합니다.
규칙 탭을 클릭합니다. 규칙 집합에서 잠금을 선택합니다.
Visual Studio 개발자 명령 프롬프트 창에서 기본 규칙 집합을 선택하려면 /검사 옵션을 사용하여 Locking.sdv를 지정합니다. 예를 들면 다음과 같습니다.
msbuild /t:sdv /p:Inputs="/check:Locking.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
자세한 내용은 정적 드라이버 검증 도구로 드라이버의 결함 찾기 및 MSBuild(정적 드라이버 검증 도구 명령)를 참조하세요.