Функция NdisCoSendNetBufferLists (ndis.h)
Функция NdisCoSendNetBufferLists отправляет сетевые данные, содержащиеся в указанном списке структур NET_BUFFER_LIST.
Синтаксис
void NdisCoSendNetBufferLists(
[in] NDIS_HANDLE NdisVcHandle,
[in] PNET_BUFFER_LIST NetBufferLists,
[in] ULONG SendFlags
);
Параметры
[in] NdisVcHandle
Дескриптор виртуального подключения (VC), определяющий целевой объект запроса на отправку.
[in] NetBufferLists
Указатель на связанный список структур NET_BUFFER_LIST. Каждая NET_BUFFER_LIST структура описывает список NET_BUFFER структур.
[in] SendFlags
Флаги, определяющие атрибуты для операции отправки. Флаги можно объединить с побитовой операцией OR. Чтобы очистить все флаги, установите для этого параметра значение нулю. NdisCoSendNetBufferLists поддерживает следующие флаги:
NDIS_SEND_FLAGS_DISPATCH_LEVEL
Текущий IRQL DISPATCH_LEVEL. Дополнительные сведения об этом флаге см. в отслеживания IRQL.
NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK
NDIS должен проверять наличие обратного цикла. По умолчанию NDIS не циклит данные в драйвер, отправляющий запрос на отправку. Переопределяющий драйвер может переопределить это поведение, задав NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK. Если этот флаг задан, NDIS определяет все структуры NET_BUFFER, содержащие данные, соответствующие критериям получения привязки. NDIS указывает, NET_BUFFER структуры, соответствующие критериям, которые соответствуют критерию для движущееся драйвера. Этот флаг не влияет на проверку обратного цикла или циклического цикла на других привязках.
Возвращаемое значение
Никакой
Замечания
После вызова драйвера протокола CoNDIS NdisCoSendNetBufferLists, NDIS отправляет структуры NET_BUFFER_LIST, которые параметр NetBufferLists указывает базовому драйверу функция MiniportCoSendNetBufferLists.
Драйвер протокола должен выделить каждую NET_BUFFER_LIST структуру из пула, вызвав одну из следующих функций:
Драйвер протокола может предварительно выделить NET_BUFFER_LIST структуры, например, в подпрограмме DriverEntry. Кроме того, драйвер протокола может выделить структуры непосредственно перед вызовом NdisCoSendNetBufferLists, а затем освободить их после завершения операции отправки. Когда NDIS возвращает структуру NET_BUFFER_LIST в функция ProtocolCoSendNetBufferListsComplete, драйвер протокола может подготовить структуру NET_BUFFER_LIST и любые связанные ресурсы для повторного использования. При повторном использовании NET_BUFFER_LIST структур можно повысить производительность, чем вернуть структуры в пул, а затем перераспределить их для другой операции отправки.Драйвер протокола должен задать элемент SourceHandle каждой структуры NET_BUFFER_LIST одинаковое значение, которое он передает в параметре NdisVcHandle. Исходный дескриптор предоставляет сведения, необходимые NDIS для возврата NET_BUFFER_LIST структуры драйверу протокола после вызова базового драйвера мини-порта функция NdisMCoSendNetBufferListsComplete.
Прежде чем драйвер протокола вызывает NdisCoSendNetBufferLists, драйвер может задать сведения, сопровождающие запрос отправки с помощью макроса NET_BUFFER_LIST_INFO. Базовый драйвер может получить эти сведения с помощью макроса NET_BUFFER_LIST_INFO.
Прежде чем драйвер протокола вызывает NdisCoSendNetBufferLists со списком структур NET_BUFFER_LIST, драйвер протокола должен убедиться, что структуры NET_BUFFER_LIST настроены в порядке отправки сетевых данных.
Как только драйвер протокола вызывает NdisCoSendNetBufferLists, он больше не владеет структурами NET_BUFFER_LIST и всеми связанными ресурсами. NDIS вызывает функцию ProtocolCoSendNetBufferListsComplete, чтобы вернуть структуры и данные драйверу протокола. NDIS может собирать структуры и данные из нескольких запросов отправки в один связанный список структур NET_BUFFER_LIST, прежде чем он передает список в ProtocolCoSendNetBufferListsComplete.
Пока NDIS не вызывает ProtocolCoSendNetBufferListsComplete, текущее состояние, инициированное драйвером протокола, недоступно для драйвера протокола. Драйвер протокола временно освобождает владение всеми ресурсами, выделенными для запроса на отправку при вызове NdisCoSendNetBufferLists. Драйвер протокола никогда не должен пытаться проверить структуры NET_BUFFER_LIST или любые связанные данные после вызова драйвера NdisCoSendNetBufferLists.