次の方法で共有


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 を呼び出します。

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

要件

要件
対象プラットフォーム ユニバーサル
Header fltkernel.h (Fltkernel.h を含む)
Library Fltmgr.lib
[DLL] Fltmgr.sys
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

FltGetDeviceObject

FltGetVolumeFromDeviceObject

ObDereferenceObject

ObReferenceObject