функция обратного вызова 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 .

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

None

Remarks

Чтобы повысить производительность системы, целевой объект разгрузки может создать связанный список, содержащий 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, которые были переданы целевым объектом разгрузки и подтверждены удаленным узлом. Параметр FreeMdl имеет значение NULL.

Требования

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

См. также раздел

MiniportSendNetBufferLists

MiniportTcpOffloadSend

NET_BUFFER

NET_BUFFER_LIST

NdisAdvanceNetBufferDataStart

NdisMRegisterMiniportDriver