ExInterlockedRemoveHeadList - NtDoc

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

PLIST_ENTRY ExInterlockedRemoveHeadList(
  [in, out] PLIST_ENTRY ListHead,
  [in, out] PKSPIN_LOCK Lock
);
View the official Windows Driver Kit DDI reference

NtDoc

No description available.

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

ExInterlockedRemoveHeadList function

Description

The ExInterlockedRemoveHeadList routine removes an entry from the beginning of a doubly linked list of LIST_ENTRY structures.

Parameters

ListHead [in, out]

A pointer to the LIST_ENTRY structure that serves as the list header.

Lock [in, out]

A pointer to a KSPIN_LOCK structure that serves as the spin lock used to synchronize access to the list. The storage for the spin lock must be resident and must have been initialized by calling KeInitializeSpinLock. You must use this spin lock only with the ExInterlockedXxxList routines.

Return value

ExInterlockedRemoveHeadList returns a pointer to the LIST_ENTRY structure removed from the list. If the list was empty, the routine returns NULL.

Remarks

ExInterlockedRemoveHeadList performs a similar operation as RemoveHeadList, but atomically. Do not mix atomic and non-atomic calls on the same list.

For more information about using this routine to implement a doubly linked list, see Singly and Doubly Linked Lists.

The ExInterlockedRemoveHeadList routine can be called at any IRQL. The storage for the ListHead parameter must be resident at all IRQLs.

See also

ExInterlockedInsertHeadList

ExInterlockedInsertTailList

InitializeListHead

KeInitializeSpinLock

RemoveHeadList