# IPropertyStorage::DeleteMultiple

Deletes as many of the indicated properties as exist in this property set.

HRESULT DeleteMultiple(

ULONG cpspec, | //Count of properties to be deleted
PROPSPEC const rgpspec[] | //Array of properties to be deleted
); |

Parameters

cpspec
  [in] Count of properties being deleted. May legally be zero, though this is a no-op, deleting no properties.
rgpspec[]
  [in] Properties to be deleted. A mixture of property identifiers and string-named properties is permitted. There may be duplicates, and there is no requirement that properties be specified in any order.

Return Values

This method supports the standard return value E_UNEXPECTED, as well as the following:

S_OK
  All of the specified properties that exist in the property set have been deleted.
STG_E_ACCESSDENIED
  The requested access to the property storage object has been denied. No properties were deleted.
STG_E_INSUFFICIENTMEMORY
  There is not sufficient memory to perform this operation. Some properties may not have been deleted.
STG_E_INVALIDPARAMETER
  At least one of the parameters is invalid, as when one of the PROPSPECs contains an illegal ulKind value. Some properties may not have been deleted.
STG_E_INVALIDPOINTER
  May be returned when at least one of the pointers passed in is invalid. Some properties may not have been written. More frequently, an invalid pointer will instead result in an access violation.

Remarks

IPropertyStorage::DeleteMultiple must delete as many of the indicated properties as are in the current property set. If a deletion of a stream- or storage-valued property occurs while that property is open, the deletion will succeed and place the previously returned IStream or IStorage pointer in the reverted state.