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


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

Платформа PacketDirect (PD) вызывает функцию PDQueryQueueDepth драйвера минипорта с поддержкой PD, чтобы вернуть количество необработанных PD_BUFFER структур, которые передаются в очередь.

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

 

Синтаксис

NDIS_PD_QUERY_QUEUE_DEPTH NdisPdQueryQueueDepth;

VOID() NdisPdQueryQueueDepth(
  [in]  const NDIS_PD_QUEUE *Queue,
  [out] ULONG64 *Depth
)
{...}

Параметры

[in] Queue

Указатель на очередь передачи или получения.

[out] Depth

В очереди получения это количество PD_BUFFER структур, доступных для размещения входящих пакетов. Например, если было размещено 10 буферов, а 3 из 10 уже были отправлены поставщиком для размещения входящих пакетов, это значение должно быть равно 7. В очереди передачи это количество PD_BUFFER структур, которые поставщик еще не извлек из очереди для передачи.

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

Эта функция обратного вызова не возвращает значение.

Комментарии

Примечание Для партнеров IHV: возможность отслеживать глубину очереди очень важна для клиентов, чтобы получить доступ к нарастающей перегрузке и принять меры предосторожности. Увеличение глубины очереди для очереди передачи является признаком увеличения перегрузки в исходящем канале. Уменьшение глубины очереди для очереди RX означает, что клиент не может достаточно быстро обрабатывать входящие пакеты по входящего канала. Клиентам может потребоваться часто отслеживать состояние глубины очереди (например, получать глубину очереди для каждой операции и последующей операции, поэтому затраты (в циклах ЦП) на запрос глубины очереди не должны быть заметными по сравнению со стоимостью одного вызова PDPostAndDrainBufferList .
 

Примеры

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

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

NDIS_PD_QUERY_QUEUE_DEPTH MyPDQueryQueueDepth;

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

_Use_decl_annotations_
VOID
 MyPDQueryQueueDepth(
    CONST NDIS_PD_QUEUE*  Queue,
    ULONG64*  Depth
    )
  {...}

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

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

Требования

Требование Значение
Минимальная версия клиента Windows 10
Минимальная версия сервера Windows Server 2016
Целевая платформа Windows
Header ndis.h
IRQL <= DISPATCH_LEVEL