VDS 对象模型
[从 Windows 8 和 Windows Server 2012 开始,虚拟磁盘服务 COM 接口被 Windows 存储管理 API取代。
VDS 提供对基于主机的存储设备(例如磁盘和 CD-ROM 设备)的间接访问,以及硬件 RAID 控制器管理的磁盘阵列。 虽然某些存储实体为物理设备建模,但其他存储实体则建模虚拟构造:卷、分区等。 本主题中所述的对象表示 VDS 的物理实体和虚拟实体。
应用程序调用这些对象公开的方法,VDS 调用相应的提供程序来执行请求的存储作。 应用程序从不直接调用提供程序程序。
对象的分类
如下图所示,软件提供程序程序实现对基于主机的实体进行建模的对象;硬件提供程序程序实现为内部和外部硬件 RAID 设备建模的对象;其余的常见对象要么与提供程序无关,要么由 VDS 实现。 轴(不是 VDS 对象)是通用存储介质的术语,由磁盘或驱动器盘区组成。
若要详细了解每个对象的行为,请从以下主题中进行选择:
- 服务加载程序和服务对象,请参阅 启动和服务对象。
- 枚举和异步对象,请参阅 帮助程序对象。
- 提供程序对象,请参阅 提供程序对象。
- 包、磁盘、卷和卷 plex 对象,请参阅 软件提供程序对象。
- 子系统、控制器、驱动器、LUN 和 LUN plex 对象,请参阅 硬件提供程序对象。
对象创建
与对象创建关联的配置和查询作可能需要相当长的时间才能完成;因此,VDS 以异步方式调用所有方法。 发现提供程序返回所有完成、错误或状态更改事件。 软件提供程序还会记录所有错误和重大状态更改。
对象删除
多个 VDS 方法删除或转换 VDS 对象。 调用方可以通过接口指针保存对方法返回后已删除对象的引用。 当调用方释放接口时,VDS 将删除该对象。
对于对象删除,调用方不应在这些接口上调用除 IUnknown::Release 方法之外的任何内容。 提供程序必须足够可靠才能处理不法调用方;如果调用方对已删除的对象调用方法,则提供程序应返回 VDS_E_OBJECT_DELETED。
服务初始化
VDS 为服务加载程序和服务对象提供类标识符(Clsid),但只有服务加载程序 Clsid 是公共的。 当提供程序、调用应用程序和服务执行以下任务时,将发生服务初始化:
每个新提供程序在安装过程中调用 IVdsAdmin::RegisterProvider 方法,以向 VDS 注册。 该调用在 SYSTEM 配置单元下创建一个注册表项,由提供程序的对象 GUID 标识。 此密钥下包含提供程序对象的 Clsid、名称、版本和提供程序的版本 GUID。
注意
提供程序对象 GUID 是永久性的;软件和硬件对象 GUID 不是。
应用程序调用 CoCreateInstance 函数,并将服务加载程序 Clsid 作为参数传递。 通过指向服务加载程序对象的指针,应用程序可以通过将所需的计算机名称作为参数传递给 IVdsServiceLoader::LoadService 方法,在本地或远程启动 VDS。
当初始应用程序附加到服务时,VDS 首先在注册表项下找到的每个 Clsid 上调用 CoCreateInstance,然后在每个提供程序上调用 IVdsProviderPrivate::OnLoad 方法来初始化程序。
相关主题