IMAPIProp::GetProps

The IMAPIProp::GetProps method retrieves the property value of one or more properties of an object.

Quick Info

See IMAPIProp : IUnknownHP08HX.

HRESULT GetProps(

    LPSPropTagArray lpPropTagArray,

 

    ULONG ulFlags,

 

    ULONG FAR * lpcValues,

 

    LPSPropValue FAR * lppPropArray

 

   )

 

 

Parameters

lpPropTagArray

[in] Pointer to an array of property tags identifying the properties whose values are to be retrieved. The lpPropTagArray parameter must either be NULL, indicating that values for all properties of the object should be returned, or point to an SPropTagArray.LHV0L structure containing one or more property tags.

ulFlags

[in] Bitmask of flags that indicates the format for properties that have the type PT_UNSPECIFIED. The following flag can be set:

MAPI_UNICODE

The string values for these properties should be returned in the Unicode format. If the MAPI_UNICODE flag is not set, the string values should be returned in the ANSI format.

lpcValues

[out] Pointer to a count of property values pointed to by the lppPropArray parameter. If lppPropArray is NULL, the contents of the lpcValues parameter is zero.

lppPropArray

[out] Pointer to a pointer to the retrieved property values.

 

Return Values

S_OK

The property values were successfully retrieved.

MAPI_W_ERRORS_RETURNED

The call succeeded overall, but one or more properties could not be accessed. The ulPropTag member of the property value for each unaccessible property has a property type of PT_ERROR and an identifier of zero. When this warning is returned, the call should be handled as successful. To test for this warning, use the HR_FAILED macro. See Using Macros for Error Handling3AFTHZP.

MAPI_E_INVALID_PARAMETER

Zero was passed in the cValues member of the SPropTagArray.LHV0L structure pointed to by lpPropTagArray.

 

Remarks

The IMAPIProp::GetProps method gets the property values of one or more properties of an object.

The property values are returned in the same order as they were requested. That is, the order of properties in the property tag array pointed to by lpPropTagArray matches the order in the array of property value structures pointed to by lppPropArray.

The property types specified in the aulPropTag members of the property tag array indicate the type of value that should be returned in the Value member of each property value structure. However, if the caller does not know the type of a property, the type in the aulPropTag member can be set instead to PT_UNSPECIFIED. In retrieving the value, GetProps sets the correct type in the ulPropTag member of the property value structure for the property.

If property types are specified in the SPropTagArray in lpPropTagArray, then the property values in the SPropValue returned in lppPropArray have types that exactly match the requested types, unless an error value is returned instead.

String properties can have one of two property types: PT_UNICODE to represent the Unicode format and PT_STRING8 to represent the ANSI format. If the MAPI_UNICODE flag is set in the ulFlags parameter, whenever GetProps cannot determine the appropriate format for a string property, it returns its value in the Unicode format. GetProps cannot determine an exact string property type:

    If the lpPropTagArray parameter is set to NULL to request all properties.

    When the aulPropTag member includes the value PT_UNSPECIFIED as its property type in the property tag array.

 

If the lpPropTagArray parameter is set to NULL to retrieve all of the properties of the object and no properties exist, GetProps:

    Returns S_OK.

    Sets the count value in the cValues member of the property value structure to zero.

    Sets the contents of lpcValues to zero.

    Sets lppPropArray to NULL.

    Must not return multivalued properties with cValues set to zero.

 

Notes to Implementers

Call the MAPIAllocateBuffer1MW3BAZ function to allocate memory initially for the SPropValue structure pointed to by lpPropTagArray; call MAPIAllocateMoreB1SGX_ to allocate any additional memory needed for the structure s members.

Return MAPI_W_ERRORS_RETURNED if you cannot retrieve the value for one or more of the requested properties. In the property value structure, set the type in the ulPropTag member to PT_ERROR and the Value member to a status code describing the error. For example, if you need to convert a string to Unicode and do not support Unicode, set the Value member to MAPI_E_BAD_CHARWIDTH. If the property is too large, set it to MAPI_E_NOT_ENOUGH_MEMORY. If the object does not support the property, set it to MAPI_E_NOT_FOUND.

Notes to Callers

For properties of type PT_OBJECT, call the IMAPIProp::OpenPropertyLFSSYS method instead of GetProps.

For secure properties, do not expect to retrieve them by calling GetProps with the lppPropTagArray parameter set to NULL. You must explicitly set a secure property s identifier in the aulPropTag member of its property tag array when calling GetProps. When and how a secure property is available is up to the service provider.

Free the returned SPropValue structure by calling the MAPIFreeBuffer16U06F function only if GetProps returns S_OK or MAPI_W_ERRORS_RETURNED.

If GetProps returns MAPI_W_ERRORS_RETURNED because it could not access one or more properties, check the property tags of the returned properties. The failed properties will have the following values set in their property value structure:

    Property type in the ulPropTag member set to PT_ERROR.

    Property value in the Value member set to a status code for the error, such as MAPI_E_NOT_FOUND.

 

Properties that fail because they are too large to conveniently be returned in the property value structure have their Value member set to MAPI_E_NOT_ENOUGH_MEMORY. Typically this occurs with string or binary properties of type PT_STRING8, PT_UNICODE, or PT_BINARY when the value of the property is 4K or larger. Call IMAPIProp::OpenPropertyLFSSYS to retrieve large properties.

Not all implementations of GetProps support both the Unicode and ANSI formats for character strings. When a particular property requires string format conversion and GetProps cannot support it, the Value member for the property is set to MAPI_E_BAD_CHARWIDTH.

For more information about using GetProps to access properties, see Retrieving Properties1XC55Q7.

See Also

IMAPIProp::OpenProperty, MAPIAllocateBuffer, MAPIAllocateMore, MAPIFreeBuffer, SPropTagArray, SPropValue