Hello,
As per documentation:
- one can acquire ERESOURCE recursively.
- Normal kernel APC delivery must be disabled before calling this routine. Disable normal kernel APC delivery by calling KeEnterCriticalRegion. Delivery must remain disabled until the resource is released, at which point it can be reenabled by calling KeLeaveCriticalRegion.
Will the following code sequence works perfectly?
Case 1.
KeEnterCriticalRegion().
ExAcquireResourceExclusiveLite(X).
// do some work.
KeEnterCriticalRegion().
ExAcquireResourceExclusiveLite(X).
// do some work.
ExReleaseResourceLite(X)
KeLeaveCriticalRegion() // will re-enabled normal kernel APC delivery.
// do some work.
ExReleaseResourceLite(X) // will it be issue here because kernel APC delivery is already re-enabled above?
KeLeaveCriticalRegion()
Case 2.
KeEnterCriticalRegion().
ExAcquireResourceExclusiveLite(X).
// do some work.
KeEnterCriticalRegion().
ExAcquireResourceExclusiveLite(Y).
// do some work.
ExReleaseResourceLite(Y)
KeLeaveCriticalRegion() // will re-enabled normal kernel APC delivery.
// do some work.
ExReleaseResourceLite(X) // will it be issue here because kernel APC delivery is already re-enabled above?
KeLeaveCriticalRegion()
Thanks in advance.