Функция KsSetMajorFunctionHandler (ks.h)
Функция KsSetMajorFunctionHandler задает обработчик для указанной основной функции для использования внутренней диспетчеризации. Он направляется через KSDISPATCH_TABLE, содержащийся в заголовке непрозрачного объекта, чтобы быть первым элементом в структуре, на которую указывает FsContext в объекте файла. При диспетчеризации предполагается, что таблица и структура FsContext инициализируются устройством с помощью KsAllocateObjectHeader.
Синтаксис
KSDDKAPI NTSTATUS KsSetMajorFunctionHandler(
[in] PDRIVER_OBJECT DriverObject,
[in] ULONG MajorFunction
);
Параметры
[in] DriverObject
Указывает объект драйвера, основная функция которого должна обрабатываться.
[in] MajorFunction
Указывает идентификатор основной функции для обработки. При этом указатель основной функции в объекте драйвера задается на внутреннюю функцию, которая затем отправляется в KSDISPATCH_TABLE функцию. Предполагается, что указатель на эту таблицу является первым элементом в структуре, на которую указывает FsContext в объекте файла конкретной отправляемой IRP. Допустимые идентификаторы основных функций приведены в списке.
Идентификатор | Описание |
---|---|
IRP_MJ_CREATE | Create IRP. В этом случае запрос на создание можно использовать либо для создания нового экземпляра фильтра, либо для создания объекта, такого как закрепление под фильтром или часы под закреплением. При этом предполагается, что первый элемент в экстенте объекта драйвера содержит KSDEVICE_HEADER структуру, которая используется для поиска типа создаваемого объекта на основе переданного имени. Если указан родительский объект файла, то этот объект KSDISPATCH_TABLE. ChildCreateHandlerTable в FsContext проверяется, чтобы определить, какой обработчик следует использовать для создания или использовать таблицу объекта устройства. |
IRP_MJ_CLOSE | Закройте IRP. |
IRP_MJ_DEVICE_CONTROL | IRP элемента управления устройством. |
IRP_MJ_READ | Чтение IRP. |
IRP_MJ_WRITE | Напишите IRP. |
IRP_MJ_FLUSH_BUFFERS | Очистка IRP. |
IRP_MJ_QUERY_SECURITY | Запрос сведений о безопасности. |
IRP_MJ_SET_SECURITY | Настройка сведений о безопасности. |
KSDISPATCH_FASTIO | Этот флаг можно добавить в идентификатор MajorFunction, чтобы указать, что запись ссылается на таблицу быстрой отправки ввода-вывода, а не на типичную основную запись функции. Это допустимо только для IRP_MJ_READ, IRP_MJ_WRITE или IRP_MJ_DEVICE_CONTROL. Драйвер отвечает за создание таблицы DriverObject-FastIoDispatch>. Как и при обычной диспетчеризации, если для объекта драйвера задан обработчик, все файловые объекты должны обрабатывать этот быстрый ввод-вывод, даже если запись указывает только на DispatchFastIoDeviceControlFailure или аналогичную функцию. |
Возвращаемое значение
Возвращает STATUS_SUCCESS, если идентификатор MajorFunction является допустимым.
Комментарии
Если для объекта драйвера задан обработчик основной функции, все объекты файлов должны обрабатывать основную функцию, даже если запись указывает только на KsDispatchInvalidDeviceRequest.
KSDISPATCH_FASTIO
Этот флаг можно использовать, чтобы указать, что должна быть задана запись быстрого ввода-вывода, а не запись на основе IRP.
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Верхняя часть | ks.h (включая Ks.h) |
Библиотека | Ks.lib |