Функция KsAllocateExtraData (ks.h)

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

Синтаксис

KSDDKAPI NTSTATUS KsAllocateExtraData(
  [in, out] PIRP  Irp,
  [in]      ULONG ExtraSize,
  [out]     PVOID *ExtraBuffer
);

Параметры

[in, out] Irp

Указывает IRP, содержащий заголовки потока. IRP должен быть ранее передан в KsProbeStreamIrp для буферизации заголовков.

[in] ExtraSize

Указывает размер (в байтах) дополнительной памяти, выделяемой между каждым заголовком потока. Это значение должно быть выровнено по восьмибайтовой границе. Копия заголовков помещается в возвращенный буфер, а между каждым заголовком вставляется дополнительный размер данных. Это должно быть освобождено вызывающим абонентом.

[out] ExtraBuffer

Указывает на указатель, выделенный вызывающим объектом, который при успешном завершении указывает на буфер, выделенный системой, содержащий заголовки потока и запрошенное заполнение между ними. Это должно быть освобождено вызывающим абонентом.

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

Функция KsAllocateExtraData возвращает STATUS_SUCCESS в случае успешного выполнения или возвращает ошибку ресурса или доступа.

Комментарии

После успешного завершения KsAllocateExtraData возвращается указатель на блок памяти, содержащий заголовки потоковых данных из IRP, указанные в IRP, и заполнение между каждым заголовком размера, указанным в ExtraSize. Ниже приведен пример такого результирующих буфера:

Схема, иллюстрирующая результирующий буфер.

Если дополнительный буфер больше не требуется, память должна быть освобождена с помощью ExFreePool.

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть ks.h (включая Ks.h)
Библиотека Ks.lib
IRQL < DISPATCH_LEVEL