ExAcquireSharedStarveExclusive - NtDoc

Native API online documentation, based on the System Informer (formerly Process Hacker) phnt headers
// wdm.h

BOOLEAN ExAcquireSharedStarveExclusive(
  [in, out] PERESOURCE Resource,
  [in]      BOOLEAN    Wait
);

View the official Windows Driver Kit DDI reference

NtDoc

No description available.

Windows Driver Kit DDI reference (nf-wdm-exacquiresharedstarveexclusive)

ExAcquireSharedStarveExclusive function

Description

The ExAcquireSharedStarveExclusive routine acquires a given resource for shared access without waiting for any pending attempts to acquire exclusive access to the same resource.

Parameters

Resource [in, out]

A pointer to the resource to be acquired for shared access.

Wait [in]

Specifies the routine's behavior whenever the resource cannot be acquired immediately. If TRUE, the caller is put into a wait state until the resource can be acquired. If FALSE, the routine immediately returns, regardless of whether the resource can be acquired.

Return value

ExAcquireSharedStarveExclusive returns TRUE if the requested access is granted. This routine returns FALSE if the input Wait is FALSE and shared access cannot be granted immediately.

Remarks

Whether or when the caller is given shared access to the given resource depends on the following:

Callers of ExAcquireSharedStarveExclusive usually need quick access to a shared resource in order to save an exclusive accessor from doing redundant work. For example, a file system might call this routine to modify a cached resource, such as a BCB pinned in the cache, before the cache manager can acquire exclusive access to the resource and write the cache out to disk.

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. For more information, see Disabling APCs.

The caller can release the resource by calling either ExReleaseResourceLite or ExReleaseResourceForThreadLite.

See also

ExAcquireResourceSharedLite

ExAcquireSharedWaitForExclusive

ExConvertExclusiveToSharedLite

ExGetExclusiveWaiterCount

ExIsResourceAcquiredExclusiveLite

ExIsResourceAcquiredSharedLite