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 。 否则,返回的设备对象的字段可能无效。 这在回调例程(如 InstanceTeardownStartCallbackInstanceTeardownCompleteCallback)中是这种情况。

若要获取指向筛选器管理器的卷设备对象的指针 (给定卷的 VDO) ,请调用 FltGetDeviceObject

若要获取由卷设备对象表示的卷的不透明卷指针,请调用 FltGetVolumeFromDeviceObject

有关卷设备对象的详细信息,请参阅 文件系统堆栈

要求

要求
目标平台 通用
标头 fltkernel.h (包括 Fltkernel.h)
Library Fltmgr.lib
DLL Fltmgr.sys
IRQL <= DISPATCH_LEVEL

另请参阅

FltGetDeviceObject

FltGetVolumeFromDeviceObject

ObDereferenceObject

ObReferenceObject