다음을 통해 공유


퇴각 작업

퇴각 작업은 NET_BUFFER 구조 또는 NET_BUFFER_LIST 구조의 모든 NET_BUFFER 구조에서 사용된 데이터 공간의 크기를 늘릴 수 있습니다.

NDIS는 다음과 같은 퇴각 함수를 제공합니다.

NdisRetreatNetBufferDataStart

NdisRetreatNetBufferListDataStart

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

DataLength를 가져오기 위해 NDIS는 드라이버 지정 DataOffsetDelta 를 현재 DataLength 에 추가합니다. 사용되지 않는 데이터 공간의 크기가 DataOffsetDelta보다 크면 퇴각 작업으로 DataOffset 가 줄어듭니다. 이 경우 새 DataOffset은 현재 DataOffset에서 DataOffsetDelta 를 뺀 값입니다.

DataOffsetDeltaDataOffset보다 큰 경우 퇴각 작업은 새 데이터 공간을 할당합니다. 이 경우 NDIS는 DataOffset 을 적절하게 조정합니다.

보내기 작업의 경우 NDIS는 사용되지 않는 데이터 공간이 부족하여 퇴각 요청을 충족할 수 없는 경우 메모리를 할당합니다. 메모리 할당이 필요하지 않은 경우 NDIS는 DataOffsetDataLength 를 조정하기만 하면 됩니다. 성능을 향상시키려면 드라이버는 모든 기본 드라이버의 퇴각 작업을 수용하기 위해 보내기 전에 충분한 총 데이터 크기를 할당해야 합니다.

수신 반환 사례의 경우 NDIS는 DataOffsetDataLength 를 적절하게 조정합니다. 퇴각 작업은 수신 처리 중에 발생한 사전 작업을 반대로 합니다. 퇴각 작업 후 사용된 데이터 공간에 는 수신 처리 중에 기본 드라이버가 사용하는 헤더 데이터가 포함됩니다.