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 不會變更這些欄位。