LocalIrpProcessing 규칙 집합(WDM)
이러한 규칙을 사용하여 드라이버가 드라이버에서 만든 IRP(I/O 요청 패킷)를 올바르게 처리하는지 확인합니다.
섹션 내용
항목 | Description |
---|---|
IoAllocateComplete 규칙은 IRP가 IoAllocateIrp로 만들어진 경우 드라이버가 IoCompleteRequest를 호출하지 않도록 지정합니다. |
|
IoAllocateFree 규칙은 드라이버가 이전에 IoAllocateIrp로 할당된 IRP에서만 IoFreeIrp를 사용하도록 지정합니다. |
|
IoAllocateForward 규칙은 IRP가 IoAllocateIrp 호출에 의해 생성되는 경우 IoCallDriver 또는 PoCallDriver를 호출하기 전에 드라이버가 완료 루틴을 설정해야 한다고 지정합니다. |
|
IoAllocateIrpSignalEventInCompletion 규칙은 Irp-PendingReturned> 플래그가 설정되고 완료 루틴이 로컬로 생성된 비동기 IRP를 처리할 때 드라이버가 완료 루틴에서 KeSetEvent를 호출하도록 지정합니다. |
|
IoAllocateIrpSignalEventInCompletion2 규칙은 Irp-PendingReturned> 플래그가 설정되고 완료 루틴이 로컬로 생성된 비동기 IRP를 처리할 때 완료 루틴에서 KeSetEvent를 호출하도록 지정합니다. |
|
IoAllocateIrpSignalEventInCompletion3 규칙은 Irp-PendingReturned> 플래그가 설정되고 완료 루틴이 로컬로 생성된 비동기 IRP를 처리할 때 완료 루틴에서 KeSetEvent를 호출하도록 지정합니다. |
|
IoAllocateIrpSignalEventInCompletionTimeout 규칙은 IRP의 이벤트가 완료 루틴에서 신호를 받아야 하므로 낮은 드라이버가 반환될 때까지 이 드라이버가 무기한 대기한다는 것을 감지하면 결함을 보고합니다. |
|
IoBuildDeviceControlNoFree 규칙은 IoBuildDeviceIoControlRequest를 호출하는 드라이버가 IoFreeIrp을 호출하지 않도록 지정합니다. |
|
IoBuildDeviceControlWait 규칙은 IoCallDriver 또는 PoCallDriver가 STATUS_PENDING 반환하는 경우 KeWaitForSingleObject 루틴을 호출해야 한다고 지정합니다. |
|
IoBuildDeviceControlWaitTimeout 규칙은 IRP의 이벤트가 완료 루틴에서 신호를 받아야 하므로 이 드라이버가 더 낮은 드라이버가 반환될 때까지 무기한 대기한다는 것을 감지하면 결함을 보고합니다. |
|
IoBuildDeviceIoControlSetEvent 규칙은 드라이버가 호출자가 할당하고 초기화된 이벤트 개체에 대한 포인터를 제공하는 경우 IoBuildDeviceIoControlRequest를 호출하는 드라이버가 KeSetEvent를 호출하지 않도록 지정합니다. 이 IRP에 대해 드라이버에서 KeSetEvent 를 호출할 필요가 없습니다. |
|
IoBuildAsynchronousFsdRequest를 사용하여 IRP를 만든 경우 IoBuildFsdComplete 규칙은 드라이버가 IoCompleteRequest를 호출하지 않도록 지정합니다. |
|
IoBuildAsynchronousFsdRequest를 호출하여 IRP를 생성하는 경우 드라이버가 IoCallDriver 또는 PoCallDriver를 호출하기 전에 완료 루틴을 설정해야 한다고 IoBuildFsdForward 규칙은 지정합니다. |
|
IoBuildFsdFree 규칙은 드라이버가 이전에 IoBuildAsynchronousFsdRequest와 함께 할당한 IRP에서만 IoFreeIrp를 사용하도록 지정합니다. |
|
IoBuildFsdIrpSignalEventInCompletion 규칙은 Irp-PendingReturned> 플래그가 설정되고 완료 루틴이 로컬로 생성된 비동기 IRP를 처리할 때 드라이버가 완료 루틴에서 KeSetEvent를 호출하도록 지정합니다. |
|
IoBuildFsdIrpSignalEventInCompletion2 규칙은 Irp-PendingReturned> 플래그가 설정되고 완료 루틴이 로컬로 생성된 비동기 IRP를 처리할 때 완료 루틴에서 KeSetEvent를 호출하도록 지정합니다. |
|
IoBuildFsdIrpSignalEventInCompletion3 규칙은 Irp-PendingReturned> 플래그가 설정되고 완료 루틴이 로컬로 생성된 비동기 IRP를 처리할 때 완료 루틴에서 KeSetEvent를 호출하도록 지정합니다. |
|
IoBuildFsdIrpSignalEventInCompletionTimeout 규칙은 IRP의 이벤트가 완료 루틴에서 신호를 받아야 하므로 드라이버가 하위 드라이버가 반환될 때까지 무기한 대기할 때 결함을 보고합니다. |
|
IoBuildSynchronousFsdRequestNoFree 규칙은 IoBuildSynchronousFsdRequest를 호출하는 드라이버가 IoFreeIrp를 호출하지 않도록 지정합니다. |
|
IoBuildSynchronousFsdRequestWait 규칙은 IoCallDriver 또는 PoCallDriver가 STATUS_PENDING 반환하는 경우 KeWaitForSingleObject를 호출해야 한다고 지정합니다. |
|
IoBuildSynchronousFsdRequestWaitTimeout 규칙은 IRP의 이벤트가 완료 루틴에서 신호를 받아야 하므로 이 드라이버가 낮은 드라이버가 반환될 때까지 무기한 대기한다는 것을 감지하는 경우 결함을 보고합니다. |
|
RequestedPowerIrp 규칙은 드라이버가 포인터 변수가 NULL로 |
LocalIrpProcessing 규칙 집합을 선택하려면
Microsoft Visual Studio에서 드라이버 프로젝트(.vcxProj)를 선택합니다. 드라이버 메뉴에서 정적 드라이버 검증 도구 시작...을 클릭합니다.
규칙 탭을 클릭합니다. 규칙 집합에서 LocalIrpProcessing을 선택합니다.
Visual Studio 개발자 명령 프롬프트 창에서 기본 규칙 집합을 선택하려면 /검사 옵션을 사용하여 LocalIrpProcessing.sdv를 지정합니다. 예를 들면 다음과 같습니다.
msbuild /t:sdv /p:Inputs="/check:LocalIrpProcessing.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
자세한 내용은 정적 드라이버 검증 도구를 사용하여 드라이버에서 결함 찾기 및 정적 드라이버 검증 도구 명령(MSBuild)을 참조하세요.