FltAttachVolume 関数 (fltkernel.h)
FltAttachVolume は、新しいミニフィルター ドライバー インスタンスを作成し、指定されたボリュームにアタッチします。
構文
NTSTATUS FLTAPI FltAttachVolume(
[in, out] PFLT_FILTER Filter,
[in, out] PFLT_VOLUME Volume,
[in, optional] PCUNICODE_STRING InstanceName,
[out] PFLT_INSTANCE *RetInstance
);
パラメーター
[in, out] Filter
呼び出し元の不透明なフィルター ポインター。 このパラメーターは必須であり、 NULL にすることはできません。
[in, out] Volume
ミニフィルター ドライバー インスタンスがアタッチされるボリュームの不透明なボリューム ポインター。 このパラメーターは必須であり、 NULL にすることはできません。
[in, optional] InstanceName
新しいインスタンスのインスタンス名を含む UNICODE_STRING 構造体へのポインター。 このパラメーターは省略可能であり、 NULL にすることができます。 NULL の場合、FltAttachVolume はミニフィルター ドライバーの既定のインスタンス名をレジストリから読み取ろうとします。 (このパラメーターの詳細については、次の「解説」セクションを参照してください)。
[out] RetInstance
新しく作成されたインスタンスの不透明なインスタンス ポインターを受け取る呼び出し元によって割り当てられた変数へのポインター。 このパラメーターは省略可能であり、 NULL にすることができます。
戻り値
FltAttachVolume は、次のいずれかのSTATUS_SUCCESSまたは適切な NTSTATUS 値を返します。
リターン コード | 説明 |
---|---|
|
指定した フィルター または ボリューム が破棄されています。 これはエラー コードです。 |
|
ミニフィルター ドライバーがフィルター処理を開始していません。 詳細については、「 FltStartFiltering」を参照してください。 これはエラー コードです。 |
|
指定されたボリュームに、この名前のインスタンスが既に存在します。 |
|
FltAttachVolume でプール割り当てエラーが発生しました。 これはエラー コードです。 |
|
レジストリから読み取られたインスタンス属性で指定された高度で、別のインスタンスが既にアタッチされています。 これはエラー コードです。 |
注釈
呼び出し元が InstanceName に NULL 以外の値を指定した場合、FltAttachVolume は、レジストリに格納されているミニフィルター ドライバーで指定されたインスタンス属性を HKLM\CurrentControlSet\Services\ServiceName\Instances\InstanceName の下で読み取ります。ここで、ServiceName はミニフィルター ドライバーのサービス名です。 このサービス名は、ミニフィルター ドライバーの INF ファイルの DefaultInstall.Services セクションの AddService ディレクティブで指定されます。 (フィルター ドライバー INF ファイルの詳細については、「 ファイル システム フィルター ドライバーのインストール」を参照してください)。
呼び出し元が InstanceName の値を指定しない場合、FltAttachVolume は、レジストリ パスの InstanceName 部分に HKLM\CurrentControlSet\Services\ServiceName\Instances\DefaultInstance の下のレジストリに格納されている名前を使用します。
InstanceName パラメーターで指定されたインスタンス名は、システム全体で一意である必要があります。
FltAttachVolume は 、*RetInstance 内の新しいインスタンスの不透明なインスタンス ポインターを返します。 このポインター値は、ミニフィルター ドライバー インスタンスを一意に識別し、インスタンスがボリュームにアタッチされている限り一定のままになります。
FltAttachVolume は、 *RetInstance で返される不透明なインスタンス ポインターにランダウン参照を追加します。 このポインターが不要になった場合、呼び出し元は FltObjectDereference を呼び出して解放する必要があります。 したがって、 FltAttachVolume への正常な呼び出しはすべて、 FltObjectDereference の後続の呼び出しと一致する必要があります。
ミニフィルター ドライバー インスタンスを特定の高度のボリュームにアタッチするには、 FltAttachVolumeAtAltitude を呼び出します。
同じボリュームにアタッチされている 2 つのミニフィルター ドライバー インスタンスの高度を比較するには、 FltCompareInstanceAltitudes を呼び出します。
ミニフィルター ドライバー インスタンスをボリュームからデタッチするには、 FltDetachVolume を呼び出します。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | fltkernel.h (Fltkernel.h を含む) |
Library | FltMgr.lib |
IRQL | PASSIVE_LEVEL |