NdisInterlockedInsertHeadList 宏 (ndis.h)
NdisInterlockedInsertHeadList 函式會插入專案,通常是封包,位於多任務連結清單的前端,以便以多處理器安全的方式同步處理清單的存取。
語法
void NdisInterlockedInsertHeadList(
[in] _ListHead,
[in] _ListEntry,
[in] _SpinLock
);
參數
[in] _ListHead
要插入專案之雙連結清單前端的指標。
[in] _ListEntry
要插入清單前端之專案的指標。
[in] _SpinLock
呼叫端提供的微調鎖定指標,用來同步處理清單的存取。
傳回值
無
備註
在呼叫 NdisInterlockedInsertHeadList 之前,驅動程式必須先使用 NdisInitializeListHead 函式在 ListHead 上初始化變數,並使用 NdisAllocateSpinLock 函式在 SpinLock 上初始化變數。 驅動程式也必須提供這些變數及其內部佇列的駐留記憶體。
呼叫端提供的微調鎖定可防止任何其他函式存取驅動程序的內部佇列,而 NdisInterlockedInsertHeadList 正在插入指定的專案,即使驅動程式是在多處理器計算機上執行也一樣。
NdisInterlockedInsertHeadList 會在取得指定的微調鎖定,並在傳回控件之前還原原始 IRQL 時,引發 IRQL DISPATCH_LEVEL。 因此,任何呼叫 NdisInterlockedInsertHeadList 的驅動程式函式都不能是可分頁的程序代碼。
大部分的 NDIS 驅動程式會依 FIFO 順序處理封包,因此任何使用連結佇列的驅動程式通常會進行 cal NdisInterlockedInsertTailList 函式比 NdisInterlockedInsertHeadList 更頻繁。 這類驅動程式通常會呼叫 NdisInterlockedInsertHeadList ,以重新佇列重試作業的封包。
若要將傳回的值轉換回插入專案的位址,驅動程式可以使用 CONTAINING_RECORD 宏。
如果 NdisInterlockedInsertHeadList 在 IRQL >= DISPATCH_LEVEL呼叫, 則 ListHead 參數和列表專案的記憶體必須位在內。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 支援 NDIS 6.0 和 NDIS 5.1 驅動程式 (請參閱 Windows Vista 中的 NdisInterlockedInsertHeadList (NDIS 5.1) ) 。 支援 NDIS 5.1 驅動程式 (請參閱 Windows XP 中的 NdisInterlockedInsertHeadList (NDIS 5.1) ) 。 |
目標平台 | Universal |
標頭 | ndis.h (包括 Ndis.h) |
程式庫 | Ndis.lib |
IRQL | 任何層級 |