internal static int GetPropertyName(this IPropertyStorage propertyStorage, uint propid, out string name) { HRESULT hr = HRESULT.E_FAIL; name = String.Empty; uint[] rgpropid = { propid }; string[] rglpwstrName = { String.Empty }; if (NativeMethods.Succeeded(hr = propertyStorage.ReadPropertyNames(1, rgpropid, rglpwstrName))) { name = rglpwstrName[0]; } if (String.IsNullOrWhiteSpace(name)) { Guid fmtid = propertyStorage.GetFormatId(); if (fmtid.Equals(FormatId.SummaryInformation)) { name = propertyStorage.GetPropertyName((PIDSI)propid); hr = HRESULT.S_OK; } else if (fmtid.Equals(FormatId.DocSummaryInformation)) { name = propertyStorage.GetPropertyName((PIDDSI)propid); hr = HRESULT.S_OK; } } return(hr); }
internal static int GetPropertyName(this IPropertySetStorage propertySetStorage, Guid fmtid, uint propid, out string name) { HRESULT hr = (int)HRESULT.E_FAIL; name = String.Empty; IPropertyStorage propertyStorage = null; uint grfMode = (uint)(STGM.READ | STGM.SHARE_EXCLUSIVE); try { if (NativeMethods.Succeeded(hr = propertySetStorage.Open(ref fmtid, grfMode, out propertyStorage))) { hr = propertyStorage.GetPropertyName(propid, out name); } } catch { } finally { if (propertyStorage != null) { propertyStorage.FinalRelease(); } } return(hr); }
internal static PropertySet FromIPropertyStorage(IPropertyStorage propertyStorage) { if (propertyStorage == null) { throw new ArgumentNullException("propertyStorage"); } HRESULT hr = HRESULT.E_FAIL; PropertySet propertySet = null; STATPROPSETSTG stat; propertyStorage.Stat(out stat); IEnumSTATPROPSTG enumerator = null; List <Property> properties = new List <Property>(); try { if (NativeMethods.Succeeded(hr = propertyStorage.Enum(out enumerator))) { STATPROPSTG[] sps = new STATPROPSTG[] { default(STATPROPSTG) }; uint fetched = 0; while ((enumerator.Next(1, sps, out fetched) == HRESULT.S_OK) && (fetched == 1)) { string name; PROPVARIANT propvar = default(PROPVARIANT); try { propertyStorage.GetPropertyName(sps[0].propid, out name); sps[0].lpwstrName = name; propertyStorage.GetProperty(sps[0].propid, out propvar); properties.Add(new Property(sps[0], propvar.Value)); } catch { } finally { propvar.Clear(); } } } } catch { } finally { if (enumerator != null) { enumerator.FinalRelease(); } } Type type = System.Reflection.Assembly.GetExecutingAssembly().GetPropertySetType(stat.fmtid); if (type == null) { // In this case, we did not find a strongly typed property set. type = typeof(PropertySet); } propertySet = PropertySet.InvokeInternalConstructor(type, stat, properties.ToArray()); propertySet.Name = type.GetPropertySetName(); return(propertySet); }