다음을 통해 공유


WDM(잠금 규칙 집합)

이러한 규칙을 사용하여 드라이버가 공유 리소스를 올바르게 관리하는지 확인합니다.

섹션 내용

항목 Description

CancelSpinLock

CancelSpinLock 규칙은 드라이버가 IoReleaseCancelSpinLock을 호출하기 전에 IoAcquireCancelSpinLock을 호출하고 드라이버가 IoAcquireCancelSpinLock에 대한 후속 호출 전에 IoReleaseCancelSpinLock을 호출하도록 지정합니다.

CancelSpinlockRelease

CancelSpinlockRelease 규칙은 IoAcquireCancelSpinLockIoReleaseCancelSpinLock에 대한 호출이 엄격한 변경에 사용되도록 지정합니다. 즉, IoAcquireCancelSpinLock 에 대한 모든 호출에는 IoReleaseCancelSpinLock에 대한 해당 호출이 있어야 합니다.

CriticalRegions

CriticalRegions 규칙은 드라이버가 KeLeaveCriticalRegion을 호출하기 전에 KeEnterCriticalRegion을 호출해야 하며, 드라이버가 KeEnterCriticalRegion에 대한 후속 호출 전에 KeLeaveCriticalRegion을 호출하도록 지정합니다. (중첩된 호출은 허용됩니다.)

ExclusiveResourceAccess

ExclusiveResourceAccess 규칙은 ExReleaseResourceLite 또는 ExReleaseResourceForThreadLite를 호출하기 전에 드라이버가 ExAcquireResourceExclusiveLite를 호출하도록 지정하고 드라이버가 ExAcquireResourceExclusiveLite에 대한 후속 호출 전에 ExReleaseResourceLite 또는 ExReleaseResourceForThreadLite를 호출하도록 지정합니다.

GuardedRegions

GuardedRegions 규칙은 KeEnterGuardedRegionKeLeaveGuardedRegion에 대한 호출이 엄격한 변경에 사용되는지 확인합니다.

QueuedSpinLock

QueuedSpinLock 규칙은 드라이버가 KeReleaseInStackQueuedSpinLock을 호출하기 전에 KeAcquireInStackQueuedSpinLock을 호출하고 드라이버가 KeAcquireInStackQueuedSpinLock에 대한 후속 호출 전에 KeReleaseInStackQueuedSpinLock을 호출하도록 지정합니다.

QueuedSpinLockRelease

QueuedSpinLockRelease 규칙은 KeAcquireInStackQueuedSpinLockKeReleaseInStackQueuedSpinLock에 대한 호출이 엄격한 교대로 사용되도록 지정합니다.

Spinlock

SpinLock 규칙은 KeAcquireSpinLock을 호출한 후 드라이버가 KeAcquireSpinLock 또는 KeAcquireSpinLockRaiseToDpc에 대한 후속 호출 전에 KeReleaseSpinLock을 호출하도록 지정합니다.

SpinLockDpc

SpinLockDpc 규칙은 KeAcquireSpinLock 또는KeAcquireSpinLockRaiseToDpcKeReleaseSpinLock에 대한 호출을 엄격한 교대로 수행하도록 지정합니다. 즉, KeAcquireSpinLock 또는 KeAcquireSpinLockRaiseToDpc를 호출한 후 드라이버는 KeAcquireSpinLock 또는 KeAcquireSpinLockRaiseToDpc에 대한 후속 호출 전에 KeReleaseSpinLock을 호출해야 합니다.

SpinlockRelease

SpinlockRelease 규칙은 KeReleaseSpinLock에 대한 호출이 KeAcquireSpinLockKeAcquireSpinLockRaiseToDpc를 사용하여 엄격하게 변경되도록 지정합니다. 즉, 드라이버는 KeAcquireSpinLock 또는 KeAcquireSpinLockRaiseToDpc를 호출한 후 KeAcquireSpinLock 또는 KeAcquireSpinLockRaiseToDpc에 대한 후속 호출 전에 KeReleaseSpinLock을 호출해야 합니다.

SpinLockSafe

SpinLockSafe 규칙은 스핀 잠금을 유지하는 동안 IoStartNextPacketIoCompleteRequest가 호출되지 않도록 지정합니다.

WithinCriticalRegion

WithinCriticalRegion 규칙은 특정 동기화 함수에 대한 드라이버의 호출이 KeEnterCriticalRegion을 호출한 후 KeLeaveCriticalRegion을 호출하기 전에만 표시되도록 지정합니다.

영향을 받는 동기화 함수는 다음과 같습니다.

잠금 규칙 집합을 선택하려면

  1. Microsoft Visual Studio에서 드라이버 프로젝트(.vcxProj)를 선택합니다. 드라이버 메뉴에서 정적 드라이버 검증 도구 시작...을 클릭합니다.

  2. 규칙 탭을 클릭합니다. 규칙 집합에서 잠금을 선택합니다.

    Visual Studio 개발자 명령 프롬프트 창에서 기본 규칙 집합을 선택하려면 /검사 옵션을 사용하여 Locking.sdv를 지정합니다. 예를 들면 다음과 같습니다.

    msbuild /t:sdv /p:Inputs="/check:Locking.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
    

    자세한 내용은 정적 드라이버 검증 도구로 드라이버의 결함 찾기MSBuild(정적 드라이버 검증 도구 명령)를 참조하세요.