/// <summary>
        /// Updates the children of a node.
        /// </summary>
        private void FetchChildren(TreeNode parent)
        {
            // get rid of existing children.
            parent.Nodes.Clear();

            // check for a valid node.
            ContainerInfo info = parent.Tag as ContainerInfo;

            if (info == null)
            {
                return;
            }

            // the node type is used to determine what children exist.
            switch (info.Type)
            {
            case ContainerInfoType.Root:
            {
                ContainerInfo childInfo = new ContainerInfo(ContainerInfoType.TopLevelStore, "Local Machine");
                childInfo.StoreType = WindowsStoreType.LocalMachine;
                AddNode(parent, childInfo);

                childInfo           = new ContainerInfo(ContainerInfoType.TopLevelStore, "Current User");
                childInfo.StoreType = WindowsStoreType.CurrentUser;
                AddNode(parent, childInfo);

                childInfo           = new ContainerInfo(ContainerInfoType.TopLevelStore, "Services");
                childInfo.StoreType = WindowsStoreType.Service;
                AddNode(parent, childInfo);

                childInfo           = new ContainerInfo(ContainerInfoType.TopLevelStore, "Users");
                childInfo.StoreType = WindowsStoreType.User;
                AddNode(parent, childInfo);
                break;
            }

            case ContainerInfoType.TopLevelStore:
            {
                if (info.StoreType == WindowsStoreType.Service)
                {
                    foreach (ServiceController service in ServiceController.GetServices())
                    {
                        ContainerInfo childInfo = new ContainerInfo(ContainerInfoType.Service, service.DisplayName);
                        childInfo.StoreType = WindowsStoreType.Service;
                        childInfo.Service   = service;
                        AddNode(parent, childInfo);
                    }

                    break;
                }

                if (info.StoreType == WindowsStoreType.User)
                {
                    IList <AccountInfo> users = AccountInfo.Query(null);

                    foreach (AccountInfo user in users)
                    {
                        if (user.SidType == AccountSidType.User)
                        {
                            ContainerInfo childInfo = new ContainerInfo(ContainerInfoType.User, user.Name);
                            childInfo.StoreType = WindowsStoreType.User;
                            childInfo.Account   = user;
                            AddNode(parent, childInfo);
                        }
                    }

                    break;
                }

                foreach (WindowsCertificateStore store in WindowsCertificateStore.EnumerateStores(info.StoreType, null, null))
                {
                    ContainerInfo childInfo = new ContainerInfo(ContainerInfoType.Store, store.DisplayName);
                    childInfo.StoreType        = info.StoreType;
                    childInfo.CertificateStore = store;
                    AddNode(parent, childInfo);
                }

                break;
            }

            case ContainerInfoType.Service:
            {
                if (info.Service == null)
                {
                    break;
                }

                foreach (WindowsCertificateStore store in WindowsCertificateStore.EnumerateStores(info.StoreType, null, info.Service.ServiceName))
                {
                    ContainerInfo childInfo = new ContainerInfo(ContainerInfoType.Store, store.DisplayName);
                    childInfo.StoreType        = info.StoreType;
                    childInfo.CertificateStore = store;
                    AddNode(parent, childInfo);
                }

                break;
            }

            case ContainerInfoType.User:
            {
                if (info.Account == null)
                {
                    break;
                }

                foreach (WindowsCertificateStore store in WindowsCertificateStore.EnumerateStores(info.StoreType, null, info.Account.Sid))
                {
                    ContainerInfo childInfo = new ContainerInfo(ContainerInfoType.Store, store.DisplayName);
                    childInfo.StoreType        = info.StoreType;
                    childInfo.CertificateStore = store;
                    AddNode(parent, childInfo);
                }

                break;
            }
            }

            // add a dummy child to show the + sign.
            foreach (TreeNode child in parent.Nodes)
            {
                child.Nodes.Add(new TreeNode());
            }
        }