CriticalRegions rule (wdm)

The CriticalRegions rule specifies that the driver must call KeEnterCriticalRegion before calling KeLeaveCriticalRegion and that the driver calls KeLeaveCriticalRegion before any subsequent calls to KeEnterCriticalRegion. (Nested calls are permitted.)

This rule also specifies that the driver calls KeLeaveCriticalRegion to re-enable delivery of normal kernel asynchronous procedure calls (APCs) before it returns.

The WDK documentation of KeEnterCriticalRegion and KeLeaveCriticalRegion explains that the caller of these functions can be running at IRQL<=APC_LEVEL. In this situation, this rule enforces a best practice recommendation.

Driver model: WDM

Bug check(s) found with this rule: Bug Check 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION (0x00040003)

How to test

At compile time

Run Static Driver Verifier and specify the CriticalRegions 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.

At run time

Run Driver Verifier and select the DDI compliance checking (additional) option.

Applies to

ExEnterCriticalRegionAndAcquireResourceExclusive ExReleaseResourceAndLeaveCriticalRegion KeEnterCriticalRegion KeLeaveCriticalRegion