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