IMSAdminBase::CopyData

The IMSAdminBase::CopyData method copies or moves data associated with the source key to the destination key. You can also specify whether the method copies the key's inherited data.

HRESULT CopyData(
  METADATA_HANDLE hMDSourceHandle,  //source metabase handle
  LPCWSTR pszMDSourcePath,          //path to the source key, 
                                    // relative to hMDSourceHandle
  METADATA_HANDLE hMDDestHandle,    //destination metabase handle
  LPCWSTR pszMDDestPath,            //path to the source key, 
                                    // relative to hMDDestHandle
  DWORD dwMDAttributes,             //attributes of the data
  DWORD dwMDUserType,               //user type of the data
  DWORD dwMDDataType,               //data type of the data
  BOOL bMDCopyFlag                  //flag that specifies whether to 
                                    // copy or move the data
);
 

Parameters

hMDSourceHandle
Specifies METADATA_MASTER_ROOT_HANDLE, or a handle with read permission returned by the IMSAdminBase::OpenKey method.
pszMDSourcePath
Points to a string that contains the path of the key with which the source data is associated, relative to the path of hMDSourceHandle. For example, if the handle references the /LM key, you could specify the Web services subkey using the path /W3SVC.
hMDDestHandle
Specifies a handle, returned by IMSAdminBase::OpenKey, that has write permission. METADATA_MASTER_ROOT_HANDLE is not a valid value for this parameter.
pszMDDestPath
Points to the path of the key for data to be copied to, relative to the path of hMDDestHandle.
dwMDAttributes
The flags, contained in the METADATA_RECORD structure, used to get the data.
dwMDUserType
A DWORD that specifies the user type of the data. If not set to ALL_METADATA, only metadata of the specified user type will be copied or moved. The following user types are defined for IIS:
User type Description
ALL_METADATA Copy or move all data, regardless of user type.
ASP_MD_UT_APP The entry contains information specific to ASP application configuration.
IIS_MD_UT_FILE Copy or move only data specific to a file, such as access permissions or log on methods.
IIS_MD_UT_SERVER Copy or move only data specific to the server, such as ports in use and IP addresses.
IIS_MD_UT_WAM The entry contains information specific to Web application management.

dwMDDataType
A DWORD that specifies the type of data to retrieve. If dwMDDataType is not set to ALL_METADATA, only metadata of the specified type will be copied or moved. This parameter can be one of the following values:
Data type Description
ALL_METADATA Copy or move all data, regardless of type.
BINARY_METADATA Binary data in any form.
DWORD_METADATA An unsigned 32-bit number.
EXPANDSZ_METADATA A null-terminated string that contains unexpanded environment variables, such as %PATH%.
MULTISZ_METADATA An array of null-terminated strings, terminated by two null characters.
STRING_METADATA A null-terminated ASCII string.

bMDCopyFlag
A Boolean that specifies whether to copy or move the data. If this parameter is set to TRUE, the data is copied. If it is FALSE, the data is moved. If dwMDAttributes contains the flag METADATA_INHERIT, this parameter must be set to TRUE.

Return Values

Returns an HRESULT that contains one of the following values:

ERROR_ACCESS_DENIED Access is denied. Either the open handle does not have read or write permission as needed, or the user does not have sufficient permissions to perform the operation.
ERROR_INVALID_PARAMETER The parameter is incorrect.
ERROR_NOT_ENOUGH_MEMORY There is not enough memory to complete the operation.
ERROR_PATH_NOT_FOUND The specified path is not found.
ERROR_SUCCESS The method succeeded.

Remarks

If inherited data is copied, (if dwMDAttributes specifys the METADATA_INHERIT flag) it is copied to the destination key, not to the corresponding ancestor keys.

The handle, METADATA_MASTER_ROOT_HANDLE, provides no guarantee against multiple thread access. If your application requires a constant data state, use a handle returned by IMSAdminBase::OpenKey.