NdisInterlockedInsertHeadList 宏 (ndis.h)

NdisInterlockedInsertHeadList 函数将条目(通常是数据包)插入到多链接列表的头,以便以多处理器安全的方式同步对列表的访问。

语法

void NdisInterlockedInsertHeadList(
  [in]  _ListHead,
  [in]  _ListEntry,
  [in]  _SpinLock
);

参数

[in] _ListHead

指向要在其中插入条目的双重链接列表的头的指针。

[in] _ListEntry

指向要插入列表头的条目的指针。

[in] _SpinLock

指向调用方提供的旋转锁的指针,用于同步对列表的访问。

返回值

没有

言论

在调用 NdisInterlockedInsertHeadList之前,驱动程序必须使用 NdisInitializeListHead 函数和 SpinLockNdisAllocateSpinLock 函数初始化变量。 驱动程序还必须为这些变量及其内部队列提供常驻存储。

调用方提供的旋转锁可防止任何其他函数访问驱动程序的内部队列,同时 NdisInterlockedInsertHeadList 插入给定条目,即使驱动程序在多处理器计算机上运行也是如此。

NdisInterlockedInsertHeadList 在获取给定的旋转锁并还原原始 IRQL 之前,将引发 IRQL DISPATCH_LEVEL。 因此,调用 NdisInterlockedInsertHeadList 的任何驱动程序函数都不能是可分页代码。

大多数 NDIS 驱动程序按 FIFO 顺序处理数据包,因此任何使用互锁队列的驱动程序都倾向于 cal thel NdisInterlockedInsertTailList 函数的频率远高于 NdisInterlockedInsertHeadList。 此类驱动程序通常调用 NdisInterlockedInsertHeadList,以重新排队执行重试作的数据包。

若要将返回的值转换回插入项的地址,驱动程序可以使用 CONTAINING_RECORD 宏。

如果在 IRQL >= DISPATCH_LEVEL 调用 NdisInterlockedInsertHeadList,则 ListHead 参数的存储并且列表条目必须驻留。

要求

要求 价值
最低支持的客户端 Windows Vista 中支持 NDIS 6.0 和 NDIS 5.1 驱动程序(请参阅 NdisInterlockedInsertHeadList (NDIS 5.1)。 支持 NDIS 5.1 驱动程序(请参阅 Windows XP 中的 NdisInterlockedInsertHeadList (NDIS 5.1) 。
目标平台 普遍
标头 ndis.h (包括 Ndis.h)
Ndis.lib
IRQL 任何级别

另请参阅

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead

NdisInterlockedInsertTailList NdisInterlockedRemoveHeadList