UsbKmdfIrqlExplicit 규칙(kmdf)
UsbKmdfIrqlExplicit 규칙은 KMDF DDI가 올바른 IRQL 수준에서 호출되는지 확인합니다. 이 규칙은 모든 EvtIoCallback 함수에 적용됩니다.
드라이버가 WDF_OBJECT_ATTRIBUTES 구조체를 사용하여 WdfIoQueueCreate 함수를 호출하고 이 DDI에 전달된 디바이스 개체가 기본 특성(WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE 또는 VOID WDF_OBJECT_ATTRIBUTES_INIT)을 사용하여 만든 경우 정적 드라이버 검증 도구가 이 규칙과 관련된 결함을 보고하지 않도록 다음 방법 중 하나로 드라이버를 수정해야 할 수 있습니다.
WDF_OBJECT_ATTRIBUTES 구조체 를 매개 변수로 사용하는 함수를 호출하여 특성을 설정하도록 드라이버 코드를 변경하여 디바이스 특성을 WdfExecutionLevelPassive 또는 WdfExecutionLevelDispatch로 명시적으로 설정합니다.
WdfExecutionLevelPassive 또는 WdfExecutionLevelDispatch가 __analysis_assume 매크로를 사용하여 디바이스 특성에서 설정되었다는 분석을 위해 명시적으로 가정/어설션합니다. 다음은 __analysis_assume(deviceAttributes.ExecutionLevel==WdfExecutionLevelPassive)입니다.
드라이버가 PASSIVE_LEVEL 일부 IOCTL과 DISPATCH_LEVEL 다른 IOCTL을 처리하는 경우 DISPATCH_LEVEL 처리되는 IOCTL을 확인에서 제외해야 할 수 있습니다. __analysis_assume 사용하여 이 작업을 수행할 수 있습니다. 다음은 __analysis_assume(IoControlCode != IOCTL_RH_QUERY_DUMMY_TRANSLATOR_INTERFACE)입니다. 여기서 IOCTL_RH_QUERY_DUMMY_TRANSLATOR_INTERFACE 드라이버 EvtIoDeviceControlCallback의 DISPATCH_LEVEL 처리됩니다.
드라이버 모델: KMDF
테스트 방법
컴파일 시 |
---|
정적 드라이버 검증 도구를 실행하고 UsbKmdfIrqlExplicit 규칙을 지정합니다. 다음 단계를 사용하여 코드 분석을 실행합니다.자세한 내용은 정적 드라이버 검증 도구로 드라이버에서 결함 찾기를 참조하세요. |
적용 대상
WdfUsbInterfaceGetConfiguredPipeWdfUsbInterfaceGetConfiguredSettingIndexWdfUsbInterfaceGetDescriptorWdfUsbInterfaceGetEndpointInformationWdfUsbInterfaceGetInterfaceNumberWdfUsbInterfaceGetNumConfiguredPipesWdfUsbInterfaceGetNumEndpointsWdfUsbInterfaceGetNumSettingsWdfUsbInterfaceSelectSettingWdfUsbTargetDeviceAllocAndQueryStringWdfUsbTargetDeviceCreateWdfUsbTargetDeviceCyclePortSynchronouslyWdfUsbTargetDeviceFormatRequestForControlTransferWdfUsbTargetDeviceFormatRequestForCyclePortWdfUsbTargetDeviceFormatRequestForStringWdfUsbTargetDeviceFormatRequestForUrbWdfUsbTargetDeviceDeviceDeviceDeviceDescriptorWdfUsbTargetDeviceGetInterfaceWdfUsbTargetDeviceGetNumInterfacesWdfUsbTargetDeviceIsConnectedSynchronousWdfUsbTargetDeviceQueryStringWdfUsbTargetDeviceResetPortSynchronouslyWdfUsbTargetDeviceRetrieveConfigDescriptorWdfUsbTargetDeviceRetrieveCurrentFrameNumberWdfUsbTargetDeviceRetrieveInformationWdfUsbTargetDeviceSelectConfigWdfUsbTargetDeviceSendControlTransferSynchronouslyWdfUsbTargetDeviceSendUrbSynchronouslyWdfUsbTargetDeviceWdmGetConfigurationHandleWdfUsbTargetPipeAbortSynchronouslyWdfUsbTargetPipeConfigContinuousReaderWdfUsbTargetPipeFormatRequestForAbortWdfUsbTargetPipeFormatRequestForReadWdfUsbTargetPipeFormatRequestForResetWdfUsbTargetPipeFormatRequestForUrbWdfUsbTargetPipeFormatRequestForWriteWdfUsbTargetPipeGetInformationWdfUsbTargetPipeGetTypeWdfUsbTargetPipeIsInEndpointWdfUsbTargetPipeIsOutEndpointWdfUsbTargetPipeReadSynchronouslyWdfUsbTargetPipeResetSynchronouslyWdfUsbTargetPipeSendUrbSynchronouslyWdfUsbTargetPipeSetNoMaximumPacketSizeCheckWdfUsbTargetPipeWdmGetPipeHandleWdfUsbTargetPipeWriteSynchronously