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
The server maintains an object for each provider on the system.
The basic provider is for managing basic disks.
The dynamic provider is for managing dynamic disks.
Each software provider object exposes DCOM interfaces for managing storage objects (packs, volumes, plexes, and disks) on the system.
Each software provider object implements the IVdsProvider and IVdsSwProvider interfaces.
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 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 implements the IVdsDisk and IVdsAdvancedDisk interfaces.
If the disk is removable, the disk object implements the IVdsRemovable interface; otherwise, the IVdsRemovable interface is not implemented.
If the disk is a removable drive with no media, the disk object sets its status to VDS_DS_NO_MEDIA and the values for ulBytesPerSector, ulSectorsPerTrack, ulTracksPerCylinder, and ullSize to zero.
Each disk object implements the IVdsDisk2, IVdsDisk3, IVdsAdvancedDisk2, IVdsAdvancedDisk3, IVdsCreatePartitionEx, IVdsDiskPartitionMF, IVdsDiskPartitionMF2, and IvdsDiskOnline interfaces.
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 implements the IVdsVolume, IVdsVolume2, IVdsVolumeMF, IVdsVolumeMF2, IVdsVolumeMF3, IVdsVolumeShrink, and IVdsVolumeOnline interfaces.
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>
-
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.