示例#1
0
            void IEnumSTATPROPSETSTG.Clone(out IEnumSTATPROPSETSTG ppenum)
            {
                UnsafeNativeCompoundFileMethods.UnsafeNativeIEnumSTATPROPSETSTG enumSTATPROPSETSTG;

                _unsafeEnumSTATPROPSETSTG.Clone(out enumSTATPROPSETSTG);

                if (enumSTATPROPSETSTG != null)
                {
                    ppenum = new SafeIEnumSTATPROPSETSTGImplementation(enumSTATPROPSETSTG);
                }
                else
                {
                    ppenum = null;
                }
            }
示例#2
0
            // Methods
            internal StatPropSetStgCollection(IPropertySetStorage propertySetStorage)
            {
                StatPropSetStg      Stat;
                int                 fetched;
                IEnumSTATPROPSETSTG oEnum = propertySetStorage.Enum();

Label_0024:
                fetched = 0;
                if (oEnum.Next(1, out Stat, out fetched) == 0)
                {
                    base.InnerList.Add(Stat);
                    goto Label_0024;
                }
                Marshal.ReleaseComObject(oEnum);
            }
示例#3
0
            void IEnumSTATPROPSETSTG.Clone(out IEnumSTATPROPSETSTG ppenum)
            {
                SecurityHelper.DemandCompoundFileIOPermission();

                UnsafeNativeCompoundFileMethods.UnsafeNativeIEnumSTATPROPSETSTG enumSTATPROPSETSTG;

                _unsafeEnumSTATPROPSETSTG.Clone(out enumSTATPROPSETSTG);

                if (enumSTATPROPSETSTG != null)
                {
                    ppenum = new SafeIEnumSTATPROPSETSTGImplementation(enumSTATPROPSETSTG);
                }
                else
                {
                    ppenum = null;
                }
            }
示例#4
0
            void IPropertySetStorage.Enum(
                out IEnumSTATPROPSETSTG ppenum
                )
            {
                UnsafeNativeCompoundFileMethods.UnsafeNativeIEnumSTATPROPSETSTG enumSTATPROPSETSTG;

                _unsafePropertySetStorage.Enum(
                    out enumSTATPROPSETSTG
                    );

                if (enumSTATPROPSETSTG != null)
                {
                    ppenum = new SafeIEnumSTATPROPSETSTGImplementation(enumSTATPROPSETSTG);
                }
                else
                {
                    ppenum = null;
                }
            }
示例#5
0
        private void LoadPropertySets()
        {
            HRESULT             hr         = (int)HRESULT.E_FAIL;
            IEnumSTATPROPSETSTG enumerator = null;

            STATPROPSETSTG[] stat    = new STATPROPSETSTG[1];
            uint             fetched = 0;
            List <Guid>      fmtids  = new List <Guid>();

            // Build list of FMTID's.
            try
            {
                if (NativeMethods.Succeeded(hr = _propertySetStorage.Enum(out enumerator)))
                {
                    while (NativeMethods.Succeeded(hr = (enumerator.Next(1, stat, out fetched))) && (fetched == 1))
                    {
                        fmtids.Add(stat[0].fmtid);
                    }

                    // IPropertySetStorage.Enum() does not enumerate FMTID_UserDefinedProperties.
                    // Note that FMTID_UserDefinedProperties may not exist.
                    fmtids.Add(FormatId.UserDefinedProperties);
                }

                foreach (Guid fmtid in fmtids)
                {
                    Guid rfmtid  = fmtid;
                    uint grfMode = (uint)(STGM.READ | STGM.SHARE_EXCLUSIVE);
                    //uint grfMode = (uint)(STGM.DIRECT | STGM.READ | STGM.SHARE_DENY_WRITE);
                    IPropertyStorage propertyStorage = null;

                    try
                    {
                        if (NativeMethods.Succeeded(hr = _propertySetStorage.Open(ref rfmtid, grfMode, out propertyStorage)))
                        {
                            _propertySets.Add(PropertySet.FromIPropertyStorage(propertyStorage));
                        }
                    }
                    catch
                    {
#if DEBUG
                        System.Diagnostics.Debugger.Break();
#endif
                    }
                    finally
                    {
                        if (propertyStorage != null)
                        {
                            propertyStorage.FinalRelease();
                        }
                    }
                }
            }
            catch
            {
            }
            finally
            {
                if (enumerator != null)
                {
                    enumerator.FinalRelease();
                }
            }
        }
示例#6
0
            void IEnumSTATPROPSETSTG.Clone(out IEnumSTATPROPSETSTG ppenum)
            {
                SecurityHelper.DemandCompoundFileIOPermission();

                UnsafeNativeCompoundFileMethods.UnsafeNativeIEnumSTATPROPSETSTG enumSTATPROPSETSTG;

                _unsafeEnumSTATPROPSETSTG.Clone(out enumSTATPROPSETSTG);

                if (enumSTATPROPSETSTG != null)
                    ppenum = new SafeIEnumSTATPROPSETSTGImplementation(enumSTATPROPSETSTG);
                else
                    ppenum = null;
            }
 int IPropertySetStorage.Enum(out IEnumSTATPROPSETSTG ppEnum)
 {
     return(((IPropertySetStorage)_storage).Enum(out ppEnum));
 }
示例#8
0
 internal static void FinalRelease(this IEnumSTATPROPSETSTG enumerator)
 {
     Marshal.FinalReleaseComObject(enumerator);
 }