Поделиться через


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

Функция MiniportCoSendNetBufferLists передает сетевые данные, содержащиеся в указанном связанном списке NET_BUFFER_LIST структур.

Примечание Функцию необходимо объявить с помощью типа MINIPORT_CO_SEND_NET_BUFFER_LISTS . Дополнительные сведения см. в следующем разделе Примеры.
 

Синтаксис

MINIPORT_CO_SEND_NET_BUFFER_LISTS MiniportCoSendNetBufferLists;

void MiniportCoSendNetBufferLists(
  [in] NDIS_HANDLE MiniportVcContext,
  [in] PNET_BUFFER_LIST NetBufferLists,
  [in] ULONG SendFlags
)
{...}

Параметры

[in] MiniportVcContext

Дескриптор области контекста, выделенной драйвером мини-порта, в которой драйвер мини-порта поддерживает состояние каждого виртуального подключения (VC). Драйвер мини-порта предоставил этот дескриптор NDIS из функции MiniportCoCreateVc .

[in] NetBufferLists

Указатель на первую структуру NET_BUFFER_LIST в связанном списке NET_BUFFER_LIST структур. Каждая структура NET_BUFFER_LIST в списке описывает список NET_BUFFER структур. Каждая NET_BUFFER структура в списке сопоставляется с цепочкой списков дескрипторов памяти (MDL). Многомерные списки содержат сетевые данные, передаваемые MiniportCoSendNetBufferLists .

[in] SendFlags

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

NDIS_SEND_FLAGS_DISPATCH_LEVEL

При необходимости вызывающий объект может установить этот флаг, если текущий irQL DISPATCH_LEVEL. Дополнительные сведения об этом флаге см. в разделе Dispatch IRQL Tracking.

NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK

NDIS должна проверка для замыкания на себя. По умолчанию NDIS не выполняет цикловую обратную передачу данных в драйвер, отправляющий запрос на отправку. Переопределяющий драйвер может переопределить это поведение, установив флаг NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK . Если этот флаг установлен, NDIS определяет все NET_BUFFER структуры, содержащие данные, соответствующие критериям получения для привязки. NDIS указывает , NET_BUFFER структуры, которые соответствуют критериям для вышеопределяющего драйвера. Этот флаг не влияет на проверку замыкания на себя или зацикливание на других привязках.

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

None

Remarks

Для драйверов мини-портов CoNDIS требуется функция MiniportCoSendNetBufferLists . Когда драйвер слишком много раз вызываетФункция NdisCoSendNetBufferLists, NDIS вызывает функцию MiniportCoSendNetBufferLists связанного драйвера мини-порта.

Порядок связанного списка NET_BUFFER_LIST структур, которые NDIS передает в NetBufferLists , представляет порядок передачи сетевых данных драйвером мини-порта. Кроме того, драйвер мини-порта должен отправлять структуры NET_BUFFER_LIST из нескольких вызовов MiniportCoSendNetBufferLists в том порядке, в который драйвер мини-порта получил структуры.

Драйверы мини-портов CoNDIS должны принимать все запросы на отправку, выполняемые NDIS, путем вызова функции MiniportCoSendNetBufferLists . Если драйвер мини-порта не может выполнить запрос на отправку немедленно, драйвер должен держать запрос в очереди, пока он не сможет завершить запрос. Пока запрос на отправку находится в состоянии ожидания, драйвер мини-порта сохраняет за собой право собственности на структуры NET_BUFFER_LIST и все ресурсы, связанные с NET_BUFFER_LIST структурами.

Драйвер мини-порта должен вызватьФункция NdisMCoSendNetBufferListsComplete для выполнения всех запросов отправки CoNDIS. Чтобы повысить производительность компьютера, драйвер может создать связанный список, содержащий структуры NET_BUFFER_LIST из нескольких запросов на отправку. Затем драйвер может передать такой связанный список в одном вызове NdisMCoSendNetBufferListsComplete.

Кроме того, следует предположить, что драйвер мини-порта не может получить доступ к структурам NET_BUFFER_LIST и другим связанным ресурсам, как только драйвер вызывает NdisMCoSendNetBufferListsComplete.

Функция MiniportCoSendNetBufferLists должна синхронизировать доступ к внутренним очередям сетевых данных с другими функциями Драйвера MiniportXxx, которые обращаются к тем же очередям. Драйвер мини-порта может использовать спин-блокировки для синхронизации доступа к очередям.

Драйверы протокола отвечают за определение необходимых сетевых данных на основе среднего типа, выбранного привязанным драйвером мини-порта. Однако драйвер протокола может предоставлять сетевые данные, указывающие пакеты, которые меньше минимального размера пакета для выбранного носителя. В этом случае MiniportCoSendNetBufferLists должен заполнять пакеты нулями, если выбранная среда накладывает требование минимальной длины к размеру передаваемого пакета.

NDIS вызывает MiniportCoSendNetBufferLists по адресу IRQL<= DISPATCH_LEVEL.

Примеры

Чтобы определить функцию MiniportCoSendNetBufferLists , необходимо сначала предоставить объявление функции, определяющее тип определяемой функции. Windows предоставляет набор типов функций для драйверов. Объявление функции с помощью типов функций помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить функцию MiniportCoSendNetBufferLists с именем MyCoSendNetBufferLists, используйте тип MINIPORT_CO_SEND_NET_BUFFER_LISTS , как показано в следующем примере кода:

MINIPORT_CO_SEND_NET_BUFFER_LISTS MyCoSendNetBufferLists;

Затем реализуйте функцию следующим образом:

_Use_decl_annotations_
VOID
 MyCoSendNetBufferLists(
    NDIS_HANDLE  MiniportVcContext,
    PNET_BUFFER_LIST  NetBufferLists,
    ULONG  SendFlags
    )
  {...}

Тип функции MINIPORT_CO_SEND_NET_BUFFER_LISTS определен в файле заголовка Ndis.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку Use_decl_annotations в определение функции. Заметка Use_decl_annotations гарантирует использование заметок, применяемых к типу функции MINIPORT_CO_SEND_NET_BUFFER_LISTS в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов NDIS.

Сведения о Use_decl_annotations см. в статье Поведение функции с заметками.

Требования

Требование Значение
Минимальная версия клиента Поддерживается в NDIS 6.0 и более поздних версиях.
Целевая платформа Windows
Header ndis.h (включая Ndis.h)
IRQL <= DISPATCH_LEVEL

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

MiniportCoCreateVc

NET_BUFFER

NET_BUFFER_LIST

NdisCoSendNetBufferLists

NdisMCoSendNetBufferListsComplete