次の方法で共有


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 は、子の数を 0 に設定し、NET_BUFFER_LIST構造体を割り当てるときに、親ポインター NULL します。 NDIS は、ドライバーが別のドライバーにNET_BUFFER_LIST構造体を渡すたびにこれらのフィールドを変更しません。

派生NET_BUFFER_LIST構造体