VDS 对象模型

[从Windows 8和Windows Server 2012开始,虚拟磁盘服务 COM 接口由 Windows 存储管理 API 取代。]

VDS 提供对基于主机的存储设备(例如磁盘和 CD-ROM 设备)以及由硬件 RAID 控制器管理的磁盘阵列的间接访问。 一些存储实体对物理设备进行建模,而另一些则建模虚拟构造:卷、分区等。 本主题中介绍的对象表示 VDS 的物理实体和虚拟实体。

应用程序调用这些对象公开的方法,VDS 调用相应的提供程序来执行请求的存储操作。 应用程序从不直接调用提供程序程序。

对象的分类

如下图所示,软件提供程序程序实现基于主机的实体建模的对象:硬件提供程序程序实现为内部和外部硬件 RAID 设备建模的对象;其余公共对象要么与提供程序无关,要么由 VDS 实现。 主轴不是 VDS 对象,是包含磁盘或驱动器盘区的泛型存储介质的术语。

显示对象的分类关系图,这些对象定义为“公共对象”、“软件提供程序对象”和“硬件提供程序对象”。

若要详细了解每个对象的行为,请从以下主题中进行选择:

对象创建

与对象创建关联的配置和查询操作可能需要相当长的时间才能完成:因此,VDS 以异步方式调用所有方法。 发现提供程序返回所有完成、错误或状态更改事件。 软件提供程序还会记录所有错误和重大状态更改。

对象删除

多个 VDS 方法可删除或转换 VDS 对象。 方法返回后,调用方可以通过接口指针保存对已删除对象的引用。 当调用方释放接口时,VDS 会删除 对象。

关于删除对象,调用方应避免在这些接口上调用 除 IUnknown::Release 方法以外的任何内容。 提供程序必须足够可靠,才能处理错误调用方;如果调用方对已删除的对象调用方法,则提供程序应返回 VDS_E_OBJECT_DELETED

服务初始化

VDS 为服务加载程序和服务对象提供类标识符 (Clsid) ,但只有服务加载程序 Clsid 是公共的。 当提供程序、调用应用程序和服务执行以下任务时,将发生服务初始化:

  • 每个新提供程序在安装期间调用 IVdsAdmin::RegisterProvider 方法以向 VDS 注册。 调用在系统配置单元下创建一个注册表项,由提供程序的对象 GUID 标识。 此键下包含提供程序对象的 Clsid、提供程序的名称、版本和版本 GUID。

    注意

    提供程序对象 GUID 是永久性的;软件和硬件对象 GUID 不是。

     

  • 应用程序调用 CoCreateInstance 函数,并将服务加载程序 Clsid 作为参数传递。 使用指向服务加载程序对象的指针,应用程序可以通过将所需计算机名称作为参数传递给 IVdsServiceLoader::LoadService 方法,在本地或远程启动 VDS。

  • 当初始应用程序附加到服务时,VDS 首先在注册表项下找到的每个 Clsid 上调用 CoCreateInstance ,然后调用每个提供程序上的 IVdsProviderPrivate::OnLoad 方法来初始化程序。

关于 VDS

IVdsAdmin::RegisterProvider

IVdsServiceLoader::LoadService

IVdsProviderPrivate::OnLoad