共用方式為


NET_BUFFER_LIST世代之間的關聯性

驅動程式寫入器應該瞭解和維護父 系 (原始) NET_BUFFER_LIST 結構與衍生自複製、片段和重新組合作業之子 (衍生) 結構之間的關聯性。

clone/fragment/reassemble 函式的呼叫端會維護父/子關聯性,包括子系NET_BUFFER_LIST結構和子計數中的父指標。 子計數可確保呼叫端在釋放所有子系之後釋放父系。 適用的規則如下:

  • 在驅動程式從 NET_BUFFER_LIST 結構建立子結構之後,它應該保留父結構的擁有權,而且應該將子結構傳遞至其他驅動程式。 驅動程式絕對不應該將父NET_BUFFER_LIST結構傳遞至另一個驅動程式。

  • 驅動程式應該只會更新父系NET_BUFFER_LIST結構中的子計數。 因為父結構永遠不會傳遞至另一個驅動程式,所以無法覆寫子計數的值。 驅動程式應該將子結構中的父指標設定為指向父結構。

  • 當驅動程式從另一個驅動程式收到NET_BUFFER_LIST時,驅動程式不得覆寫父指標。 如果收到的NET_BUFFER_LIST結構是子系,應該已經設定其父指標。 驅動程式可以使用從另一個驅動程式收到的NET_BUFFER_LIST做為父結構。

  • NDIS 不會強制執行上述規則。 NET_BUFFER_LIST 結構的目前擁有者必須管理子計數和父指標。 例如,如果目前的擁有者同時複製和分割NET_BUFFER_LIST結構,則必須管理父指標和子計數器。

  • NDIS 會在配置NET_BUFFER_LIST結構時,將子計數設定為零,並將父指標設定為 Null 。 每次驅動程式將NET_BUFFER_LIST結構傳遞給另一個驅動程式時,NDIS 不會變更這些欄位。

衍生NET_BUFFER_LIST結構