共用方式為


NdisInterlockedRemoveHeadList 宏 (ndis.h)

NdisInterlockedRemoveHeadList 函式會從多任務連結清單的前端移除一個專案,通常是封包,以便以多處理器安全的方式同步處理清單的存取。

語法

PLIST_ENTRY NdisInterlockedRemoveHeadList(
  [in]  _ListHead,
  [in]  _SpinLock
);

參數

[in] _ListHead

要從中移除專案之雙連結清單前端的指標。

[in] _SpinLock

呼叫端提供的微調鎖定指標,用來同步處理清單的存取。

傳回值

NdisInterlockedRemoveHeadList 會傳回從清單中移除 之LIST_ENTRY 結構的指標。 如果清單是空的,例程會傳回 NULL

備註

呼叫任何 NdisInterlocked 之前。List 函式,驅動程式必須使用 NdisInitializeListHead 函式在 ListHead 上初始化變數,以及使用 NdisAllocateSpinLock 函式的 SpinLock 變數。 驅動程式也必須提供這些變數及其內部佇列的駐留記憶體。

呼叫 NdisInterlockedRemoveHeadList 之前,專案會以一或多個 對 NdisInterlockedInsert 的呼叫排入佇列。列出 函式。

呼叫端提供的微調鎖定可防止任何其他函式存取驅動程序的內部佇列,而 NdisInterlockedRemoveHeadList 正在移除專案,即使驅動程式是在多處理器計算機上執行也一樣。

NdisInterlockedRemoveHeadList 會在取得指定的微調鎖定,並在傳回控件之前還原原始 IRQL 時,引發 IRQL DISPATCH_LEVEL。 因此,任何呼叫 NdisInterlockedRemoveHeadList 的 驅動程式函式都不能是可分頁的程序代碼。

若要將傳回的值轉換回插入專案的位址,驅動程式可以使用 CONTAINING_RECORD 宏。

如果 NdisInterlockedRemoveHeadList 在 IRQL >= DISPATCH_LEVEL呼叫, 則 ListHead 參數的記憶體必須駐留。

規格需求

需求
最低支援的用戶端 支援 NDIS 6.0 和 NDIS 5.1 驅動程式 (請參閱 Windows Vista 中的 NdisInterlockedRemoveHeadList (NDIS 5.1) ) 。 支援 NDIS 5.1 驅動程式 (請參閱 Windows XP 中的 NdisInterlockedRemoveHeadList (NDIS 5.1) ) 。
目標平台 Universal
標頭 ndis.h (包括 Ndis.h)
程式庫 Ndis.lib
IRQL 任何層級

另請參閱

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead

NdisInterlockedInsertHeadList NdisInterlockedInsertTailList