// Methods internal StatPropStgCollection(IPropertyStorage propertyStorage) { StatPropStg Stat; IEnumSTATPROPSTG oEnum = propertyStorage.Enum(); Label_0024: var fetched = 0; if (oEnum.Next(1, out Stat, out fetched) == 0) { base.InnerList.Add(Stat); goto Label_0024; } Marshal.ReleaseComObject(oEnum); oEnum = null; }
internal static IEnumerable <STATPROPSTG> AsEnumerable(this IPropertyStorage propertyStorage) { Assert.IsNotNull(propertyStorage); IEnumSTATPROPSTG enumStatPropStg; propertyStorage.Enum(out enumStatPropStg); while (true) { var statPropStgArray = new STATPROPSTG[1]; uint fetched; enumStatPropStg.Next(1, statPropStgArray, out fetched); if (fetched == 0) { break; } yield return(statPropStgArray[0]); } }
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); }