次の方法で共有


操作前と操作後のコールバック ルーチンの登録

操作前コールバック ルーチン操作後コールバック ルーチンを登録するために、ミニフィルター ドライバーは、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}
};