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