Important: |
---|
This is retired content. This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This content may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist. |
This function removes an entry, usually a packet, from the head of a doubly linked list so that access to the list is synchronized.
PLIST_ENTRY NdisInterlockedRemoveHeadList( IN PLIST_ENTRY ListHead , IN PNDIS_SPIN_LOCK SpinLock );
Parameters
Return Values
Returns a pointer to the dequeued entry. If the list is empty, it returns NULL.
Remarks
Before calling any NdisInterlocked XXXListfunction, a driver must initialize the variable at ListHeadwith the NdisInitializeListHeadfunction and the variable at SpinLockwith the NdisAllocateSpinLockfunction. The driver must also provide resident storage for these variables and for its internal queue.
Before calling this function, entries are queued with one or more calls to the NdisInterlockedInsert XXXListfunctions.
The caller-supplied spin lock prevents any other function from accessing the driver's internal queue while this function is removing an entry, even when the driver is running on a multiprocessor machine.
This function raises IRQL to DISPATCH_LEVEL when it acquires the specified spin lock and restores the original IRQL before it returns control. Consequently, any driver function that calls this function cannot be pageable code.
To convert a returned value back to the address of the inserted entry, a driver can use the CONTAINING_RECORD macro.
A driver that calls this function runs at IRQL <= DISPATCH_LEVEL.
Requirements
Runs on | Versions | Defined in | Include | Link to |
---|---|---|---|---|
Windows CE OS | 2.0 and later | Ndis.h |
Note This API is part of the complete Windows CE OS package as provided by Microsoft. The functionality of a particular platform is determined by the original equipment manufacturer (OEM) and some devices may not support this API.
See Also
NdisAllocateSpinLock, NdisInitializeListHead, NdisInterlockedInsertHeadList, NdisInterlockedInsertTailList
Last updated on Tuesday, July 13, 2004