HResult VirtualizationInstance::MarkDirectoryAsPlaceholder()

in ProjectedFSLib.Managed.API/VirtualizationInstance.cpp [1112:1164]


HResult VirtualizationInstance::MarkDirectoryAsPlaceholder(
    String^ targetDirectoryPath,
    array<Byte>^ contentId,
    array<Byte>^ providerId)
{
    GUID virtualizationInstanceId;
    HRESULT hr = S_OK;

    if (m_apiHelper->UseBetaApi)
    {
        hr = m_apiHelper->_PrjGetVirtualizationInstanceIdFromHandle(reinterpret_cast<PRJ_VIRTUALIZATIONINSTANCE_HANDLE>(m_virtualizationContext),
                                                                    &virtualizationInstanceId);

        if (hr == S_OK)
        {
            PRJ_PLACEHOLDER_VERSION_INFO versionInfo;
            memset(&versionInfo, 0, sizeof(PRJ_PLACEHOLDER_VERSION_INFO));
            CopyPlaceholderId(versionInfo.ProviderID, providerId);
            CopyPlaceholderId(versionInfo.ContentID, contentId);

            pin_ptr<const WCHAR> rootPath = PtrToStringChars(m_virtualizationRootPath);
            pin_ptr<const WCHAR> targetPath = PtrToStringChars(targetDirectoryPath);
            hr = m_apiHelper->_PrjConvertDirectoryToPlaceholder(rootPath,
                                                                targetPath,
                                                                &versionInfo,
                                                                0,
                                                                &virtualizationInstanceId);
        }
    }
    else
    {
        PRJ_VIRTUALIZATION_INSTANCE_INFO instanceInfo;
        hr = m_apiHelper->_PrjGetVirtualizationInstanceInfo(m_virtualizationContext,
                                                            &instanceInfo);

        if (SUCCEEDED(hr))
        {
            PRJ_PLACEHOLDER_VERSION_INFO versionInfo;
            memset(&versionInfo, 0, sizeof(PRJ_PLACEHOLDER_VERSION_INFO));
            CopyPlaceholderId(versionInfo.ProviderID, providerId);
            CopyPlaceholderId(versionInfo.ContentID, contentId);

            pin_ptr<const WCHAR> rootPath = PtrToStringChars(m_virtualizationRootPath);
            pin_ptr<const WCHAR> targetPath = PtrToStringChars(targetDirectoryPath);
            hr = m_apiHelper->_PrjMarkDirectoryAsPlaceholder(rootPath,
                                                             targetPath,
                                                             &versionInfo,
                                                             &instanceInfo.InstanceID);
        }
    }

    return static_cast<HResult>(hr);
}