Export (0) Print
Expand All
Expand Minimize

FltInitializePushLock routine

The FltInitializePushLock routine initializes a push lock variable.

Syntax


VOID FltInitializePushLock(
  _Out_ PEX_PUSH_LOCK PushLock
);

Parameters

PushLock [out]

Pointer to the caller-supplied storage, which must be at least the value of sizeof(EX_PUSH_LOCK), for the push lock variable to be initialized.

Return value

None

Remarks

Push locks are similar to ERESOURCE structures (also called "resources") in the following ways:

  • Push locks can be used for synchronization by a set of threads.

  • Push locks can be acquired for shared or exclusive access.

  • Although the caller provides the storage for the push lock variable, the EX_PUSH_LOCK structure is opaque: that is, its members are reserved for system use.

Push locks offer the following advantages over ERESOURCE structures:

  • When push locks are mostly acquired for shared access, they are more efficient than ERESOURCE structures.

  • The storage for push locks can be allocated from paged or nonpaged pool. ERESOURCE structures must be allocated only from nonpaged pool.

  • EX_PUSH_LOCK structures are much smaller than ERESOURCE structures.

Push locks have the following disadvantages when compared with ERESOURCE structures:

  • The algorithm for granting exclusive access is not fair to all threads. If there is a high level of exclusive-lock contention, there is no guarantee about the order in which threads will be granted exclusive access.

  • There are no support routines for determining the current owner of a push lock. (Users of ERESOURCE structures can call routines such as ExIsResourceAcquiredExclusiveLite to determine whether the current thread has exclusive access to the resource.)

  • Push locks cannot be acquired recursively.

To acquire a push lock for exclusive access, call FltAcquirePushLockExclusive.

To acquire a push lock for shared access, call FltAcquirePushLockShared.

To release a push lock, call FltReleasePushLock.

To delete a push lock, call FltDeletePushLock.

Requirements

Target platform

Universal

Version

This routine is available on Microsoft Windows XP SP2, Microsoft Windows Server 2003 SP1, and later.

Header

Fltkernel.h (include Fltkernel.h)

Library

FltMgr.lib

IRQL

<= APC_LEVEL

See also

ExIsResourceAcquiredExclusiveLite
FltAcquirePushLockExclusive
FltAcquirePushLockShared
FltDeletePushLock
FltReleasePushLock

 

 

Send comments about this topic to Microsoft

Show:
© 2015 Microsoft