NdisInterlockedRemoveHeadList 宏 (ndis.h)
NdisInterlockedRemoveHeadList 函数从多处理器安全方式同步对列表的访问,从多链接列表的头删除一个条目(通常是数据包)。
语法
PLIST_ENTRY NdisInterlockedRemoveHeadList(
[in] _ListHead,
[in] _SpinLock
);
参数
[in] _ListHead
指向要从中删除条目的双重链接列表的头的指针。
[in] _SpinLock
指向调用方提供的旋转锁的指针,用于同步对列表的访问。
返回值
NdisInterlockedRemoveHeadList 返回指向从列表中删除的 LIST_ENTRY 结构的指针。 如果列表为空,则例程返回 NULL。
言论
调用任何 NdisInterlocked 之前。列出 函数,驱动程序必须使用 NdisInitializeListHead 函数和 SpinLockNdisAllocateSpinLock 函数初始化 ListHead 上的变量。 驱动程序还必须为这些变量及其内部队列提供常驻存储。
在调用 NdisInterlockedRemoveHeadList之前,条目将排队,其中一个或多个调用 NdisInterlockedInsert.。列出 函数。
调用方提供的旋转锁可防止任何其他函数访问驱动程序的内部队列,同时 NdisInterlockedRemoveHeadList 删除条目,即使驱动程序在多处理器计算机上运行也是如此。
NdisInterlockedRemoveHeadList 在获取给定旋转锁并还原原始 IRQL 之前,将 IRQL 提升为DISPATCH_LEVEL。 因此,调用 NdisInterlockedRemoveHeadList 的任何驱动程序函数都不能是可分页代码。
若要将返回的值转换回插入项的地址,驱动程序可以使用 CONTAINING_RECORD 宏。
如果在 IRQL >= DISPATCH_LEVEL 调用 NdisInterlockedRemoveHeadList,则 ListHead 参数的存储必须驻留。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows Vista 中支持 NDIS 6.0 和 NDIS 5.1 驱动程序(请参阅 NdisInterlockedRemoveHeadList (NDIS 5.1)。 支持 NDIS 5.1 驱动程序(请参阅 Windows XP 中的 NdisInterlockedRemoveHeadList (NDIS 5.1)。 |
目标平台 | 普遍 |
标头 | ndis.h (包括 Ndis.h) |
库 | Ndis.lib |
IRQL | 任何级别 |