Регистрация процедур обратного вызова перед операции и после операции
Чтобы зарегистрировать процедуры обратного вызова до операции и подпрограммы обратного вызова после операции, драйвер минифильтра выполняет один вызов FltRegisterFilter в своей подпрограмме DriverEntry . Для параметра Registration в FltRegisterFilter драйвер минифильтра передает указатель на структуру FLT_REGISTRATION . Элемент OperationRegistration этой структуры содержит указатель на массив FLT_OPERATION_REGISTRATION структур, по одному для каждого типа операций ввода-вывода, которые должен фильтровать драйвер минифильтра.
Каждая FLT_OPERATION_REGISTRATION структура в массиве, за исключением последней, содержит следующие сведения:
Код основной функции для операции. Сведения об операциях ввода-вывода и их параметрах, относящихся к типу запроса, см. в разделе FLT_PARAMETERS .
Для операций чтения и записи (IRP_MJ_READ и IRP_MJ_WRITE) — набор флагов, указывающих, следует ли игнорировать кэшированные операции ввода-вывода или операции ввода-вывода на основе IRP.
Точки входа для одной процедуры обратного вызова до операции и одной процедуры обратного вызова после операции
Последним элементом массива должен быть {IRP_MJ_OPERATION_END}.
В следующем примере кода, взятом из примера драйвера минифильтра сканера, показан массив FLT_OPERATION_REGISTRATION структур. Пример драйвера минифильтра сканера регистрирует подпрограммы обратного вызова перед операцией и после операции для IRP_MJ_CREATE и перед операцией обратного вызова для IRP_MJ_CLEANUP и IRP_MJ_WRITE операций.
const FLT_OPERATION_REGISTRATION Callbacks[] = {
{IRP_MJ_CREATE,
0,
ScannerPreCreate,
ScannerPostCreate},
{IRP_MJ_CLEANUP,
0,
ScannerPreCleanup,
NULL},
{IRP_MJ_WRITE,
0,
ScannerPreWrite,
NULL},
{IRP_MJ_OPERATION_END}
};