Esempio n. 1
0
        // This is not a small operation so let's make it a method
        private KnownFolderDefinition GetDefinition()
        {
            InternalKnownFolderDefinition internalDefinition;
            KnownFolderDefinition         definition = new KnownFolderDefinition();

            _knownFolder.GetFolderDefinition(out internalDefinition);
            try
            {
                definition.Category        = internalDefinition.Category;
                definition.Name            = Marshal.PtrToStringUni(internalDefinition.pszName);
                definition.Description     = Marshal.PtrToStringUni(internalDefinition.pszDescription);
                definition.ParentID        = internalDefinition.ParentID;
                definition.ParsingName     = Marshal.PtrToStringUni(internalDefinition.pszParsingName);
                definition.Tooltip         = Marshal.PtrToStringUni(internalDefinition.pszTooltip);
                definition.LocalizedName   = Marshal.PtrToStringUni(internalDefinition.pszLocalizedName);
                definition.Icon            = Marshal.PtrToStringUni(internalDefinition.pszIcon);
                definition.Security        = Marshal.PtrToStringUni(internalDefinition.pszSecurity);
                definition.Attributes      = internalDefinition.dwAttributes;
                definition.DefinitionFlags = internalDefinition.DefinitionFlags;
                definition.FolderTypeID    = internalDefinition.FolderTypeID;
            }
            finally
            {
                Marshal.FreeCoTaskMem(internalDefinition.pszName);
                Marshal.FreeCoTaskMem(internalDefinition.pszDescription);
                Marshal.FreeCoTaskMem(internalDefinition.pszRelativePath);
                Marshal.FreeCoTaskMem(internalDefinition.pszParsingName);
                Marshal.FreeCoTaskMem(internalDefinition.pszTooltip);
                Marshal.FreeCoTaskMem(internalDefinition.pszLocalizedName);
                Marshal.FreeCoTaskMem(internalDefinition.pszIcon);
                Marshal.FreeCoTaskMem(internalDefinition.pszSecurity);
            }
            return(definition);
        }
        /// <summary>
        ///     <see cref="KNOWNFOLDER_DEFINITION" />を取得し、
        ///     各プロパティを初期化します。
        /// </summary>
        /// <param name="knownFolderInterface"></param>
        private void Initialize(IKnownFolder knownFolderInterface)
        {
            Contract.Requires(knownFolderInterface != null);

            KNOWNFOLDER_DEFINITION knownFolderDefinition;

            knownFolderInterface.GetFolderDefinition(out knownFolderDefinition);

            try
            {
                this.ParsingName   = PtrToString(knownFolderDefinition.pszParsingName);
                this.CanonicalName = PtrToString(knownFolderDefinition.pszName);
                this.Category      = (KnownFolderCategories)knownFolderDefinition.category;
                this.Description   = PtrToString(knownFolderDefinition.pszDescription);
                this.ParentId      = knownFolderDefinition.fidParent;
                this.RelativePath  = PtrToString(knownFolderDefinition.pszRelativePath);

                InitializeResourceProperties(knownFolderDefinition);

                this.FolderDefinitionFlags = (FolderDefinitionFlags)knownFolderDefinition.kfdFlags;
                this.FileAttributes        = (FileAttributes)knownFolderDefinition.dwAttributes;
                this.FolderTypeId          = knownFolderDefinition.ftidType;
                this.FolderType            = String.Empty;
                this.FolderId = knownFolderInterface.GetId();

                InitializePath(knownFolderInterface);

                this.Redirection = (RedirectionCapability)knownFolderInterface.GetRedirectionCapabilities();
                this.Security    = PtrToString(knownFolderDefinition.pszSecurity);
            }
            finally
            {
                ShellNativeMethods.FreeKnownFolderDefinitionFields(ref knownFolderDefinition);
            }
        }
Esempio n. 3
0
        /// <summary>Retrieves the name associated with a <see cref="IKnownFolder"/>.</summary>
        /// <param name="kf">The known folder.</param>
        /// <returns>The name.</returns>
        public static string Name(this IKnownFolder kf)
        {
            var fd = kf.GetFolderDefinition();

            try
            {
                return(fd.pszName.ToString());
            }
            finally
            {
                FreeKnownFolderDefinitionFields(fd);
            }
        }
