다음을 통해 공유


REQUESTProcessing 규칙 집합(KMDF)

이러한 규칙을 사용하여 드라이버가 IRP(I/O 요청 패킷)를 올바르게 완료하거나 취소했는지 확인합니다.

섹션 내용

항목 Description

ChangeQueueState

ChangeQueueState 규칙은 WDF 드라이버가 동시 스레드에서 큐의 상태를 변경하려고 하지 않거나 동일한 스레드 내에서 DDI를 하나씩 변경하는 상태를 호출하지 않도록 지정합니다. 큐 상태 변경 콜백 함수는 WdfIoQueueStop, WdfIoQueueStopSynchronously, WdfIoQueuePurgeSynchronously, WdfIoQueueDrain, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurgeSynchronously입니다. 큐 상태 변경이 이미 진행 중일 때 이러한 DDI가 호출되면 컴퓨터가 충돌하거나 응답하지 않게 됩니다.

CompleteCanceledReq

CompleteCanceledReq 규칙은 요청이 이미 취소된 경우 요청이 더 이상 유효하지 않으며 드라이버가 요청을 완료하지 않도록 지정합니다. 드라이버가 이전에 취소 가능으로 표시된 요청의 표시를 해제하는 동안 요청이 아직 취소되지 않은 것을 검사 합니다. 드라이버가 이 검사 않으면 드라이버가 해제된 요청을 완료할 수 있습니다.

DoubleCompletion

DoubleCompletion 규칙은 드라이버가 I/O 요청을 두 번 완료하지 않도록 지정합니다. 동일한 요청에 대해 WdfRequestComplete, WdfRequestCompleteWithInformation, WdfRequestCompleteWithPriorityBoost 메서드를 한 행에 두 번 호출하면 안 됩니다.

DoubleCompletionLocal

DoubleCompletionLocal 규칙은 드라이버가 I/O 요청을 두 번 완료하지 않도록 지정합니다.

EvtIoStopCancel

EvtIoStopCancel 규칙은 EvtIoStop 콜백 함수 내에서 드라이버가 취소할 수 없는 I/O 요청에 대해 다음 메서드 중 하나를 호출하도록 지정합니다.

EvtIoStopCompleteOrStopAck

EvtIoStopCompleteOrStopAck 규칙은 EvtIoStop 콜백 함수 내에서 드라이버가 프레임워크에서 제공하는 각 I/O 요청에 대해 다음 메서드 중 하나를 호출하도록 지정합니다. 이 작업이 수행되지 않으면 드라이버가 시스템이 다른 저전력 상태로 진입하지 못하도록 차단할 수 있습니다.

EvtSurpriseRemoveNoSuspendQueue

EvtSurpriseRemoveNoSuspendQueue 규칙은 WDF 드라이버가 EvtDeviceSurpriseRemoval 콜백 함수에서 큐를 드레이닝, 중지 또는 제거하지 않도록 지정합니다. 대신 자체 관리형 I/O 콜백 함수를 사용해야 합니다. EvtDeviceSurpriseRemoval 콜백 함수는 전원 다운 경로와 동기화되지 않습니다.

FileObject 구성됨

FileObject 구성 규칙은 WdfRequestGetFileObject 메서드에 대한 호출 앞에 WdfDeviceInitSetFileObjectConfig를 호출하도록 지정합니다.

InternalIoctlReqs

InternalIoctlReqs 규칙은 내부 IOCTL 요청이 부적절한 KMDF 요청 전송 DPI(디바이스 드라이버 인터페이스)에 전달되지 않도록 지정합니다.

InvalidReqAccess

InvalidReqAccess 규칙은 요청이 완료되거나 취소된 후 액세스되지 않도록 지정합니다. 이 규칙은 이중 완성을 위해 검사 규칙 또는 요청에 대해 검사 규칙이 취소 가능한 것으로 두 번 표시된 규칙과 같은 다른 규칙과 겹칠 수 있습니다.

InvalidReqAccessLocal

InvalidReqAccessLocal 규칙은 로컬로 만든 요청이 완료되거나 취소된 후에 액세스되지 않도록 지정합니다. 이 규칙은 이중 완성을 위해 검사 규칙 또는 요청에 대해 검사 규칙이 취소 가능한 것으로 두 번 표시된 규칙과 같은 다른 규칙과 겹칠 수 있습니다.

IoctlReqs

IoctlReqs 규칙은 IOCTL 요청을 부적절한 KMDF 요청에 전달하거나 DPI(디바이스 드라이버 인터페이스)를 보내서는 안 되도록 지정합니다.

MarkCancOnCancReqLocal

