The BreakPlex method removes a specified plex from the current volume. The interface pointer for the new volume object can be retrieved by calling IVdsAsync::Wait through the ppAsync parameter. The VDS_ASYNC_OUTPUT structure that is returned contains the volume object interface pointer in the bvp.pVolumeUnk member.
HRESULT BreakPlex( [in] VDS_OBJECT_ID plexId, [out] IVdsAsync** ppAsync );
plexId: The GUID of the plex to be broken.
ppAsync: A pointer to an IVdsAsync interface that, if the operation is successfully completed, receives the IVdsAsync interface to monitor and control this operation. Callers MUST release the interface when they are done with it. If the IVdsAsync::Wait method is called on the interface, the interfaces returned in the VDS_ASYNC_OUTPUT structure MUST be released as well. For information on asynchronous tasks, see section 3.4.5.1.9.
Return Values: The method MUST return zero or a non-error HRESULT (as specified in [MS-ERREF]) to indicate success, or return an implementation-specific nonzero error code to indicate failure. For the HRESULT values predefined by the Virtual Disk Service Remote Protocol, see section 2.2.3.
When the server receives this message, it MUST validate the following parameter:
Verify that ppAsync is not NULL.
The server MUST perform the following:
Create a new async object implementing the IVdsAsync interface with an output type of VDS_ASYNCOUT_BREAKVOLUMEPLEX and set the pointer that ppAsync references to the interface.
Return an HRESULT indicating failure or success. Any errors encountered up through this point in processing the operation are returned in this HRESULT.
If the volume resides on a basic disk, the server MUST return VDS_E_NOT_SUPPORTED (HRESULT of 0x80042400).
The server MUST then perform the following in sequence. Errors generated in this sequence of steps are returned in the pHrResult parameter to the IVdsAsync::Wait or IVdsAsyncQueryStatus methods.
Break the volume plex corresponding to the VDS_OBJECT_ID that PlexId specifies for this volume.
Create a new volume object that corresponds to the new volume, implements the IVdsVolume interface, and assigns it a unique VDS_OBJECT_ID.
Set the new volume object's pack pointer to the pack object that this volume's pack pointer references.
Add the new volume object to the list of storage management objects.
Set the volume plex's volume pointer to the new volume object. Set the task-specific return values in the async object to return the values that are associated with VDS_ASYNCOUT_BREAKVOLUMEPLEX (as specified in section 3.4.5.1.9).
Set the return code in the async object to an HRESULT indicating failure or success.
If the task completed successfully, set the percentage completed value in the async object to 100.
Set the signal state in the async object to TRUE.
The server MUST update the percentage completed value periodically during the preceding sequence. How often the percentage completed is updated, and at what point in the sequence, is implementation-specific.