다음을 통해 공유


고급 작업

고급 작업은 NET_BUFFER 구조 또는 NET_BUFFER_LIST 구조의 모든 NET_BUFFER 구조에서 사용된 데이터 공간의 크기를 줄입니다.

드라이버는 다음과 같은 고급 함수를 사용합니다.

NdisAdvanceNetBufferDataStart

NdisAdvanceNetBufferListDataStart

고급 작업은 경우에 따라 NET_BUFFER 구조와 연결된 MDL을 해제할 수 있습니다. MDL을 해제하는 메커니즘을 제공하기 위해 드라이버는 NetFreeMdl 함수에 대한 선택적 진입점을 제공할 수 있습니다. 진입점이 NULL일 경우, NDIS는 기본 메서드를 사용하여 MDL을 할당합니다. MDL은 NetAllocateMdl 함수에서 MDL 할당에 사용된 메커니즘의 반대를 이용하여 NetFreeMdl 내에서만 해제되어야 합니다.

DataLength를 얻기 위해 NDIS는 현재 DataLength에서 드라이버가 지정한 DataOffsetDelta를 뺍니다. 이전 퇴각 작업에서 새 데이터 공간을 할당한 경우 사전 작업을 통해 이전에 할당된 메모리를 해제할 수 있습니다. 고급 작업이 메모리를 해제하지 않으면, NDIS는 현재 DataOffsetDataOffsetDelta 를 단순히 더하여 새 DataOffset 을 얻습니다. 사전 작업으로 메모리가 해제되면 NDIS는 그에 따라 DataOffset을 조정합니다.

보내기 전체 사례의 경우 고급 작업은 이전 퇴각 작업에서 할당된 메모리를 해제할 수 있습니다. 성능을 향상시키려면 드라이버는 모든 기본 드라이버의 퇴각 작업을 수용하기 위해 보내기 전에 충분한 총 데이터 크기를 할당해야 합니다.

수신 표시 사례의 경우, 고급 작업은 DataOffsetDataLength을(를) 그에 따라 조정합니다. 사전 작업 후에는 하위 계층의 헤더가 사용되지 않는 데이터 공간 남아 있습니다.