1.7 Driver-managed Queues

KeInitializeSpinLock 
Initializes a variable of type KSPIN_LOCK. An initialized spin lock is a required parameter to the Ex..InterlockedList routines.
InitializeListHead 
Sets up a queue header for a driver’s internal queue, given a pointer to driver-supplied storage for the queue header and queue. An initialized queue header is a required parameter to the ExInterlockedInsert/Remove..List routines.
ExInterlockedInsertTailList 
Inserts an entry at the tail of a doubly linked list, using a spin lock to ensure multiprocessor-safe access to the list and atomic modification of the list links.
ExInterlockedInsertHeadList 
Inserts an entry at the head of a doubly linked list, using a spin lock to ensure multiprocessor-safe access to the list and atomic modification of the list links.
ExInterlockedRemoveHeadList 
Removes an entry from the head of a doubly linked list, using a spin lock to ensure multiprocessor-safe access to the list and atomic modification of the list links.
ExInterlockedPopEntryList 
Removes an entry from the head of a singly linked list as an atomic operation, using a spin lock to ensure multiprocessor-safe access to the list.
ExInterlockedPushEntryList 
Inserts an entry at the head of a singly linked list as an atomic operation, using a spin lock to ensure multiprocessor-safe access to the list.
IsListEmpty 
Returns whether a queue is empty, given its initialized list head. (This type of doubly linked list is not protected by a spin lock, unless the caller explicitly manages synchronization to queued entries with an initialized spin lock for which the caller supplies the storage.)
InsertTailList 
Queues an entry at the end of the list.
InsertHeadList 
Queues an entry at the head of the list.
RemoveHeadList 
Dequeues an entry at the head of the list.
RemoveTailList 
Dequeues an entry at the end of the list.
RemoveEntryList 
Returns whether a given entry is in the given list and dequeues the entry if it is.
PushEntryList 
Inserts an entry into the queue. (This type of singly linked list is not protected by a spin lock, unless the caller explicitly manages synchronization to queued entries with an initialized spin lock for which the caller supplies the storage.)
PopEntryList 
Removes an entry from the queue.
KeInitializeDeviceQueue 
Initializes a device queue object to a not-busy state, setting up an associated spin lock for multiprocessor-safe access to device queue entries.
KeInsertDeviceQueue 
Acquires the device queue spin lock and queues an entry to a device driver if the device queue is not empty; otherwise, inserts the entry at the tail of the device queue.
KeInsertByKeyDeviceQueue 
Acquires the device queue spin lock and queues an entry to a device driver if the device queue is not empty; otherwise, inserts the entry into the queue according to the given sort-key value.
KeRemoveDeviceQueue 
Removes an entry from the head of a given device queue.
KeRemoveByKeyDeviceQueue 
Removes an entry, selected according to the specified sort-key value, from the given device queue.
KeRemoveEntryDeviceQueue 
Determines whether a given entry is in the given device queue and, if so, dequeues the entry.