Esempio n. 4
0
        public void KnownFolder_GetDefinition()
        {
            IKnownFolderManager manager = ShellDesktopMethods.GetKnownFolderManager();
            IKnownFolder        folder  = manager.GetFolder(KNOWNFOLDERID.LocalAppData);

            using (KNOWNFOLDER_DEFINITION definition = new KNOWNFOLDER_DEFINITION())
            {
                folder.GetFolderDefinition(definition);
                definition.FolderTypeId.Should().Be(Guid.Empty);
                definition.Category.Should().Be(KF_CATEGORY.PERUSER);
                definition.Name.Should().Be("Local AppData");
                definition.RelativePath.Should().Be(@"AppData\Local");
                definition.Parent.Should().Be(KNOWNFOLDERID.Profile);
            }
        }
Esempio n. 5
0
        public void KnownFolder_GetDefinition()
        {
            IKnownFolderManager manager = ShellMethods.GetKnownFolderManager();
            IKnownFolder        folder  = manager.GetFolder(KnownFolderIds.LocalAppData);

            using (KnownFolderDefinition definition = new KnownFolderDefinition())
            {
                folder.GetFolderDefinition(definition);
                definition.FolderTypeId.Should().Be(Guid.Empty);
                definition.Category.Should().Be(KnownFolderCategory.PerUser);
                definition.Name.Should().Be("Local AppData");
                definition.RelativePath.Should().Be(@"AppData\Local");
                definition.Parent.Should().Be(KnownFolderIds.Profile);
            }
        }
Esempio n. 6
0
        static KnownFolder CreateFolder(IKnownFolder iface)
        {
            KNOWNFOLDER_DEFINITION def = iface.GetFolderDefinition();

            try
            {
                return(new KnownFolder(iface,
                                       Marshal.PtrToStringUni(def.pszName),
                                       Marshal.PtrToStringUni(def.pszParsingName)));
            }
            finally
            {
                Marshal.FreeCoTaskMem(def.pszName);
                Marshal.FreeCoTaskMem(def.pszDescription);
                Marshal.FreeCoTaskMem(def.pszRelativePath);
                Marshal.FreeCoTaskMem(def.pszParsingName);
                Marshal.FreeCoTaskMem(def.pszTooltip);
                Marshal.FreeCoTaskMem(def.pszLocalizedName);
                Marshal.FreeCoTaskMem(def.pszIcon);
                Marshal.FreeCoTaskMem(def.pszSecurity);
            }
        }
        public static KNOWNFOLDER_DEFINITION FromKnownFolder(IKnownFolder knownFolder)
        {
            if (knownFolder == null)
            {
                throw new ArgumentNullException("knownFolder");
            }

            KNOWNFOLDER_DEFINITION def;

            using (var handles = new KnownFolderDefinitionHandles())
            {
                KNOWNFOLDER_DEFINITION_RAW rawDef;

                RuntimeHelpers.PrepareConstrainedRegions();
                try
                {
                }
                finally
                {
                    knownFolder.GetFolderDefinition(out rawDef);
                    try
                    {
                        handles.SecureHandles(ref rawDef);
                    }
                    finally
                    {
                        // in case SecureHandles throws
                        rawDef.FreeKnownFolderDefinitionFields();
                    }
                }

                def = new KNOWNFOLDER_DEFINITION(ref rawDef, handles);
            }

            return(def);
        }
        public static KNOWNFOLDER_DEFINITION FromKnownFolder(IKnownFolder knownFolder)
        {
            if (knownFolder == null)
            {
                throw new ArgumentNullException("knownFolder");
            }

            KNOWNFOLDER_DEFINITION def;

            using (var handles = new KnownFolderDefinitionHandles())
            {
                KNOWNFOLDER_DEFINITION_RAW rawDef;

                RuntimeHelpers.PrepareConstrainedRegions();
                try
                {
                }
                finally
                {
                    knownFolder.GetFolderDefinition(out rawDef);
                    try
                    {
                        handles.SecureHandles(ref rawDef);
                    }
                    finally
                    {
                        // in case SecureHandles throws
                        rawDef.FreeKnownFolderDefinitionFields();
                    }
                }

                def = new KNOWNFOLDER_DEFINITION(ref rawDef, handles);
            }

            return def;
        }