操作前と操作後のコールバック ルーチンの登録
操作前コールバック ルーチンと操作後コールバック ルーチンを登録するために、ミニフィルター ドライバーは、DriverEntry ルーチンで FltRegisterFilter を 1 回呼び出します。 FltRegisterFilter の「登録」パラメーターの場合、ミニフィルター ドライバーは、FLT_REGISTRATION 構造体へのポインターを渡します。 この構造体の OperationRegistration メンバーには、ミニフィルター ドライバーでフィルター処理する必要がある I/O 操作の種類ごとに 1 つずつ、FLT_OPERATION_REGISTRATION 構造体の配列へのポインターが含まれています。
配列内の各 FLT_OPERATION_REGISTRATION 構造体 (最後の構造体を除く) には、次の情報が含まれています。
操作の主要な関数コード。 I/O 操作とその要求の種類固有のパラメーターについては、FLT_PARAMETERS を参照してください。
読み取り操作と書き込み操作 (IRP_MJ_READ および IRP_MJ_WRITE) の場合、IRP ベースの I/O 操作でキャッシュされた I/O またはページング I/O を無視するか、またはその両方を無視するかを指定するフラグのセット
最大 1 つの操作前コールバック ルーチンと 1 つの操作後コールバック ルーチンのエントリ ポイント
配列の最後の要素は {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}
};