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

Подпрограмма CalculateScatterGatherList вычисляет размер (в байтах) списка точечной и собираемой информации, необходимой для хранения заданного буфера.

Синтаксис

PCALCULATE_SCATTER_GATHER_LIST_SIZE PcalculateScatterGatherListSize;

NTSTATUS PcalculateScatterGatherListSize(
  [in]            PDMA_ADAPTER DmaAdapter,
  [in, optional]  PMDL Mdl,
  [in]            PVOID CurrentVa,
  [in]            ULONG Length,
  [out]           PULONG ScatterGatherListSize,
  [out, optional] PULONG pNumberOfMapRegisters
)
{...}

Параметры

[in] DmaAdapter

Указатель на структуру DMA_ADAPTER, возвращаемую IoGetDmaAdapter, которая представляет адаптер master шины или контроллер DMA.

[in, optional] Mdl

Либо значение NULL , либо указатель на MDL, содержащий буфер.

[in] CurrentVa

Указатель на виртуальный адрес начала буфера.

[in] Length

Задает длину буфера в байтах.

[out] ScatterGatherListSize

Указатель на переменную, используется подпрограммой для возврата размера точечных и собираемых списков в байтах.

[out, optional] pNumberOfMapRegisters

Либо значение NULL , либо указатель на переменную, используется подпрограммой для возврата количества регистров карты, необходимых для операций DMA в буфере.

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

CalculateScatterGatherList возвращает один из следующих кодов состояния.

Код возврата Описание
STATUS_SUCCESS
Значения, возвращаемые в ScatterGatherListSize и NumberOfMapRegisters, являются допустимыми .
STATUS_INSUFFICIENT_RESOURCES
Требуемое количество регистров карты превышает количество доступных регистров карты.
STATUS_BUFFER_TOO_SMALL
Указанная длина слишком велика, чтобы поместиться в буфер.

Комментарии

CalculateScatterGatherList не является системной подпрограммой, которую можно вызывать напрямую по имени. Эта подпрограмма может вызываться только указателем из адреса, возвращаемого в DMA_OPERATIONS структуре. Драйверы получают адрес этой подпрограммы, вызывая IoGetDmaAdapter с элементом Version параметра DeviceDescription , для DEVICE_DESCRIPTION_VERSION2. Если IoGetDmaAdapter возвращает значение NULL, подпрограмма недоступна на вашей платформе.

Если вызывающий объект передает значение NULL для параметра Mdl , подпрограмма вычисляет максимальный возможный размер, необходимый для хранения точечной или собираемой таблицы для указанного буфера. Если вызывающий объект указывает MDL, содержащий буфер в параметре Mdl , подпрограмма вычисляет фактический размер, необходимый для хранения списка точечной и сборной.

Драйвер использует CalculateScatterGatherList для выделения буфера точечной и собираемой списков для передачи в BuildScatterGatherList.

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows XP и более поздних версиях Windows.
Целевая платформа Персональный компьютер
Верхняя часть wdm.h (включая Wdm.h)
IRQL Любой уровень

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

BuildScatterGatherList

DEVICE_DESCRIPTION

DMA_ADAPTER

DMA_OPERATIONS

IoGetDmaAdapter

SCATTER_GATHER_LIST