Функция NdisMCoIndicateReceiveNetBufferLists (ndis.h)
Функция NdisMCoIndicateReceiveNetBufferLists указывает, что драйвер минипорта получил данные из сети.
Синтаксис
void NdisMCoIndicateReceiveNetBufferLists(
[in] IN NDIS_HANDLE NdisVcHandle,
[in] IN PNET_BUFFER_LIST NetBufferLists,
[in] IN ULONG NumberOfNetBufferLists,
[in] IN ULONG CoReceiveFlags
);
Параметры
[in] NdisVcHandle
Дескриптор, определяющий виртуальное подключение (VC). Минипорт-драйвер получил этот дескриптор в качестве входного параметра для своей функции MiniportCoCreateVc, когда клиент настроит исходящий вызов или когда диспетчер вызовов создал VC для точки доступа к зарегистрированной клиентом службе (SAP), чтобы указать уведомление о входящих вызовах.
[in] NetBufferLists
Связанный список структур NET_BUFFER_LIST, выделенных мини-драйвером.
[in] NumberOfNetBufferLists
Число NET_BUFFER_LIST структур, которые находятся в связанном списке структур, которые NetBufferLists.
[in] CoReceiveFlags
Флаги, определяющие атрибуты для операции отправки. Флаги можно объединить с побитовой операцией OR. Чтобы очистить все флаги, установите для этого параметра значение нулю. NdisMCoIndicateReceiveNetBufferLists поддерживает следующие флаги:
NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL
Текущий IRQL DISPATCH_LEVEL. Дополнительные сведения об этом флаге см. в отслеживания IRQL.
NDIS_RECEIVE_FLAGS_RESOURCES
Драйвер минипорта освобождает владение структурами NET_BUFFER_LIST и любыми подключенными NET_BUFFER структурами сразу после возврата NdisMCoIndicateReceiveNetBufferLists.
Возвращаемое значение
Никакой
Замечания
Мини-драйвер обычно вызывает функцию NdisMCoIndicateReceiveNetBufferLists из функции MiniportInterruptDPC. Когда драйвер минипорта вызывает NdisMCoIndicateReceiveNetBufferLists, он задает список структур NET_BUFFER_LIST в параметре NetBufferLists. Затем NDIS передает структуры NET_BUFFER_LIST для привязки драйверов протокола.
Драйверы минипорта должны задать для элемента SourceHandle каждой структуры NET_BUFFER_LIST то же значение, что и параметр NdisVcHandle, чтобы NDIS мог возвращать структуры NET_BUFFER_LIST в правильный минипорт-драйвер.
Если драйвер минипорта вызывает NdisMCoIndicateReceiveNetBufferLists и очищает флаг NDIS_RECEIVE_FLAGS_RESOURCES в параметре CoReceiveFlags, NDIS возвращает структуры NET_BUFFER_LIST, которые NetBufferLists указывает в драйвер минипорта функция MiniportReturnNetBufferLists. В этом случае драйвер минипорта не должен возвращать структуры NET_BUFFER_LIST, пока NDIS не возвращает NET_BUFFER_LIST структуры минипорта MiniportReturnNetBufferLists.
Если драйвер минипорта вызывает NdisMCoIndicateReceiveNetBufferLists и задает флаг NDIS_RECEIVE_FLAGS_RESOURCES в параметре CoReceiveFlags, драйвер минипорта должен немедленно восстановить владение структурами NET_BUFFER_LIST. В этом случае NDIS не вызывает функцию miniport driver MiniportReturnNetBufferLists для возврата структур NET_BUFFER_LIST. Вместо этого NDIS возвращает структуры NET_BUFFER_LIST в драйвер мини-порта при возврате NdisMCoIndicateReceiveNetBufferLists. Минипорт-драйвер должен восстановить структуры NET_BUFFER_LIST сразу после возврата NdisMCoIndicateReceiveNetBufferLists. Чтобы освободить структуры NET_BUFFER_LIST, минипорт-драйвер может вызвать свой собственный функция MiniportReturnNetBufferLists.
Если мини-драйвер задает флаг NDIS_RECEIVE_FLAGS_RESOURCES в параметре CoReceiveFlags, драйверы протокола должны скопировать сетевые данные и освободить структуры NET_BUFFER_LIST в минипорт-драйвер. Чтобы избежать ненужных копирований, следует разработать мини-порты с достаточной предварительной NET_BUFFER_LIST структурой.
Вызывающий объект NdisMCoIndicateReceiveNetBufferLists должен правильно инициализировать структуры NET_BUFFER_LIST, присоединенные структуры NET_BUFFER и все списки дескрипторов памяти (MDLs).