共用方式為


AppendTailList 函式 (wdm.h)

AppendTailList 例程會將 LIST_ENTRY 結構的雙連結清單附加至另一個 LIST_ENTRY 結構加倍連結清單的尾端。

語法

void AppendTailList(
  [in, out] PLIST_ENTRY ListHead,
  [in, out] PLIST_ENTRY ListToAppend
);

參數

[in, out] ListHead

要附加 ListToAppend 所指向清單之清單前端的指標。 此參數必須是清單前端之 LIST_ENTRY 結構的有效非NULL指標。 此清單可以是空的。

[in, out] ListToAppend

要附加至 listHead 所指向清單之清單之第一個項目的指標,ListHead。 此參數必須是無外設清單中第一個專案之 LIST_ENTRY 結構的有效非 NULL 指標。 如需詳細資訊,請參閱。

傳回值

沒有

言論

此例程會建構清單,其中包含來自輸入 ListHeadListToAppend 清單的所有合併專案。 當例程傳回時,ListHead 參數所指向的 LIST_ENTRY 結構是結果合併清單的前端。 ListToAppend 參數所指向的 LIST_ENTRY 結構是結果合併清單中的專案。

呼叫端會將 ListToAppend 參數設定為指向要附加之清單中的第一個專案。 在這方面,AppendTailList 不符合慣例,後面接著使用 LIST_ENTRY 結構的其他雙重連結清單例程。 在這些其他例程中,代表清單的 參數會指向清單標頭,而不是指向清單中的第一個專案。 如果您的驅動程式程式代碼使用清單標頭來代表要附加的清單,必須先從此清單中移除清單標頭,才能將清單傳遞為 ListToAppend 參數,以 AppendTailList。 如需示範如何移除此列表標頭的程式代碼範例,請參閱範例。

AppendTailList 可用來在清單尾端插入單一專案,但 FlinkBlinkLIST_ENTRY 結構的成員 ListToAppend 必須先初始化,通常是藉由呼叫 InitializeListHead 例程。 相反地,InsertTailList 例程不需要 FlinkBlinkLIST_ENTRY 結構的成員,Entry 參數在 呼叫 insertTailList 呼叫之前初始化。 因此,InsertTailList 可能更方便用來在清單尾端插入單一專案。

驅動程式可以存取 FlinkBlinkLIST_ENTRY成員,但成員只能由為此用途提供的系統例程更新。

如需實作多倍連結清單時使用此例程的相關信息,請參閱 Singly 和 Doubly 連結清單

AppendTailList 的呼叫端可以在任何 IRQL 上執行。 如果在 IRQL >= DISPATCH_LEVEL呼叫 appendTailList ,則列表專案的記憶體必須是記憶體駐地。

例子

下列程式代碼範例示範如何撰寫名為 MyAppendTailList 的函式,類似於 appendTailList,但會將 ListToAppend 參數視為清單前端的指標,而不是做為 (headless) 清單中第一個專案的指標。 不同於 AppendTailListMyAppendTailList 函式會避免在 ListHead 參數所指向的專案中包含 ListToAppend 參數所指向的 LIST_ENTRY 結構。

VOID MyAppendTailList(
    _Inout_  PLIST_ENTRY ListHead,
    _Inout_  PLIST_ENTRY ListToAppend
    )
{
    PLIST_ENTRY entry = ListToAppend->Flink;

    if (!IsListEmpty(ListToAppend))
    {
        RemoveEntryList(ListToAppend);
        InitializeListHead(ListToAppend);
        AppendTailList(ListHead, entry);
    }
}

此程式代碼範例中的 MyAppendTailList 函式會將 ListHeadListToAppend 參數視為清單頭的指標。 當此函式傳回時,ListToAppend 所指向的清單是空的;也就是說,它是由沒有相關聯清單專案的清單標頭所組成。 此清單中一開始的所有專案都已附加至 listHead 所指向的清單

要求

要求 價值
目標平臺 桌面
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Wudfwdm.h)
IRQL 任何層級 (請參閱一節)

另請參閱

InitializeListHead

InsertTailList

LIST_ENTRY

RemoveEntryList