private static List <Node> NamespaceWalk(Session session, ReferenceDescription node, List <Node> nodes)
        {
            ReferenceDescriptionCollection nextRefs;

            Byte[] nextCp;
            session.Browse(
                null,
                null,
                ExpandedNodeId.ToNodeId(node.NodeId, session.NamespaceUris),
                0u,
                BrowseDirection.Forward,
                ReferenceTypeIds.HierarchicalReferences,
                true,
                (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method,
                out nextCp,
                out nextRefs);

            foreach (ReferenceDescription reference in nextRefs)
            {
                nodes.Add(new Node(reference, node.NodeId));
            }

            foreach (ReferenceDescription reference in nextRefs)
            {
                NamespaceWalk(session, reference, nodes);
            }

            return(nodes);
        }
        private static ReferenceDescriptionCollection BrowseRoot(Session session)
        {
            ReferenceDescriptionCollection references;

            Byte[] continuationPoint;

            references = session.FetchReferences(ObjectIds.ObjectsFolder);

            session.Browse(
                null,
                null,
                ObjectIds.ObjectsFolder,
                0u,
                BrowseDirection.Forward,
                ReferenceTypeIds.HierarchicalReferences,
                true,
                (uint)NodeClass.Variable | (uint)NodeClass.Object | (uint)NodeClass.Method,
                out continuationPoint,
                out references);

            return(references);
        }