3.4.1.2 Storage Management Objects

The server maintains a list of the following VDS objects:

  • HBA Port

    • The server maintains an object for each HBA port on the system.

    •  Each HBA port object exposes DCOM interfaces for querying information from an HBA port on the system.

    • Each HBA port object implements the IVdsHbaPort interface.

  • Initiator Adapter

    • The server maintains an object for each initiator adapter on the system.

    •  Each initiator adapter object exposes DCOM interfaces for querying information from an iSCSI initiator adapter on the system.

    • Each initiator adapter object implements the IVdsIscsiInitiatorAdapter interface.

  • Initiator Portal

    • The server maintains an object for each initiator portal on the system.

    •  Each initiator portal object exposes DCOM interfaces for querying information from an iSCSI initiator portal on the system.

    •  Each initiator portal object implements the IVdsIscsiInitiatorPortal interface.

    • Each initiator portal object maintains a pointer to the initiator adapter object to which it belongs.

  • Software Provider

  • Hardware Provider

    • The server maintains an object for each hardware provider on the system.

    • Each hardware provider object exposes DCOM interfaces for managing subsystems.

    • Each hardware provider object implements the IVdsProvider and IVdsHwProvider interfaces.

  • Virtual Disk Provider

    • The server maintains an object for each hardware provider on the system.

    • Each virtual disk provider object exposes DCOM interfaces for managing virtual disks.

    • Each hardware provider object implements the IVdsProvider and IVdsVdProvider interfaces.

  • Subsystem

    • The server maintains an object for each subsystem on the system.

    • Each subsystem object exposes DCOM interfaces for managing the subsystem.

    • Each subsystem object implements the IVdsSubSystemImportTarget interface.

  • Pack

    • The server maintains an object for each pack on the system.

    • Each pack object exposes DCOM interfaces for managing a logical group of disks and the volumes that they contain.

      • Each pack object implements the IVdsPack interface.

      •  Each pack object implements the IVdsPack2 interface.

    • Each pack object maintains a pointer to the software provider object to which it belongs.

  • Disk

    • The server maintains an object for each disk on the system.

    • Each disk object exposes DCOM interfaces for managing a disk, which can include physical hard disks, removable disk units, optical drive units, and the LUNs that are unmasked to the system.

    • Each disk object--if the disk is basic or dynamic--maintains a pointer to the pack object to which it belongs.

  • Volume

    • The server maintains an object for each volume on the system.

    •  Each volume object exposes DCOM interfaces for managing a volume, which is a logical unit of storage that exists over regions of one or more disks that belong to the same pack.

    • Each volume object maintains a pointer to the pack object to which it belongs.

    • Removable media drives contain one volume, and the volume is associated with the drive. If there is no media in the drive, the status of the volume is set to VDS_VS_NO_MEDIA and ullsize is set to zero.<67>

  • Volume Plex

    • The server maintains an object for each volume plex on the system.

    •  Each volume plex object exposes DCOM interfaces for managing a volume plex, which represents a complete copy of the data that is stored on a mirrored volume.

      • Each volume plex object implements the IVdsVolumePlex interface.

      • The volume object on a removable media drive contains one volume plex, and the volume plex is associated with the drive. If there is no media in the drive, the status of the volume plex is set to VDS_VPS_NO_MEDIA and ullsize is set to zero.

    • Each volume plex object maintains a pointer to the volume object to which it belongs.

  • Virtual Disk

    • The server maintains an object for each attached virtual disk on the system.

    • The server maintains an object for each virtual disk that has been created using IVdsVdProvider::CreateVDisk after the server starts, or has been added to the server's cache using IVdsVdProvider::AddVDisk.

    • Each virtual disk object exposes DCOM interfaces for managing a virtual disk.

      • Each virtual disk object implements the IVdsVDisk interface.

      • When a virtual disk is opened, it MUST create an object to represent the open virtual disk (an OpenVirtualDisk object), which MUST implement the IVdsOpenVDisk interface.

    • Each attached virtual disk object maintains an association with an actual disk (basic, dynamic, or unallocated disk) that has been exposed to the system as a result of attaching the virtual disk.

Each VDS object maintains the following information:

VDS Object Identifier: A unique identifier of type VDS_OBJECT_ID.

  • The server generates these identifiers at run time.

  • The server MUST NOT assign two objects to the same identifier.

  • The server MUST NOT change the identifier for the entire duration of a VDS session or until the object is removed from the list. A VDS session is defined to be from the point at which a client receives a pointer to the service object, to the point at which the client releases all references to it.

  • The server facilitates ID-based object retrieval.

Object Type: A value of type VDS_OBJECT_TYPE, which indicates the type of device that the object represents.

  • When a VDS object is created, the server assigns its corresponding object type:

    • HBA port: VDS_OT_HBAPORT

    • Initiator adapter: VDS_OT_INIT_ADAPTER

    • Initiator portal: VDS_OT_INIT_PORTAL

    • Provider: VDS_OT_PROVIDER

    • Pack: VDS_OT_PACK

    • Disk: VDS_OT_DISK

    • Volume: VDS_OT_VOLUME

    • Volume plex: VDS_OT_VOLUME_PLEX

    • Virtual disk: VDS_OT_VDISK

    • Virtual disk that has been opened: VDS_OT_OPEN_VDISK

The objects can be used by more than one VDS session at a time. Objects can be added or removed as a result of client requests or events that the operating system triggers, such as when a disk is no longer being reported by its bus, or when the disk's bus reports a new disk.

If objects are removed while a client still has references to them, the server MUST return a value of VDS_E_OBJECT_DELETED (HRESULT of 0x8004240bL) whenever the client attempts to access the object interface methods.