次の方法で共有


FltGetDiskDeviceObject 関数 (fltkernel.h)

FltGetDiskDeviceObject ルーチンは、特定のボリュームに関連付けられているディスク デバイス オブジェクトへのポインターを返します。

構文

NTSTATUS FLTAPI FltGetDiskDeviceObject(
  [in]  PFLT_VOLUME    Volume,
  [out] PDEVICE_OBJECT *DiskDeviceObject
);

パラメーター

[in] Volume

ボリュームの不透明なポインター。 このパラメーターは必須であり、NULL することはできません。

[out] DiskDeviceObject

デバイス オブジェクト ポインターを受け取る呼び出し元によって割り当てられた変数へのポインター。 エラーが発生しても、このパラメーターは変更されません。

戻り値

FltGetDiskDeviceObject は、STATUS_SUCCESSまたは次のような適切な NTSTATUS 値を返します。

リターン コード 形容
STATUS_FLT_NO_DEVICE_OBJECT 要求されたデバイス オブジェクトは、指定されたボリュームに対して存在しません。 これはエラー コードです。

備考

FltGetDiskDeviceObject 、ボリュームが存在する物理ディスクのストレージ デバイス オブジェクトへのポインターを取得します。 ストレージ デバイスが実際のディスクである必要はありません。

FltGetDiskDeviceObject 、DiskDeviceObject で返されるデバイス オブジェクト ポインターの参照カウントインクリメントします。 このポインターが不要になったら、呼び出し元は ObDereferenceObject呼び出して、この参照カウントをデクリメントする必要があります。 これを行わないと、未処理の参照のためにシステムがデバイス オブジェクトを解放または削除できなくなります。 したがって、FltGetDiskDeviceObject 呼び出しが成功するたびに、後続の呼び出しで ObDereferenceObject 照合する必要があります。

ミニフィルターは、I/O 関連のコールバックでのみ FltGetDiskDeviceObject 呼び出す必要があります。 それ以外の場合、返されるデバイス オブジェクトのフィールドが無効である可能性があります。 これは、InstanceTeardownStartCallback や InstanceTeardownCompleteCallback などのコールバック ルーチンの場合です。

特定のボリュームのフィルター マネージャーのボリューム デバイス オブジェクト (VDO) へのポインターを取得するには、FltGetDeviceObject呼び出します。

ボリューム デバイス オブジェクトによって表されるボリュームの不透明なボリューム ポインターを取得するには、FltGetVolumeFromDeviceObject呼び出します。

ボリューム デバイス オブジェクトの詳細については、「ファイル システム スタックの」を参照してください。

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー fltkernel.h (Fltkernel.h を含む)
ライブラリ Fltmgr.lib
DLL Fltmgr.sys
IRQL <= DISPATCH_LEVEL

関連項目

FltGetDeviceObject

FltGetVolumeFromDeviceObject

ObDereferenceObject

ObReferenceObject