REQUESTProcessing 규칙 집합(KMDF)
이러한 규칙을 사용하여 드라이버가 IRP(I/O 요청 패킷)를 올바르게 완료하거나 취소했는지 확인합니다.
섹션 내용
항목 | Description |
---|---|
ChangeQueueState 규칙은 WDF 드라이버가 동시 스레드에서 큐의 상태를 변경하려고 하지 않거나 동일한 스레드 내에서 DDI를 하나씩 변경하는 상태를 호출하지 않도록 지정합니다. 큐 상태 변경 콜백 함수는 WdfIoQueueStop, WdfIoQueueStopSynchronously, WdfIoQueuePurgeSynchronously, WdfIoQueueDrain, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurgeSynchronously입니다. 큐 상태 변경이 이미 진행 중일 때 이러한 DDI가 호출되면 컴퓨터가 충돌하거나 응답하지 않게 됩니다. |
|
CompleteCanceledReq 규칙은 요청이 이미 취소된 경우 요청이 더 이상 유효하지 않으며 드라이버가 요청을 완료하지 않도록 지정합니다. 드라이버가 이전에 취소 가능으로 표시된 요청의 표시를 해제하는 동안 요청이 아직 취소되지 않은 것을 검사 합니다. 드라이버가 이 검사 않으면 드라이버가 해제된 요청을 완료할 수 있습니다. |
|
DoubleCompletion 규칙은 드라이버가 I/O 요청을 두 번 완료하지 않도록 지정합니다. 동일한 요청에 대해 WdfRequestComplete, WdfRequestCompleteWithInformation, WdfRequestCompleteWithPriorityBoost 메서드를 한 행에 두 번 호출하면 안 됩니다. |
|
DoubleCompletionLocal 규칙은 드라이버가 I/O 요청을 두 번 완료하지 않도록 지정합니다. |
|
EvtIoStopCancel 규칙은 EvtIoStop 콜백 함수 내에서 드라이버가 취소할 수 없는 I/O 요청에 대해 다음 메서드 중 하나를 호출하도록 지정합니다. |
|
EvtIoStopCompleteOrStopAck 규칙은 EvtIoStop 콜백 함수 내에서 드라이버가 프레임워크에서 제공하는 각 I/O 요청에 대해 다음 메서드 중 하나를 호출하도록 지정합니다. 이 작업이 수행되지 않으면 드라이버가 시스템이 다른 저전력 상태로 진입하지 못하도록 차단할 수 있습니다. |
|
EvtSurpriseRemoveNoSuspendQueue 규칙은 WDF 드라이버가 EvtDeviceSurpriseRemoval 콜백 함수에서 큐를 드레이닝, 중지 또는 제거하지 않도록 지정합니다. 대신 자체 관리형 I/O 콜백 함수를 사용해야 합니다. EvtDeviceSurpriseRemoval 콜백 함수는 전원 다운 경로와 동기화되지 않습니다. |
|
FileObject 구성 규칙은 WdfRequestGetFileObject 메서드에 대한 호출 앞에 WdfDeviceInitSetFileObjectConfig를 호출하도록 지정합니다. |
|
InternalIoctlReqs 규칙은 내부 IOCTL 요청이 부적절한 KMDF 요청 전송 DPI(디바이스 드라이버 인터페이스)에 전달되지 않도록 지정합니다. |
|
InvalidReqAccess 규칙은 요청이 완료되거나 취소된 후 액세스되지 않도록 지정합니다. 이 규칙은 이중 완성을 위해 검사 규칙 또는 요청에 대해 검사 규칙이 취소 가능한 것으로 두 번 표시된 규칙과 같은 다른 규칙과 겹칠 수 있습니다. |
|
InvalidReqAccessLocal 규칙은 로컬로 만든 요청이 완료되거나 취소된 후에 액세스되지 않도록 지정합니다. 이 규칙은 이중 완성을 위해 검사 규칙 또는 요청에 대해 검사 규칙이 취소 가능한 것으로 두 번 표시된 규칙과 같은 다른 규칙과 겹칠 수 있습니다. |
|
IoctlReqs 규칙은 IOCTL 요청을 부적절한 KMDF 요청에 전달하거나 DPI(디바이스 드라이버 인터페이스)를 보내서는 안 되도록 지정합니다. |
|
MarkCancOnCancReqLocal 규칙은 동일한 I/O 요청에서 WdfRequestMarkCancelable 메서드를 두 번 연속으로 호출할 수 없음을 지정합니다. |
|
NoIoQueuePurgeSynchronously 규칙은 WDF 드라이버가 다음 EvtIO 큐 개체 이벤트 콜백 함수에서 WdfIoQueueStopSynchronousously, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurgeSynchronously 또는 WdfIoQueuePurgeSynchronousously 함수를 호출하지 않는지 확인합니다. |
|
OutputBufferAPI 규칙은 버퍼 검색을 위한 올바른 DDI가 EvtIoWrite 콜백 함수에 사용되도록 지정합니다. EvtIoWrite 콜백 함수 내에서 버퍼 검색을 위해 다음 DDI를 호출할 수 없습니다. |
|
ReadReqs 규칙은 읽기 요청이 부적절한 KMDF 메서드에 전달되지 않도록 지정합니다. |
|
ReqCompletionRoutine 규칙은 요청이 I/O 대상으로 전송되기 전에 완료 루틴을 설정해야 한다고 지정합니다. |
|
ReqDelete 규칙은 드라이버에서 만든 요청이 WdfRequestCompleteXxx 함수에 전달되지 않도록 지정합니다. 대신 완료 시 요청을 삭제해야 합니다. |
|
ReqIsCancOnCancReq 규칙은 취소 가능으로 표시되지 않은 요청에서만 WdfRequestIsCanceled 메서드를 호출할 수 있도록 지정합니다. |
|
ReqMarkCancelableSend 규칙은 드라이버에서 전달한 요청이 WdfRequestMarkCancelable을 호출하여 취소 가능으로 표시되지 않도록 지정합니다. |
|
DeferredRequestCompleted 규칙은 필터가 아닌 드라이버의 경우 요청이 지연되거나 전달되지 않거나 WdfRequestStopAcknowledge가 호출되는 경우 드라이버의 기본 I/O 큐에 표시되는 각 요청을 완료해야 한다고 지정합니다. |
|
RequestFormattedValid 규칙은 드라이버가 I/O 대상으로 보내기 전에 WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET 요청을 제외한 모든 요청의 형식을 지정합니다. |
|
다음 상황 중 하나에서 요청에 대해 WdfRequestGetStatus를 호출해야 한다고 지정하는 RequestGetStatusValid 규칙입니다.
|
|
RequestSendAndForgetNoFormatting 규칙은 드라이버가 보내기 옵션 WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET I/O 대상으로 보내기 전에 I/O 대상 서식 함수를 사용하여 요청의 형식을 지정하지 않는지 확인합니다. |
|
RequestSendAndForgetNoFormatting2 규칙은 보내기 옵션이 WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET I/O 대상으로 보내기 전에 드라이버가 I/O 대상 서식 함수를 사용하여 요청의 형식을 지정하지 않는지 확인합니다. |
|
StopAckWithinEvtIoStop 규칙은 WdfRequestStopAcknowledge 함수가 EvtIoStop 콜백 함수 내에서만 호출되도록 지정합니다. |
|
WdfIoQueueFindRequestFailed 규칙은 WdfIoQueueFindRequestFailed가 STATUS_SUCCESS 반환한 후에만 WdfIoQueueRetrieveFoundRequest 또는 WdfObjectDereference를 호출해야 한다고 지정합니다. |
|
WdfIoQueueRetrieveFoundRequest 규칙은 WdfIoQueueFindRequest가 호출되고 STATUS_SUCCESS 반환된 후에만 WdfIoQueueRetrieveFoundRequest 메서드가 호출되고 동일한 요청에 대해 WdfObjectDereference가 호출되지 않음을 지정합니다. |
|
WdfIoQueueRetrieveNextRequest 규칙은 WdfIoQueueFindRequest가 호출된 후 WdfIoQueueRetrieveNextRequest가 호출되지 않도록 지정합니다. |
|
WriteReqs 규칙은 쓰기 요청이 부적절한 KMDF 메서드에 전달되지 않도록 지정합니다. |
RequestProcessing 규칙 집합을 선택하려면
Microsoft Visual Studio에서 드라이버 프로젝트(.vcxProj)를 선택합니다. 드라이버 메뉴에서 정적 드라이버 검증 도구 시작...을 클릭합니다.
규칙 탭을 클릭합니다. 규칙 집합에서 RequestProcessing을 선택합니다.
Visual Studio 개발자 명령 프롬프트 창에서 기본 규칙 집합을 선택하려면 /검사 옵션을 사용하여 RequestProcessing.sdv를 지정합니다. 예를 들면 다음과 같습니다.
msbuild /t:sdv /p:Inputs="/check:RequestProcessing.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
자세한 내용은 정적 드라이버 검증 도구를 사용하여 드라이버에서 결함 찾기 및 정적 드라이버 검증 도구 명령(MSBuild)을 참조하세요.