Compartir a través de


Modelo de objetos de VDS

[A partir de Windows 8 y Windows Server 2012, la interfaz COM servicio de discos virtuales se sustituye por la API de administración de almacenamiento de Windows .]

VDS proporciona acceso indirecto a dispositivos de almacenamiento basados en host, como discos y dispositivos CD-ROM, y a matrices de discos administradas por controladores RAID de hardware. Aunque algunas entidades de almacenamiento modelar dispositivos físicos, otras construcciones virtuales del modelo: volúmenes, particiones, etc. Los objetos que se describen en este tema representan las entidades físicas y virtuales de VDS.

Las aplicaciones llaman a los métodos expuestos por estos objetos y VDS llaman al proveedor adecuado para realizar las operaciones de almacenamiento solicitadas. Una aplicación nunca llama directamente a un programa de proveedor.

Clasificación de objetos

Como se muestra en la ilustración siguiente, los programas de proveedor de software implementan objetos que modelen entidades basadas en host; los programas de proveedores de hardware implementan objetos que modelan dispositivos RAID de hardware interno y externo; los objetos comunes restantes son independientes del proveedor o se implementan mediante VDS. Un husillo, que no es un objeto VDS, es un término para los medios de almacenamiento genéricos que constan de extensiones de disco o unidad.

Diagrama que muestra una clasificación de objetos, definidos como

Para obtener más información sobre el comportamiento de cada objeto, seleccione entre los temas siguientes:

Creación de objetos

Las operaciones de configuración y consulta asociadas a la creación de objetos pueden tardar mucho tiempo en completarse; como tal, VDS invoca todos los métodos de forma asincrónica. El proveedor de detección devuelve todos los eventos de finalización, error o cambio de estado. Los proveedores de software también registran todos los errores y cambios de estado significativos.

Eliminación de objetos

Varios métodos VDS eliminan o transforman objetos VDS. Un autor de llamada puede contener una referencia, mediante un puntero de interfaz, a un objeto eliminado después de que el método devuelva. Cuando el autor de la llamada libera la interfaz, VDS elimina el objeto .

Con respecto a la eliminación de objetos, los autores de llamadas deben abstenerse de invocar cualquier cosa excepto el método IUnknown::Release en estas interfaces. El proveedor debe ser lo suficientemente sólido como para tratar con los autores de llamadas errantes; si un autor de llamada invoca un método en un objeto eliminado, el proveedor debe devolver VDS_E_OBJECT_DELETED.

Inicialización del servicio

VDS proporciona un identificador de clase (Clsid) para el cargador de servicio y los objetos de servicio, pero solo el clsid del cargador de servicios es público. La inicialización del servicio se produce cuando los proveedores, una aplicación que realiza una llamada y el servicio realizan las tareas siguientes:

  • Cada nuevo proveedor invoca el método IVdsAdmin::RegisterProvider durante la instalación para registrarse con VDS. La llamada crea una clave del Registro bajo el subárbol SYSTEM, identificado por el GUID de objeto del proveedor. Contenido en esta clave es clsid del objeto de proveedor, el nombre, la versión y el GUID de versión del proveedor.

    Nota

    Los GUID de objeto de proveedor son persistentes; los GUID de objeto de software y hardware no son.

     

  • Una aplicación llama a la función CoCreateInstance, pasando el clsid del cargador de servicios como argumento. Con un puntero al objeto del cargador de servicios, la aplicación puede iniciar VDS local o remotamente pasando el nombre de equipo deseado como parámetro al método IVdsServiceLoader::LoadService.

  • Cuando la aplicación inicial se adjunta al servicio, VDS llama primero a coCreateInstance en cada Clsid que se encuentra en la clave del Registro y, a continuación, llama al método IVdsProviderPrivate::OnLoad en cada proveedor para inicializar los programas.

acerca de los de VDS

IVdsAdmin::RegisterProvider

IVdsServiceLoader::LoadService

IVdsProviderPrivate::OnLoad