IrpTracking 규칙 집합(WDM)
이러한 규칙을 사용하여 드라이버가 IRP(I/O 요청 패킷)를 올바르게 추적하여 IRP가 처리 중인 동안 디바이스가 제거되지 않도록 합니다.
섹션 내용
항목 | 설명 |
---|---|
IoReleaseRemoveLockAndWaitOutsideRemoveDevice 규칙은 PnP 드라이버에 대한 IRP_MN_REMOVE_DEVICE 사용하여 IRP_MJ_PNP 외부에서 IoReleaseRemoveLockAndWait를 호출하지 않도록 지정합니다. |
|
NsRemoveLockMnRemove 규칙은 MinorFunction IRP_MN_REMOVE_DEVICE 사용하여 IRP_MJ_PNP 처리할 때 드라이버가 STATUS_NOT_SUPPORTED 반환하지 않는지 확인합니다. 이 규칙은 FDO 및 FIDO 드라이버에만 적용됩니다. |
|
NsRemoveLockMnSurpriseRemove 규칙은 minorFunction IRP_MN_SUPRISE_REMOVAL 사용하여 IRP_MJ_PNP 요청을 처리할 때 드라이버가 STATUS_NOT_SUPPORTED 반환하지 않는지 확인합니다. 이 규칙은 FDO 및 FIDO 드라이버에만 적용됩니다. |
|
NsRemoveLockQueryMnRemove 규칙은 MinorFunction IRP_MN_QUERY_REMOVE 사용하여 IRP_MJ_PNP 처리할 때 드라이버가 STATUS_NOT_SUPPORTED 반환하지 않는지 확인합니다. 이 규칙은 FDO 및 FIDO 드라이버에만 적용됩니다. |
|
RemoveLock 규칙은 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 올바르게 사용되도록 지정합니다. 또한 IRP_MJ_PNP 또는 IRP_MJ_POWER 루틴이 끝날 때 드라이버는 RemoveLock을 보유해서는 안 됩니다. |
|
RemoveLockCheck 규칙은 MinorFunction IRP_MN_REMOVE_DEVICE 사용하여 IRP_MJ_PNP 처리할 때 IoAcquireRemoveLock 및 IoReleaseRemoveLockAndWait에 대한 호출이 올바르게 사용되는지 확인합니다. |
|
RemoveLockForward 규칙은 IRP를 다른 디바이스로 전달할 때 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 올바르게 사용되는지 확인합니다. |
|
RemoveLockForward2 규칙은 IRP를 다른 디바이스로 전달할 때 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 올바르게 사용되는지 확인합니다. |
|
RemoveLockForwardDeviceControl 규칙은 드라이버가 IoCallDriver를 사용하여 IRP를 다른 디바이스로 전달할 때 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 올바르게 사용되는지 확인합니다. |
|
RemoveLockForwardDeviceControl2 규칙은 드라이버가 IoCallDriver를 사용하여 IRP를 다른 디바이스로 전달할 때 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 올바르게 사용되는지 확인합니다. |
|
RemoveLockForwardDeviceControlInternal 규칙은 IoCallDriver를 사용하여 IRP를 다른 디바이스로 전달할 때 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 올바르게 사용되는지 확인합니다. |
|
RemoveLockForwardDeviceControlInternal2 규칙은 IoCallDriver를 사용하여 IRP를 다른 디바이스로 전달할 때 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 올바르게 사용되는지 확인합니다. |
|
RemoveLockForwardRead 규칙은 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 올바르게 사용되는지 확인합니다. |
|
RemoveLockForwardRead2 규칙은 IoCallDriver를 사용하여 IRP를 다른 디바이스로 전달할 때 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 올바르게 사용되는지 확인합니다. |
|
RemoveLockForwardWrite 규칙은 IoCallDriver를 사용하여 IRP를 다른 디바이스로 전달할 때 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 올바르게 사용되는지 확인합니다. |
|
RemoveLockForwardWrite2 규칙은 IoCallDriver를 사용하여 IRP를 다른 디바이스로 전달할 때 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 올바르게 사용되는지 확인합니다. |
|
RemoveLockMnRemove 규칙은 MinorFunction IRP_MN_REMOVE_DEVICE IRP_MJ_PNP 처리할 때 IoAcquireRemoveLock 및 IoReleaseRemoveLockAndWait에 대한 호출이 올바르게 사용되는지 확인합니다. |
|
RemoveLockMnRemove2 규칙은 IRP가 낮은 드라이버로 전달되기 전에 IRP_MN_REMOVE_DEVICE 요청을 처리할 때 IoAcquireRemoveLock 및 IoReleaseRemoveLockAndWait에 대한 호출이 올바르게 사용되는지 확인합니다. |
|
RemoveLockMnSurpriseRemove 규칙은 MinorFunction IRP_MN_SUPRISE_REMOVAL 사용하여 IRP_MJ_PNP 처리할 때 IoAcquireRemoveLock 및 IoReleaseRemoveLockAndWait에 대한 호출이 올바르게 사용되는지 확인합니다. 드라이버는 스택 아래로 IRP를 전달하기 전에 제거 잠금을 획득해야 합니다. |
|
RemoveLockQueryMnRemove 규칙은 MinorFunction IRP_MN_QUERY_REMOVE_DEVICE 사용하여 IRP_MJ_PNP 처리할 때 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 올바르게 사용되는지 확인합니다. 드라이버는 스택 아래로 IRP를 전달하기 전에 제거 잠금을 획득해야 합니다. |
|
RemoveLockRelease2 규칙은 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 엄격한 변경에 사용되는지 확인합니다. 또한 디스패치 루틴의 끝에서 드라이버는 제거 잠금을 보유해서는 안됩니다. |
|
RemoveLockReleaseCleanup 규칙은 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 엄격한 변경에 사용되도록 지정합니다. IoAcquireRemoveLock에 대한 각 호출에는 IoReleaseRemoveLock에 대한 일치 호출이 있어야 합니다. 또한 디스패치 루틴의 끝에서 드라이버는 제거 잠금을 보유해서는 안됩니다. |
|
RemoveLockReleaseClose 규칙은 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 엄격한 변경에 사용되는지 확인합니다. 또한 디스패치 루틴의 끝에서 드라이버는 제거 잠금을 보유해서는 안됩니다. |
|
RemoveLockReleaseCreate 규칙은 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 엄격한 변경에 사용되는지 확인합니다. 또한 디스패치 루틴의 끝에서 드라이버는 제거 잠금을 보유해서는 안됩니다. |
|
RemoveLockReleaseDeviceControl 규칙은 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 엄격한 변경에 사용되는지 확인합니다. 또한 디스패치 루틴의 끝에서 드라이버는 제거 잠금을 보유해서는 안됩니다. |
|
RemoveLockReleaseInternalDeviceControl 규칙은 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 엄격한 변경에 사용되는지 확인합니다. 또한 디스패치 루틴의 끝에서 드라이버는 제거 잠금을 보유해서는 안됩니다. |
|
RemoveLockReleasePnp 규칙은 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 엄격한 변경에 사용되는지 확인합니다. 또한 디스패치 루틴의 끝에서 드라이버는 제거 잠금을 보유해서는 안됩니다. |
|
RemoveLockReleasePower 규칙은 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 엄격한 변경에 사용되는지 확인합니다. 또한 디스패치 루틴의 끝에서 드라이버는 제거 잠금을 보유해서는 안됩니다. |
|
RemoveLockReleaseRead 규칙은 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 엄격한 변경에 사용되는지 확인합니다. 또한 디스패치 루틴의 끝에서 드라이버는 제거 잠금을 보유해서는 안됩니다. |
|
RemoveLockReleaseShutdown 규칙은 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 엄격한 변경에 사용되는지 확인합니다. 또한 디스패치 루틴의 끝에서 드라이버는 제거 잠금을 보유해서는 안됩니다. |
|
RemoveLockReleaseSystemControl 규칙은 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 엄격한 변경에 사용되는지 확인합니다. 또한 디스패치 루틴의 끝에서 드라이버는 제거 잠금을 보유해서는 안됩니다. |
|
RemoveLockReleaseWrite 규칙은 IoAcquireRemoveLock 및 IoReleaseRemoveLock에 대한 호출이 엄격한 변경에 사용되는지 확인합니다. 또한 디스패치 루틴의 끝에서 드라이버는 제거 잠금을 보유해서는 안됩니다. |
IrpTracking 규칙 집합을 선택하려면
Microsoft Visual Studio에서 드라이버 프로젝트(.vcxProj)를 선택합니다. 드라이버 메뉴에서 정적 드라이버 검증 도구 시작...을 클릭합니다.
규칙 탭을 클릭합니다. 규칙 집합에서 IrpTracking을 선택합니다.
Visual Studio 개발자 명령 프롬프트 창에서 기본 규칙 집합을 선택하려면 /검사 옵션을 사용하여 IrpTracking.sdv를 지정합니다. 예시:
msbuild /t:sdv /p:Inputs="/check:IrpTracking.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
자세한 내용은 정적 드라이버 검증 도구를 사용하여 드라이버 및 정적 드라이버 검증 도구 명령(MSBuild)에서 결함을 찾는 방법을 참조하세요.