Поделиться через


функция обратного вызова NDIS_TCP_OFFLOAD_SEND_COMPLETE (ndischimney.h)

[Функция разгрузки дымохода TCP не рекомендуется и не должна использоваться.]

Целевой объект разгрузки вызывает функцию NdisTcpOffloadSendComplete для выполнения одного или нескольких запросов на отправку, выполненных в функцию MiniportTcpOffloadSend целевого объекта разгрузки.

Синтаксис

NDIS_TCP_OFFLOAD_SEND_COMPLETE NdisTcpOffloadSendComplete;

void NdisTcpOffloadSendComplete(
  [in] IN NDIS_HANDLE NdisMiniportHandle,
  [in] IN PNET_BUFFER_LIST NetBufferList
)
{...}

Параметры

[in] NdisMiniportHandle

Дескриптор, полученный в предыдущем вызове целевого объекта разгрузки. функция NdisMRegisterMiniportDriver.

[in] NetBufferList

Указатель на структуру NET_BUFFER_LIST. Эта структура может быть автономной или первой структурой в связанном списке NET_BUFFER_LIST структур. Целевой объект разгрузки получил эти структуры в одном или нескольких вызовах к его функции MiniportTcpOffloadSend.

Возвращаемое значение

Никакой

Замечания

Чтобы повысить производительность системы, целевой объект разгрузки может создать связанный список, содержащий NET_BUFFER_LIST структуры из нескольких вызовов функции MiniportTcpOffloadSend. Затем драйвер может передать такой связанный список в одном вызове функции NdisTcpOffloadSendComplete.

Перед выполнением одного или нескольких запросов на отправку целевой объект разгрузки должен выполнять следующие действия для каждой структуры NET_BUFFER_LIST, которую она передает в функцию NdisTcpOffloadSendComplete:

  • Напишите значение состояния в элемент Status:
    • NDIS_STATUS_SUCCESS указывает, что все данные, связанные с NET_BUFFER_LIST, успешно отправлены целевой целью разгрузки и что целевой объект разгрузки, полученный от удаленного узла, подтверждение для всех передаваемых данных. Обратите внимание, что это отличается от функции отправки, отличной от разгрузки, MiniportSendNetBufferLists, который не отслеживает подтверждения.
    • Значение состояния, отличное от NDIS_STATUS_SUCCESS-например, значение состояния NDIS_STATUS_REQUEST_ABORTED или NDIS_STATUS_UPLOAD_IN_PROGRESS- указывает, что данные отправки не были успешно подтверждены. Целевой объект разгрузки может или не отправил данные. Целевой объект разгрузки должен завершиться ошибкой операции отправки для всех последующих NET_BUFFER_LIST структур в связанном списке без отправки дополнительных данных, связанных с этими структурами. Целевой объект разгрузки записывает значение состояния NDIS_STATUS_UPLOAD_IN_PROGRESS при отключении TCP-подключения, в котором будут отправляться данные. В этом случае очереди стека узлов и обрабатывают данные TCP. Целевой объект разгрузки записывает значение состояния NDIS_STATUS_REQUEST_ABORTED если он получил сегмент RST для TCP-подключения, на котором отправляются данные. В этом случае стек узлов не обрабатывает данные TCP.
    • Целевой объект разгрузки должен завершить частичную отправку, по крайней мере, одну NET_BUFFER_LIST структуру в связанном списке. Целевой объект разгрузки записывает значение состояния, отличное от NDIS_STATUS_SUCCESS-например, значение состояния NDIS_STATUS_ABORTED или NDIS_STATUS_UPLOAD_IN_PROGRESS в такую структуру NET_BUFFER_LIST.
    • Если промежуточный драйвер не может выделить память для распространения операции отправки в базовый целевой объект разгрузки, он записывает значение состояния NDIS_STATUS_REQUEST_UPLOAD в первую NET_BUFFER_LIST структуру в связанном списке и NDIS_STATUS_UPLOAD_REQUESTED для всех последующих NET_BUFFER_LIST структур в связанном списке. Промежуточный драйвер не должен распространять структуры NET_BUFFER_LIST в базовый целевой объект разгрузки. Стек узлов выполнит операцию отправки.
  • Укажите количество отправленных байтов данных. Целевой объект разгрузки делает это путем вызова макроса NET_BUFFER_LIST_INFO с идентификатором TcpOffloadBytesTransferred.
  • Вызов функцию NdisAdvanceNetBufferDataStart для каждой структуры NET_BUFFER, связанной со структурой NET_BUFFER_LIST. Параметр NetBuffer, переданный в функцию NdisAdvanceNetBufferDataStart, должен указывать на структуру NET_BUFFER. Параметр DataOffsetDelta должен указать количество байтов данных из структуры NET_BUFFER, передаваемых целевым объектом разгрузки и которые были подтверждены удаленным узлом. Параметр FreeMdlNULL.

Требования

Требование Ценность
целевая платформа Всеобщий
заголовка ndischimney.h (включая Ndischimney.h)
IRQL Любой уровень

См. также

MiniportSendNetBufferLists

MiniportTcpOffloadSend

NET_BUFFER

NET_BUFFER_LIST

NdisAdvanceNetBufferDataStart

NdisMRegisterMiniportDriver