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


Функция обратного вызова PFNKSALLOCATOR (ks.h)

Мини-drivers могут при необходимости предоставлять функцию обратного вызова типа PFNKSALLOCATOR в качестве параметра в вызовах KsEnableEventWithAllocator, KsPropertyHandlerWithAllocatorи KsMethodHandlerWithAllocator.

Синтаксис

PFNKSALLOCATOR Pfnksallocator;

NTSTATUS Pfnksallocator(
  [in] PIRP Irp,
  [in] ULONG BufferSize,
  [in] BOOLEAN InputOperation
)
{...}

Параметры

[in] Irp

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

[in] BufferSize

Указывает необходимый размер буфера. Этот размер охватывает все параметры в запросе.

[in] InputOperation

Установите значение TRUE, если это входная операция, то есть при успешном возвращении поле Irp->IoStatus.Information будет содержать количество байтов для копирования обратно в исходный входной буфер.

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

Возвращает STATUS_SUCCESS, если запрос обрабатывается. В противном случае возвращает соответствующий код ошибки.

Замечания

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

Так как эта память, предположительно, не является обычной выделенной пулом памяти, фильтр должен выполнить очистку буфера при завершении Irp. Это означает, что для операций ввода из пользовательскогоmode, которые не синхронны, распределитель должен выделить MDL для целевого буфера, пробы и блокировки, а также получить системный адрес. Это необходимо сделать, чтобы включить копирование возвращаемых данных в исходный буфер.

Требования

Требование Ценность
целевая платформа Настольный
заголовка ks.h (include Ks.h)