잠금 규칙 집합(Storport)
이러한 규칙을 사용하여 드라이버가 공유 리소스를 올바르게 관리하는지 확인합니다.
섹션 내용
항목 | Description |
---|---|
Storport(CancelSpinLock 규칙) 규칙은 IoAcquireCancelSpinLock에 대한 각 호출이 즉시 IoReleaseCancelSpinLock을 호출하도록 확인합니다. |
|
QueuedSpinLock 규칙은 KeAcquireInStackQueuedSpinLock을 사용하여 획득한 스택 내 큐에 대기된 스핀 잠금이 KeReleaseInStackQueuedSpinLock을 사용하여 즉시 해제되는지 확인합니다. 또한 디스패치 또는 취소 루틴이 끝날 때 이 드라이버는 잠금을 보유해서는 안 됩니다. |
|
이 규칙은 드라이버가 KeAcquireInStackQueuedSpinLock을 통해 잠금을 먼저 획득하지 않고 KeReleaseInStackQueuedSpinLock 을 호출하지 않는지 확인 합니다. |
|
이 규칙은 KeAcquireSpinLock 호출 후 KeReleaseSpinlock을 호출하는 것을 확인합니다. 드라이버가 잠금을 해제하기 전에 KeAcquireSpinLockRaiseToDpc 또는 KeAcquireSpinLock 을 다시 호출하면 규칙이 실패합니다. 또한 디스패치 또는 취소 루틴을 종료하기 전에 드라이버가 스핀 잠금을 해제해야 합니다. |
|
이 규칙은 KeAcquireSpinLockRaiseToDpc 호출 후 KeReleaseSpinlock을 호출하는 것을 확인합니다. 드라이버가 잠금을 해제하기 전에 KeAcquireSpinLock 또는 KeAcquireSpinLockRaiseToDpc 를 다시 호출하면 규칙이 실패합니다. 또한 디스패치 또는 취소 루틴을 종료하기 전에 드라이버가 스핀 잠금을 해제해야 합니다. |
|
이 규칙은 드라이버가 KeAquireSpinlock 또는 KeAcquireSpinLockRaiseToDpc를 통해 잠금을 먼저 획득하지 않고 KeReleaseSpinLock을 통해 잠금을 해제하려고 시도하지 않는지 확인합니다. 획득된 스핀 잠금이 해제되면 규칙이 통과합니다. |
|
이 규칙은 스핀 잠금을 유지하는 동안 IoStartNextPacket 및 IoCompleteRequest 루틴이 호출되지 않는지 확인합니다. 규칙은 언제든지 유지되는 스핀 잠금 수를 추적하고, 루틴이 호출되면 해당 숫자가 0이 아닌 경우 드라이버는 규칙에 실패합니다. |
|
Miniport 드라이버는 PORT_CONFIGURATION_INFORMATION(Storport) 구조의 InterruptSynchronizationMode 멤버가 InterruptSynchronizePerMessage로 설정된 경우에만 메시지에 대한 MSI 스핀 잠금을 획득해야 합니다. 이 규칙은 동기화 모드가 InterruptSynchronizePerMessage인 경우에만 StorPortAcquireMSISpinLock 호출이 수행되는지 확인합니다. |
|
이 규칙은 StorPortAcquireSpinLock 을 통해 획득한 잠금이 StorPortReleaseSpinLock을 통해 즉시 해제되는지 확인합니다. 미니포트 드라이버는 이미 획득한 잠금을 획득하려고 시도하거나 획득하지 않은 잠금을 해제하려고 시도하는 경우 규칙에 실패합니다. 또한 디스패치 또는 취소 루틴이 끝날 때 드라이버는 스핀 잠금을 보유해서는 안 됩니다. |
|
StorPortSpinLock3 규칙은 StorPortAcquireSpinLock 루틴에 대한 설명서에 설명된 잠금 획득 계층 구조를 확인합니다. |
|
이 규칙은 StorPortSpinLock의 릴리스 대응 규칙입니다. SpinLockRelease 규칙과 유사합니다. |
잠금 규칙 집합을 선택하려면
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(정적 드라이버 검증 도구 명령)를 참조하세요.