функция обратного вызова W_TCP_OFFLOAD_SEND_HANDLER (ndischimney.h)
[Функция разгрузки дымохода TCP не рекомендуется и не должна использоваться.]
NDIS вызывает функцию MiniportTcpOffloadSend для передачи данных в отключенном TCP-подключении.
Синтаксис
W_TCP_OFFLOAD_SEND_HANDLER WTcpOffloadSendHandler;
NDIS_STATUS WTcpOffloadSendHandler(
[in] IN NDIS_HANDLE MiniportAdapterContext,
[in] IN PVOID MiniportOffloadContext,
[in] IN PNET_BUFFER_LIST NetBufferList
)
{...}
Параметры
[in] MiniportAdapterContext
Дескриптор выделенной области контекста для разгрузки, в которой целевой объект разгрузки сохраняет сведения о состоянии этого экземпляра адаптера. Целевой объект разгрузки предоставил этот дескриптор NDIS при вызове NdisMSetMiniportAttributes из нее функция MiniportInitializeEx.
[in] MiniportOffloadContext
Указатель на расположение памяти, содержащее значение PVOID. Это значение PVOID ссылается на контекст разгрузки мини-порта, содержащий объект состояния для TCP-подключения, на котором передаются данные. Целевой объект разгрузки предоставил это значение PVOID при разгрузке объекта состояния TCP-подключения.
[in] NetBufferList
Указатель на структуру NET_BUFFER_LIST. Эта структура может быть автономной или первой структурой в связанном списке NET_BUFFER_LIST структур. Каждая NET_BUFFER_LIST структура в списке описывает список NET_BUFFER структур. Каждая NET_BUFFER структура в списке сопоставляется с цепочкой списков дескрипторов памяти (MDLs). Многомерные выражения содержат передаваемые данные. NET_BUFFER_LIST и связанные структуры заблокированы, чтобы они оставались резидентными в физической памяти. Однако они не сопоставляются с системной памятью.
Возвращаемое значение
NDIS_STATUS_PENDING является единственным допустимым возвращаемым значением. Целевой объект разгрузки всегда завершает запрос отправки асинхронно путем вызова NdisTcpOffloadSendComplete.
Замечания
Целевой объект разгрузки должен передавать данные в первую очередь в порядке fiFO. Порядок связанного списка структур NET_BUFFER_LIST, передаваемых NDIS в NetBufferList представляет порядок передачи сетевых данных целевым объектом разгрузки. Кроме того, целевой объект разгрузки должен отправлять данные, полученные из нескольких вызовов, в MiniportTcpOffloadSend в том порядке, в котором были размещены данные.
Целевой объект разгрузки должен принимать все запросы отправки, сделанные в ее функции MiniportTcpOffloadSend. Если целевой объект разгрузки не может немедленно завершить запрос отправки, целевой объект разгрузки должен очередью запроса, пока он не сможет завершить его. Целевой объект разгрузки должен использовать MiniportReserved член структуры NET_BUFFER_LIST для отправки запросов в очередь. Пока запрос на отправку ожидается, целевой объект разгрузки сохраняет владение структурами NET_BUFFER_LIST и всеми ресурсами, связанными со структурами NET_BUFFER_LIST.
Стек узлов сериализует отправку запросов по каждому подключению. Стек не выдает запрос на отправку подключения, а другой запрос на отправку по этому подключению выполняется. Это гарантирует, что целевой объект разгрузки всегда получает запросы на отправку в правильном порядке.
Обратите внимание, что стек узлов может вызывать функцию MiniportTcpOffloadSend в соединении до завершения одного или нескольких предыдущих вызовов функции MiniportTcpOffloadSend в том же соединении. Обратите внимание, что стек узлов может вызывать функцию MiniportTcpOffloadSend в одном подключении при выполнении одного или нескольких вызовов функции MiniportTcpOffloadSend.
Функция MiniportTcpOffloadSend должна синхронизировать доступ к внутренним очередям сетевых данных с другими функциями MiniportXxxx, которые обращаются к тем же очередям. Целевой объект разгрузки может использовать спин-блокировки для синхронизации доступа к очередям.
Целевой объект разгрузки должен (но не требуется) задать бит PSH для каждой границы NET_BUFFER_LIST. Рекомендуется задать бит PSH в последнем сегменте, созданном из данных, связанных с каждой структурой NET_BUFFER_LIST (то есть данные, описанные структурами NET_BUFFER, связанными со структурой NET_BUFFER_LIST). Кроме того, целевой объект разгрузки может задать бит PSH в последнем оставшемся сегменте в очереди отправки до очистки очереди отправки.
Стек узлов не запрашивает целевой объект разгрузки для отправки срочных данных.
Требования
Требование | Ценность |
---|---|
целевая платформа | Виндоус |
заголовка | ndischimney.h (включая Ndischimney.h) |
IRQL | Любой уровень |