MarkCancOnCancReqLocal 규칙은 동일한 I/O 요청에서 WdfRequestMarkCancelable 메서드를 두 번 연속으로 호출할 수 없음을 지정합니다.

NoIoQueuePurgeSynchronously

NoIoQueuePurgeSynchronously 규칙은 WDF 드라이버가 다음 EvtIO 큐 개체 이벤트 콜백 함수에서 WdfIoQueueStopSynchronousously, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurgeSynchronously 또는 WdfIoQueuePurgeSynchronousously 함수를 호출하지 않는지 확인합니다.

OutputBufferAPI

OutputBufferAPI 규칙은 버퍼 검색을 위한 올바른 DDI가 EvtIoWrite 콜백 함수에 사용되도록 지정합니다. EvtIoWrite 콜백 함수 내에서 버퍼 검색을 위해 다음 DDI를 호출할 수 없습니다.

ReadReqs

ReadReqs 규칙은 읽기 요청이 부적절한 KMDF 메서드에 전달되지 않도록 지정합니다.

ReqCompletionRoutine

ReqCompletionRoutine 규칙은 요청이 I/O 대상으로 전송되기 전에 완료 루틴을 설정해야 한다고 지정합니다.

ReqDelete

ReqDelete 규칙은 드라이버에서 만든 요청이 WdfRequestCompleteXxx 함수에 전달되지 않도록 지정합니다. 대신 완료 시 요청을 삭제해야 합니다.

ReqIsCancOnCancReq

ReqIsCancOnCancReq 규칙은 취소 가능으로 표시되지 않은 요청에서만 WdfRequestIsCanceled 메서드를 호출할 수 있도록 지정합니다.

ReqMarkCancelableSend

ReqMarkCancelableSend 규칙은 드라이버에서 전달한 요청이 WdfRequestMarkCancelable을 호출하여 취소 가능으로 표시되지 않도록 지정합니다.

RequestCompleted

DeferredRequestCompleted 규칙은 필터가 아닌 드라이버의 경우 요청이 지연되거나 전달되지 않거나 WdfRequestStopAcknowledge가 호출되는 경우 드라이버의 기본 I/O 큐에 표시되는 각 요청을 완료해야 한다고 지정합니다.

RequestFormattedValid

RequestFormattedValid 규칙은 드라이버가 I/O 대상으로 보내기 전에 WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET 요청을 제외한 모든 요청의 형식을 지정합니다.

RequestGetStatusValid

다음 상황 중 하나에서 요청에 대해 WdfRequestGetStatus를 호출해야 한다고 지정하는 RequestGetStatusValid 규칙입니다.

  • WdfRequestSend가 실패를 반환하는 경우
  • 요청이 WDF_REQUEST_SEND_OPTION_SYNCHRONOUS 함께 전송된 경우

RequestSendAndForgetNoFormatting

RequestSendAndForgetNoFormatting 규칙은 드라이버가 보내기 옵션 WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET I/O 대상으로 보내기 전에 I/O 대상 서식 함수를 사용하여 요청의 형식을 지정하지 않는지 확인합니다.

RequestSendAndForgetNoFormatting2

RequestSendAndForgetNoFormatting2 규칙은 보내기 옵션이 WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET I/O 대상으로 보내기 전에 드라이버가 I/O 대상 서식 함수를 사용하여 요청의 형식을 지정하지 않는지 확인합니다.

StopAckWithinEvtIoStop

StopAckWithinEvtIoStop 규칙은 WdfRequestStopAcknowledge 함수가 EvtIoStop 콜백 함수 내에서만 호출되도록 지정합니다.

WdfIoQueueFindRequestFailed

WdfIoQueueFindRequestFailed 규칙은 WdfIoQueueFindRequestFailed가 STATUS_SUCCESS 반환한 후에만 WdfIoQueueRetrieveFoundRequest 또는 WdfObjectDereference를 호출해야 한다고 지정합니다.

WdfIoQueueRetrieveFoundRequest

WdfIoQueueRetrieveFoundRequest 규칙은 WdfIoQueueFindRequest가 호출되고 STATUS_SUCCESS 반환된 후에만 WdfIoQueueRetrieveFoundRequest 메서드가 호출되고 동일한 요청에 대해 WdfObjectDereference가 호출되지 않음을 지정합니다.

WdfIoQueueRetrieveNextRequest

WdfIoQueueRetrieveNextRequest 규칙은 WdfIoQueueFindRequest가 호출된 후 WdfIoQueueRetrieveNextRequest가 호출되지 않도록 지정합니다.

WriteReqs

WriteReqs 규칙은 쓰기 요청이 부적절한 KMDF 메서드에 전달되지 않도록 지정합니다.

RequestProcessing 규칙 집합을 선택하려면

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

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

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

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

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