고급 작업
고급 작업은 NET_BUFFER 구조 또는 NET_BUFFER_LIST 구조의 모든 NET_BUFFER 구조에서 사용된 데이터 공간의 크기를 줄입니다.
드라이버는 다음과 같은 고급 함수를 사용합니다.
NdisAdvanceNetBufferListDataStart
고급 작업은 경우에 따라 NET_BUFFER 구조와 연결된 MDL을 해제할 수 있습니다. MDL을 해제하는 메커니즘을 제공하기 위해 드라이버는 NetFreeMdl 함수에 대한 선택적 진입점을 제공할 수 있습니다. 진입점이 NULL일 경우, NDIS는 기본 메서드를 사용하여 MDL을 할당합니다. MDL은 NetAllocateMdl 함수에서 MDL 할당에 사용된 메커니즘의 반대를 이용하여 NetFreeMdl 내에서만 해제되어야 합니다.
새 DataLength를 얻기 위해 NDIS는 현재 DataLength에서 드라이버가 지정한 DataOffsetDelta를 뺍니다. 이전 퇴각 작업에서 새 데이터 공간을 할당한 경우 사전 작업을 통해 이전에 할당된 메모리를 해제할 수 있습니다. 고급 작업이 메모리를 해제하지 않으면, NDIS는 현재 DataOffset 에 DataOffsetDelta 를 단순히 더하여 새 DataOffset 을 얻습니다. 사전 작업으로 메모리가 해제되면 NDIS는 그에 따라 DataOffset을 조정합니다.
보내기 전체 사례의 경우 고급 작업은 이전 퇴각 작업에서 할당된 메모리를 해제할 수 있습니다. 성능을 향상시키려면 드라이버는 모든 기본 드라이버의 퇴각 작업을 수용하기 위해 보내기 전에 충분한 총 데이터 크기를 할당해야 합니다.
수신 표시 사례의 경우, 고급 작업은 DataOffset 및 DataLength을(를) 그에 따라 조정합니다. 사전 작업 후에는 하위 계층의 헤더가 사용되지 않는 데이터 공간 에남아 있습니다.