PFLT_INSTANCE_TEARDOWN_CALLBACK コールバック関数 (fltkernel.h)
ミニフィルター ドライバーは、ミニフィルター ドライバーの InstanceTeardownStartCallback と InstanceTeardownCompleteCallback ルーチンとして PFLT_INSTANCE_TEARDOWN_CALLBACK 型の 2 つのルーチン 登録できます。
構文
PFLT_INSTANCE_TEARDOWN_CALLBACK PfltInstanceTeardownCallback;
void PfltInstanceTeardownCallback(
[in] PCFLT_RELATED_OBJECTS FltObjects,
[in] FLT_INSTANCE_TEARDOWN_FLAGS Reason
)
{...}
パラメーター
[in] FltObjects
現在の I/O 操作に関連するオブジェクトの不透明なポインターを含む FLT_RELATED_OBJECTS 構造体へのポインター。
[in] Reason
ミニフィルター ドライバー インスタンスが破損している理由を示すフラグ。 次のいずれかの手順を実行します。
戻り値
何一つ
備考
ミニフィルター ドライバーは、DriverEntry ルーチンから FltRegisterFilterを呼び出して自分自身を登録する場合、ミニフィルター ドライバーの InstanceTeardownStartCallback と InstanceTeardownCompleteCallback ルーチンとしてPFLT_INSTANCE_TEARDOWN_CALLBACK型の 2 つのルーチン 登録できます。 これらのコールバック ルーチンを登録するために、ミニフィルター ドライバーは、InstanceTeardownStartCallback にPFLT_INSTANCE_TEARDOWN_CALLBACK型の 2 つのルーチンのアドレスを格納し、ミニフィルター ドライバーが渡す FLT_REGISTRATION 構造体の InstanceTeardownCompleteCallback メンバー FltRegisterFilterの Registration パラメーターとして格納します。
InstanceTeardownStartCallback および InstanceTeardownCompleteCallback ルーチン は省略可能であり、NULL できます。 ミニフィルター ドライバーで、InstanceTeardownStartCallback または InstanceTeardownCompleteCallback ルーチンに対して NULL 指定した場合、インスタンスは引き続き破棄されます。
InstanceTeardownStartCallback ルーチンは、フィルター マネージャーがミニフィルター ドライバー インスタンスの破棄を開始すると呼び出され、ミニフィルター ドライバーがペンドされた I/O 操作を完了し、状態情報を保存できるようになります。
InstanceTeardownStartCallback ルーチンは、次の手順を実行する必要があります。
- 操作 完了するか、フィルター マネージャーに操作の制御を返すために、ミニフィルター ドライバーのプリ操作コールバック ルーチンにペンドされた各 I/O 操作に対して FltCompletePendedPreOperation を呼び出します。
- 新しい I/O 操作は実行されません。 ミニフィルター ドライバーがコールバック データ キューを使用する場合は、FltCbdqDisable呼び出して無効にする必要があります。
- フィルター マネージャー 操作の制御を返すミニフィルター ドライバーのポスト操作コールバック ルーチンにペンドされた各 I/O 操作の FltCompletePendedPostOperation を呼び出します。
InstanceTeardownStartCallback ルーチンは、必要に応じて、ミニフィルター ドライバーをできるだけ早くアンロードできるように、次の操作を行うことができます。
- 開いているファイルをすべて閉じます。
- ワーカー スレッドが、未処理の作業項目の処理を完了するために必要な最小限の処理のみを実行するようにします。
- FltCancelIo呼び出して、ミニフィルター ドライバーによって開始されたすべての I/O 操作を取り消します。
- 新しい作業項目のキューを停止します。
ミニフィルター ドライバーの InstanceTeardownStartCallback ルーチンが呼び出されると、新しい I/O 操作に対してミニフィルター ドライバーの事前操作および事後操作コールバック ルーチンは呼び出されません。 ただし、インスタンスの破棄が開始される前に開始された I/O 操作に対して呼び出される場合があります。
InstanceTeardownCompleteCallback ルーチンは、ミニフィルター ドライバーが開いているファイルを閉じ、その他の必要なクリーンアップ処理を実行できるように、破棄プロセスが完了したときに呼び出されます。
InstanceTeardownCompleteCallback ルーチンは、ミニフィルター ドライバーによって開かれたすべてのファイルを閉じる必要があります。
フィルター マネージャーは、未処理のすべての I/O 操作が完了またはドレインされた後にのみ、ミニフィルター ドライバーの InstanceTeardownCompleteCallback ルーチンを呼び出します。
警告
InstanceTeardownCompleteCallback ルーチンは、次のいずれかの条件に該当する場合は呼び出されません。
- 未処理のペンド I/O 操作があります。
- ミニフィルター ドライバーによって開始された未処理の I/O 操作があります。
ミニフィルター ドライバーがアンロードされているためにミニフィルター ドライバー インスタンスが切断されている場合は、InstanceTeardownCompleteCallback ルーチンが戻るまでアンロード操作がハングしているように見えます。 このような問題をデバッグするには、ミニフィルター ドライバーで ドライバー検証ツールの を有効にする必要があります。 フィルター検証ツール I/O 検証 オプションは、未リリースの参照など、ミニフィルター ドライバーのアンロードを妨げる原因を特定するのに役立ちます。 詳細については、「検証ツールのフィルター 」を参照してください。
(FltObjectReference呼び出して) インスタンスを参照しても、InstanceTeardownCompleteCallback ルーチンが呼び出されるのを防ぐことはありません。
フィルター マネージャーは、InstanceTeardownStartCallback を呼び出し、IRQL PASSIVE_LEVELで InstanceTeardownCompleteCallback ルーチンを します。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | デスクトップ |
ヘッダー | fltkernel.h (Fltkernel.h を含む) |
IRQL | 「解説」セクションを参照してください。 |
関連項目
FltCancelIoをする
FltCbdqDisableの
FltCompletePendedPostOperationの
FltCompletePendedPreOperationの
FltDetachVolumeをする
FltObjectReferenceの
FltRegisterFilterの