FltAcquireResourceShared function (fltkernel.h)
The FltAcquireResourceShared routine acquires the given resource for shared access by the calling thread.
Syntax
VOID FLTAPI FltAcquireResourceShared(
[in/out] PERESOURCE Resource
);
Parameters
[in/out] Resource
Pointer to an opaque ERESOURCE structure. This structure must be allocated by the caller from nonpaged pool and initialized by calling ExInitializeResourceLite or ExReinitializeResourceLite.
Return value
None.
Remarks
FltAcquireResourceShared routine acquires the given resource for shared access by the calling thread.
Whether or when the caller is given shared access to the given resource depends on the following:
If the resource is currently unowned, shared access is granted immediately to the current thread.
If the caller already has acquired the resource (for shared or exclusive access), the current thread is granted the same type of access recursively. Note that making this call does not convert a caller's exclusive ownership of a given resource to shared.
If the resource is currently owned as shared by another thread and no thread is waiting for exclusive access to the resource, shared access is granted to the caller immediately. The caller is put into a wait state if there is an exclusive waiter.
If the resource is currently owned as exclusive by another thread or if there is another thread waiting for exclusive access and the caller does not already have shared access to the resource, the current thread is put into a wait state until the resource can be acquired.
FltAcquireResourceShared is a wrapper for ExAcquireResourceSharedLite that disables normal kernel APC delivery.
Because FltAcquireResourceShared disables normal kernel APC delivery, it is not necessary to call KeEnterCriticalRegion or FsRtlEnterFileSystem before calling FltAcquireResourceShared.
To release the resource after it is acquired, call FltReleaseResource. Every successful call to FltAcquireResourceShared must be matched by a subsequent call to FltReleaseResource.
To acquire a resource for exclusive access, call FltAcquireResourceExclusive.
To delete a resource from the system's resource list, call ExDeleteResourceLite.
To initialize a resource for reuse, call ExReinitializeResourceLite.
For more information about ERESOURCE structures, see Introduction to ERESOURCE Routines.
Requirements
Requirement | Value |
---|---|
Minimum supported client | Windows XP SP2 |
Minimum supported server | Windows Server 2003 SP1 |
Header | fltkernel.h |
Library | FltMgr.lib |
IRQL | IRQL <= APC_LEVEL |