다음을 통해 공유


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 구조를 다른 드라이버에 전달할 때마다 이러한 필드를 변경하지 않습니다.

파생 NET_BUFFER_LIST 구조체