KmdfIrql rule (kmdf)

The KmdfIrql rule specifies that a driver calls a framework method at an IRQL that is less than or equal to the maximum IRQL for that method.

This rule is similar to the KmdfIrql2 rule; however, the KmdfIrql2 rule is performed on callback functions which have IRQL requirements dependent on their related object’s execution level specification.

Driver model: KMDF

How to test

At compile time

Run Static Driver Verifier and specify the KmdfIrql rule.

Use the following steps to run an analysis of your code:
  1. Prepare your code (use role type declarations).
  2. Run Static Driver Verifier.
  3. View and analyze the results.

For more information, see Using Static Driver Verifier to Find Defects in Drivers.

Applies to

WdfChildListAddOrUpdateChildDescriptionAsPresent WdfChildListBeginIteration WdfChildListBeginScan WdfChildListCreate WdfChildListEndIteration WdfChildListEndScan WdfChildListGetDevice WdfChildListRequestChildEject WdfChildListRetrieveAddressDescription WdfChildListRetrieveNextDevice WdfChildListRetrievePdo WdfChildListUpdateAllChildDescriptionsAsPresent WdfChildListUpdateChildDescriptionAsMissing WdfCmResourceListAppendDescriptor WdfCmResourceListGetCount WdfCmResourceListGetDescriptor WdfCmResourceListInsertDescriptor WdfCmResourceListRemove WdfCmResourceListRemoveByDescriptor WdfCollectionAdd WdfCollectionCreate WdfCollectionGetCount WdfCollectionGetFirstItem WdfCollectionGetItem WdfCollectionGetLastItem WdfCollectionRemove WdfCollectionRemoveItem WdfCommonBufferCreate WdfCommonBufferCreateWithConfig WdfCommonBufferGetAlignedLogicalAddress WdfCommonBufferGetAlignedVirtualAddress WdfCommonBufferGetLength WdfControlDeviceInitAllocate WdfControlDeviceInitSetShutdownNotification WdfControlFinishInitializing WdfDeviceAddDependentUsageDeviceObject WdfDeviceAddQueryInterface WdfDeviceAddRemovalRelationsPhysicalDevice WdfDeviceAllocAndQueryProperty WdfDeviceAssignMofResourceName WdfDeviceAssignS0IdleSettings WdfDeviceAssignSxWakeSettings WdfDeviceClearRemovalRelationsDevices WdfDeviceConfigureRequestDispatching WdfDeviceCreate WdfDeviceCreateDeviceInterface WdfDeviceCreateSymbolicLink WdfDeviceEnqueueRequest WdfDeviceGetAlignmentRequirement WdfDeviceGetCharacteristics WdfDeviceGetDefaultQueue WdfDeviceGetDevicePnpState WdfDeviceGetDevicePowerPolicyState WdfDeviceGetDevicePowerState WdfDeviceGetDeviceState WdfDeviceGetDriver WdfDeviceGetFileObject WdfDeviceGetIoTarget WdfDeviceGetSystemPowerAction WdfDeviceIndicateWakeStatus WdfDeviceInitAssignName WdfDeviceInitAssignSDDLString WdfDeviceInitAssignWdmIrpPreprocessCallback WdfDeviceInitFree WdfDeviceInitRegisterPnpStateChangeCallback WdfDeviceInitRegisterPowerPolicyStateChangeCallback WdfDeviceInitRegisterPowerStateChangeCallback WdfDeviceInitSetCharacteristics WdfDeviceInitSetDeviceClass WdfDeviceInitSetDeviceType WdfDeviceInitSetExclusive WdfDeviceInitSetFileObjectConfig WdfDeviceInitSetIoInCallerContextCallback WdfDeviceInitSetIoType WdfDeviceInitSetPnpPowerEventCallbacks WdfDeviceInitSetPowerInrush WdfDeviceInitSetPowerNotPageable WdfDeviceInitSetPowerPageable WdfDeviceInitSetPowerPolicyEventCallbacks WdfDeviceInitSetPowerPolicyOwnership WdfDeviceInitSetRequestAttributes WdfDeviceMiniportCreate WdfDeviceOpenRegistryKey WdfDeviceQueryProperty WdfDeviceRemoveDependentUsageDeviceObject WdfDeviceRemoveRemovalRelationsPhysicalDevice WdfDeviceResumeIdle WdfDeviceRetrieveDeviceInterfaceString WdfDeviceRetrieveDeviceName WdfDeviceSetAlignmentRequirement WdfDeviceSetBusInformationForChildren WdfDeviceSetCharacteristics WdfDeviceSetDeviceInterfaceState WdfDeviceSetDeviceState WdfDeviceSetFailed WdfDeviceSetPnpCapabilities WdfDeviceSetPowerCapabilities WdfDeviceSetSpecialFileSupport WdfDeviceSetStaticStopRemove WdfDeviceStopIdle WdfDeviceWdmDispatchPreprocessedIrp WdfDeviceWdmGetAttachedDevice WdfDeviceWdmGetDeviceObject WdfDeviceWdmGetPhysicalDevice WdfDmaEnablerCreate WdfDmaEnablerGetFragmentLength WdfDmaEnablerGetMaximumLength WdfDmaEnablerGetMaximumScatterGatherElements WdfDmaEnablerSetMaximumScatterGatherElements WdfDmaEnablerWdmGetDmaAdapter WdfDmaTransactionCreate WdfDmaTransactionDmaCompleted WdfDmaTransactionDmaCompletedFinal WdfDmaTransactionDmaCompletedWithLength WdfDmaTransactionExecute WdfDmaTransactionGetBytesTransferred WdfDmaTransactionGetCurrentDmaTransferLength WdfDmaTransactionGetDevice WdfDmaTransactionGetRequest WdfDmaTransactionInitialize WdfDmaTransactionInitializeUsingRequest WdfDmaTransactionRelease WdfDpcCancel WdfDpcCreate WdfDpcEnqueue WdfDpcGetParentObject WdfDpcWdmGetDpc WdfDriverCreate WdfDriverGetRegistryPath WdfDriverIsVersionAvailable WdfDriverOpenParametersRegistryKey WdfDriverRetrieveVersionString WdfFdoAddStaticChild WdfFdoGetDefaultChildList WdfFdoInitAllocAndQueryProperty WdfFdoInitOpenRegistryKey WdfFdoInitQueryProperty WdfFdoInitSetDefaultChildListConfig WdfFdoInitSetEventCallbacks WdfFdoInitSetFilter WdfFdoInitWdmGetPhysicalDevice WdfFdoLockStaticChildListForIteration WdfFdoQueryForInterface WdfFdoRetrieveNextStaticChild WdfFdoUnlockStaticChildListFromIteration WdfFileObjectGetDevice WdfFileObjectGetFileName WdfFileObjectGetFlags WdfFileObjectWdmGetFileObject WdfInterruptAcquireLock WdfInterruptCreate WdfInterruptDisable WdfInterruptEnable WdfInterruptReleaseLock WdfInterruptSynchronize WdfIoQueueCreate WdfIoQueueDrain WdfIoQueueDrainSynchronously WdfIoQueueFindRequest WdfIoQueueGetDevice WdfIoQueueGetState WdfIoQueuePurge WdfIoQueuePurgeSynchronously WdfIoQueueReadyNotify WdfIoQueueRetrieveFoundRequest WdfIoQueueRetrieveNextRequest WdfIoQueueRetrieveRequestByFileObject WdfIoQueueStart WdfIoQueueStop WdfIoQueueStopSynchronously WdfIoResourceListAppendDescriptor WdfIoResourceListCreate WdfIoResourceListGetCount WdfIoResourceListGetDescriptor WdfIoResourceListInsertDescriptor WdfIoResourceListRemove WdfIoResourceListRemoveByDescriptor WdfIoResourceListUpdateDescriptor WdfIoResourceRequirementsListAppendIoResList WdfIoResourceRequirementsListGetCount WdfIoResourceRequirementsListGetIoResList WdfIoResourceRequirementsListInsertIoResList WdfIoResourceRequirementsListRemove WdfIoResourceRequirementsListRemoveByIoResList WdfIoResourceRequirementsListSetInterfaceType WdfIoResourceRequirementsListSetSlotNumber WdfIoTargetAllocAndQueryTargetProperty WdfIoTargetClose WdfIoTargetCloseForQueryRemove WdfIoTargetCreate WdfIoTargetFormatRequestForInternalIoctl WdfIoTargetFormatRequestForInternalIoctlOthers WdfIoTargetFormatRequestForIoctl WdfIoTargetFormatRequestForRead WdfIoTargetFormatRequestForWrite WdfIoTargetGetDevice WdfIoTargetGetState WdfIoTargetOpen WdfIoTargetQueryForInterface WdfIoTargetQueryTargetProperty WdfIoTargetSendInternalIoctlOthersSynchronously WdfIoTargetSendInternalIoctlSynchronously WdfIoTargetSendIoctlSynchronously WdfIoTargetSendReadSynchronously WdfIoTargetSendWriteSynchronously WdfIoTargetStart WdfIoTargetStop WdfIoTargetWdmGetTargetDeviceObject WdfIoTargetWdmGetTargetFileHandle WdfIoTargetWdmGetTargetFileObject WdfIoTargetWdmGetTargetPhysicalDevice WdfLookasideListCreate WdfMemoryCreate WdfMemoryCreatePreallocated WdfObjectAcquireLock WdfObjectCreate WdfObjectDelete WdfObjectReleaseLock WdfPdoAddEjectionRelationsPhysicalDevice WdfPdoClearEjectionRelationsDevices WdfPdoGetParent WdfPdoInitAddCompatibleID WdfPdoInitAddDeviceText WdfPdoInitAddHardwareID WdfPdoInitAllocate WdfPdoInitAssignDeviceID WdfPdoInitAssignInstanceID WdfPdoInitAssignRawDevice WdfPdoInitSetDefaultLocale WdfPdoInitSetEventCallbacks WdfPdoMarkMissing WdfPdoRemoveEjectionRelationsPhysicalDevice WdfPdoRequestEject WdfPdoRetrieveAddressDescription WdfPdoRetrieveIdentificationDescription WdfPdoUpdateAddressDescription WdfRegistryAssignMemory WdfRegistryAssignMultiString WdfRegistryAssignString WdfRegistryAssignULong WdfRegistryAssignUnicodeString WdfRegistryAssignValue WdfRegistryClose WdfRegistryCreateKey WdfRegistryOpenKey WdfRegistryQueryMemory WdfRegistryQueryMultiString WdfRegistryQueryString WdfRegistryQueryULong WdfRegistryQueryUnicodeString WdfRegistryQueryValue WdfRegistryRemoveKey WdfRegistryRemoveValue WdfRequestAllocateTimer WdfRequestCancelSentRequest WdfRequestChangeTarget WdfRequestComplete WdfRequestCompleteWithInformation WdfRequestCompleteWithPriorityBoost WdfRequestCreate WdfRequestCreateFromIrp WdfRequestFormatRequestUsingCurrentType WdfRequestForwardToIoQueue WdfRequestGetCompletionParams WdfRequestGetFileObject WdfRequestGetInformation WdfRequestGetIoQueue WdfRequestGetParameters WdfRequestGetRequestorMode WdfRequestGetStatus WdfRequestIsCanceled WdfRequestIsFrom32BitProcess WdfRequestMarkCancelable WdfRequestMarkCancelableEx WdfRequestProbeAndLockUserBufferForRead WdfRequestProbeAndLockUserBufferForWrite WdfRequestRequeue WdfRequestRetrieveInputBuffer WdfRequestRetrieveInputMemory WdfRequestRetrieveInputWdmMdl WdfRequestRetrieveOutputBuffer WdfRequestRetrieveOutputMemory WdfRequestRetrieveOutputWdmMdl WdfRequestRetrieveUnsafeUserInputBuffer WdfRequestRetrieveUnsafeUserOutputBuffer WdfRequestReuse WdfRequestSend WdfRequestSetCompletionRoutine WdfRequestSetInformation WdfRequestStopAcknowledge WdfRequestUnmarkCancelable WdfRequestWdmFormatUsingStackLocation WdfRequestWdmGetIrp WdfSpinLockAcquire WdfSpinLockCreate WdfSpinLockRelease WdfStringCreate WdfStringGetUnicodeString WdfTimerCreate WdfTimerStart WdfTimerStop WdfUsbInterfaceGetConfiguredPipe WdfUsbInterfaceGetConfiguredSettingIndex WdfUsbInterfaceGetDescriptor WdfUsbInterfaceGetEndpointInformation WdfUsbInterfaceGetInterfaceNumber WdfUsbInterfaceGetNumConfiguredPipes WdfUsbInterfaceGetNumEndpoints WdfUsbInterfaceGetNumSettings WdfUsbInterfaceSelectSetting WdfUsbTargetDeviceAllocAndQueryString WdfUsbTargetDeviceCreate WdfUsbTargetDeviceCyclePortSynchronously WdfUsbTargetDeviceFormatRequestForControlTransfer WdfUsbTargetDeviceFormatRequestForCyclePort WdfUsbTargetDeviceFormatRequestForString WdfUsbTargetDeviceFormatRequestForUrb WdfUsbTargetDeviceGetDeviceDescriptor WdfUsbTargetDeviceGetInterface WdfUsbTargetDeviceGetNumInterfaces WdfUsbTargetDeviceIsConnectedSynchronous WdfUsbTargetDeviceQueryString WdfUsbTargetDeviceResetPortSynchronously WdfUsbTargetDeviceRetrieveConfigDescriptor WdfUsbTargetDeviceRetrieveCurrentFrameNumber WdfUsbTargetDeviceRetrieveInformation WdfUsbTargetDeviceSelectConfig WdfUsbTargetDeviceSendControlTransferSynchronously WdfUsbTargetDeviceSendUrbSynchronously WdfUsbTargetDeviceWdmGetConfigurationHandle WdfUsbTargetPipeAbortSynchronously WdfUsbTargetPipeConfigContinuousReader WdfUsbTargetPipeFormatRequestForAbort WdfUsbTargetPipeFormatRequestForRead WdfUsbTargetPipeFormatRequestForReset WdfUsbTargetPipeFormatRequestForUrb WdfUsbTargetPipeFormatRequestForWrite WdfUsbTargetPipeGetInformation WdfUsbTargetPipeGetType WdfUsbTargetPipeIsInEndpoint WdfUsbTargetPipeIsOutEndpoint WdfUsbTargetPipeReadSynchronously WdfUsbTargetPipeResetSynchronously WdfUsbTargetPipeSendUrbSynchronously WdfUsbTargetPipeSetNoMaximumPacketSizeCheck WdfUsbTargetPipeWdmGetPipeHandle WdfUsbTargetPipeWriteSynchronously WdfWaitLockAcquire WdfWaitLockCreate WdfWaitLockRelease WdfWdmDeviceGetWdfDeviceHandle WdfWmiInstanceCreate WdfWmiInstanceDeregister WdfWmiInstanceFireEvent WdfWmiInstanceGetDevice WdfWmiInstanceGetProvider WdfWmiInstanceRegister WdfWmiProviderCreate WdfWmiProviderGetDevice WdfWmiProviderGetTracingHandle WdfWmiProviderIsEnabled WdfWorkItemCreate WdfWorkItemEnqueue WdfWorkItemFlush WdfWorkItemGetParentObject PAGED_CODE