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

[Функция разгрузки tcp chimney является устаревшей и не должна использоваться.]

Целевой объект разгрузки вызывает функцию NdisTcpOffloadReceiveComplete , чтобы вернуть опубликованные запросы на получение (буферы получения) в стек узлов. Целевой объект разгрузки ранее получил запросы на получение в одном или нескольких вызовахФункция MiniportTcpOffloadReceive.

Синтаксис

NDIS_TCP_OFFLOAD_RECEIVE_COMPLETE NdisTcpOffloadReceiveComplete;

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

Параметры

[in] NdisMiniportHandle

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

[in] NetBufferList

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

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

None

Remarks

Целевой объект разгрузки должен использовать и возвращать предварительно отложенные запросы на получение в порядке, в котором запросы были размещены в Функция MiniportTcpOffloadReceive целевого объекта разгрузки. Это значит, что целевой объект разгрузки должен использовать и возвращать предварительно отправляемые запросы на получение в порядке fifo.

Целевой объект разгрузки должен сериализовать вызовы функции NdisTcpOffloadReceiveComplete и дляФункция NdisTcpOffloadReceiveHandler для каждого соединения.

Функция MiniportTcpOffloadReceive целевого объекта разгрузки может быть вызвана в контексте вызова целевого объекта разгрузки функции NdisTcpOffloadReceiveComplete . В этом случае целевой объект разгрузки не должен повторно вызывать функцию NdisTcpOffloadReceiveComplete , пока не будет возвращен предыдущий вызов NdisTcpOffloadReceiveComplete .

Чтобы повысить производительность системы, целевой объект разгрузки может создать связанный список, содержащий структуры NET_BUFFER_LIST из нескольких вызовов к егоФункция MiniportTcpOffloadReceive. Целевой объект разгрузки может передать такой связанный список в одном вызове функции NdisTcpOffloadReceiveComplete . Обратите внимание, что целевой объект разгрузки может распространять запросы на получение, которые были размещены в одном вызове в Функция MiniportTcpOffloadReceive выполняется в нескольких вызовах завершения, если целевой объект разгрузки завершает запросы на получение в том же порядке, что и в функции MiniportTcpOffloadReceive .

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

  • Записывает одно из следующих значений состояния в элемент Status :
    NDIS_STATUS_SUCCESS
    Целевой объект разгрузки получил все данные, связанные с NET_BUFFER_LIST структурами, на которые ссылается параметр NetBufferList . Целевой объект разгрузки также усовершенствовал переменные RcvNxt и RcvWnd в делегированном состоянии TCP для TCP-подключения. Целевой объект разгрузки может создать или не создать подтверждение для полученных данных в зависимости от того, ожидает ли целевой объект разгрузки отправки отложенного подтверждения.
    NDIS_STATUS_REQUEST_ABORTED
    Произошла ошибка, когда целевой объект разгрузки обрабатывал полученные данные. Если целевой объект разгрузки предоставляет допустимые данные с NET_BUFFER_LIST структурами, на которые указывает параметр NetBufferList , целевой объект разгрузки указывает количество допустимых байтов данных путем вызова макроса NET_BUFFER_LIST_INFO . Целевой объект разгрузки может подтвердить или не подтвердить некоторую часть полученных данных.
    NDIS_STATUS_UPLOAD_IN_PROGRESS
    Передается подключение, по которому был размещен буфер.
    NDIS_STATUS_INVALID_STATE
    Запрос на получение был размещен после того, как целевой объект разгрузки указал на отключение путем вызова NdisTcpOffloadEventHandler.
  • Указывает количество байтов данных, возвращаемых вызовом макроса NET_BUFFER_LIST_INFO с идентификаторомTcpOffloadBytesTransferred.
  • ВызываетФункция NdisAdvanceNetBufferDataStart. Параметр NetBufferList должен указывать на структуру NET_BUFFER, связанную со структурой NET_BUFFER_LIST. Параметр DataOffsetDelta должен указывать количество байтов данных, которые целевой объект разгрузки помещает в списки дескрипторов памяти (MDL), связанные со структурой NET_BUFFER. Параметр FreeMdl должен иметь значение NULL.

Требования

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

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

MiniportTcpOffloadReceive

NET_BUFFER

NET_BUFFER_LIST

NdisAdvanceNetBufferDataStart

NdisMRegisterMiniportDriver