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 구조를 할당할 때 자식 수를 0으로 설정하고 부모 포인터를 NULL 로 설정합니다. NDIS는 드라이버가 NET_BUFFER_LIST 구조를 다른 드라이버에 전달할 때마다 이러한 필드를 변경하지 않습니다.