예제 #1
0
        private void Enumerate(ref PortableDeviceApiLib.IPortableDeviceContent pContent, string parentID, PortableDeviceContainerObject node)
        {
            PortableDeviceApiLib.IPortableDeviceProperties properties;
            pContent.Properties(out properties);

            PortableDeviceApiLib.IEnumPortableDeviceObjectIDs pEnum;
            pContent.EnumObjects(0, parentID, null, out pEnum);

            uint cFetched = 0;
            PortableDeviceObject current;
            do
            {
                string objectID;
                pEnum.Next(1, out objectID, ref cFetched);

                if (cFetched > 0)
                {
                    current = this.ExtractInformation(properties, objectID);
                    node.AddChild(current);
                    if (current is PortableDeviceContainerObject)
                        Enumerate(ref pContent, objectID, (PortableDeviceContainerObject)current);
                }

            } while (cFetched > 0);
        }
예제 #2
0
        internal void Enumerate(ref IPortableDeviceContent pContent, string parentID, PortableDeviceContainerObject node, IObjectEnumerateHelper helper, bool detectNewObjects = false)
        {
            IPortableDeviceProperties properties;
            pContent.Properties(out properties);

            foreach (var objectID in ExtractObjectIds(pContent, parentID))
            {
                if (detectNewObjects && ParentContainsChildsId(node, objectID))
                    continue;

                PortableDeviceObject current = ExtractInformation(properties, objectID);
                if(!helper.IsObjectMatching(current))
                    continue;

                node.AddChild(current);

                if (!helper.IsLastNode && current is PortableDeviceContainerObject)
                    Enumerate(ref pContent, objectID, (PortableDeviceContainerObject)current, helper.Next(), detectNewObjects);
            }
        }