NDIS_PD_POST_AND_DRAIN_BUFFER_LIST回呼函式 (ndis.h)
PacketDirect (PD) 平臺會呼叫支援 PD 的迷你埠驅動程式 PDPostAndDrainBufferList 函式,將 PD_BUFFER 結構張貼至 PD 傳輸/接收佇列,並清空任何先前張貼 PD_BUFFER 結構已完成。
語法
NDIS_PD_POST_AND_DRAIN_BUFFER_LIST NdisPdPostAndDrainBufferList;
VOID() NdisPdPostAndDrainBufferList(
[in, out] NDIS_PD_QUEUE *Queue,
[in, out] PD_BUFFER **PostBufferListHead,
[in, out] PD_BUFFER ***DrainBufferListTail,
[in] ULONG MaxDrainCount
)
{...}
參數
[in, out] Queue
傳送或接收佇列的指標,該佇列將接收張貼的緩衝區,並已移除已完成的緩衝區。
[in, out] PostBufferListHead
文章清單的標頭。 提供者會移除此清單中的緩衝區,並將其新增至 佇列。
[in, out] DrainBufferListTail
清空清單的結尾。 提供者會從 佇列 中移除任何已完成的緩衝區,並將其新增至此清單。
[in] MaxDrainCount
要清空的 PD_BUFFER 結構數量上限。 提供者必須確定不超過此數量。 構成單一 L2 封包計數的部分 PD_BUFFER 結構集為 1。
傳回值
這個回呼函式不會傳回值。
備註
提供者會從 PostBufferList 中移除緩衝區,並將其放在佇列中,從清單中的前端緩衝區開始,並前進到下一個緩衝區,直到 PostBufferList 是空的,或是佇列已滿 (或接近完整) 為止。 進階至 PostListHead 的提供者,並將新的清單標頭傳回給呼叫端。 提供者也會從佇列中移除任何已完成的緩衝區,並將其插入 DrainBufferList 的結尾,並將新的 DrainBufferList 結尾傳回給用戶端。
例子
若要定義 PDPostAndDrainBufferList 函式,您必須先提供函式宣告來識別您要定義的函式類型。 Windows 提供一組驅動程式的函式類型。 使用函式類型宣告函式有助於 驅動程式的程式代碼分析、 靜態驅動程式驗證程式 (SDV) ,以及其他驗證工具尋找錯誤,而且是撰寫 Windows 作業系統驅動程式的需求。例如,若要定義名為 「MyPDPostAndDrainBufferList」 的 PDPostAndDrainBufferList 函式,請使用 NDIS_PD_POST_AND_DRAIN_BUFFER_LIST 類型,如下列程式代碼範例所示:
NDIS_PD_POST_AND_DRAIN_BUFFER_LIST MyPDPostAndDrainBufferList;
然後,實作您的函式,如下所示:
_Use_decl_annotations_
VOID
MyPDPostAndDrainBufferList(
NDIS_PD_QUEUE* Queue,
PD_BUFFER** PostBufferListHead,
PD_BUFFER*** DrainBufferListTail,
ULONG MaxDrainCount
)
{...}
NDIS_PD_POST_AND_DRAIN_BUFFER_LIST函式類型定義於 Ntddndis.h 頭檔中。 若要在執行程式代碼分析工具時更精確地識別錯誤,請務必將 Use_decl_annotations 批註新增至函式定義。 Use_decl_annotations註釋可確保使用頭檔中套用至NDIS_PD_POST_AND_DRAIN_BUFFER_LIST函式類型的註釋。 如需函數宣告需求的詳細資訊,請參閱 使用 NDIS 驅動程式的函式角色類型來宣告函式。
如需 Use_decl_annotations的詳細資訊,請參閱 標註函式行為。
以下是範例代碼段,說明此函式的指標間接取值。
PD_BUFFER* PostHead = NULL;
PD_BUFFER** PostTail = &PostHead;
PD_BUFFER* DrainHead = NULL;
PD_BUFFER** DrainTail = &DrainHead;
PD_BUFFER* bufX = <allocated PD_BUFFER>;
bufX->NextPDBuffer = NULL;
*PostTail = bufX;
PostTail = &bufX->NextPDBuffer;
// BEFORE:
//PostHead == bufX
//PostTail == &bufZ->NextPDBuffer
//DrainHead == NULL
//DrainTail == &DrainHead
NDIS_PD_POST_AND_DRAIN_BUFFER_LIST(
Queue,
&PostHead,
&DrainTail,
32);
// AFTER:
//PostHead == bufY
//PostTail == &bufZ->NextPDBuffer
//DrainHead == buf1
//DrainTail == &buf5->NextPDBuffer
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 10 |
最低支援的伺服器 | Windows Server 2016 |
目標平台 | Windows |
標頭 | ndis.h |
IRQL | <= DISPATCH_LEVEL |