Функция обратного вызова PFNKSALLOCATOR (ks.h)
Мини-отвертки могут при необходимости предоставлять функцию обратного вызова типа 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. Это означает, что для операций ввода из пользовательского режима, которые не являются синхронными, распределителю необходимо выделить MDL для буфера назначения, проверить и заблокировать его, а также получить системный адрес. Это необходимо сделать, чтобы включить копирование возвращаемых данных в исходный буфер.
Требования
Требование | Значение |
---|---|
Целевая платформа | Персональный компьютер |
Верхняя часть | ks.h (включая Ks.h) |