/// <summary>
        /// Gets the root description for a com native device.
        /// </summary>
        /// <param name="device">The device to get root description for.</param>
        /// <returns>The root description for the device.</returns>
        internal RootDescription this[IUPnPDevice device]
        {
            get
            {
                RootDescription lrdDesc;
                string lsKey = KeyFor(device);

                if (Logging.Enabled)
                    Logging.Log(this, string.Format("Getting RootDescription from cache for: '{0}' root of '{1}' key '{2}'", device.RootDevice.FriendlyName, device.FriendlyName, lsKey), 1);

                try
                {
                    if (!mdCache.TryGetValue(lsKey, out lrdDesc))
                    {
                        if (Logging.Enabled)
                            Logging.Log(this, "Cache missed");
                        lrdDesc = device.RootDeviceDescription();

                        if (Logging.Enabled)
                            Logging.Log(this, "Adding to cache");
                        mdCache[lsKey] = lrdDesc;
                    }
                    else
                        if (Logging.Enabled)
                            Logging.Log(this, "Cache hit");

                    return lrdDesc;
                }
                finally
                {
                    if (Logging.Enabled)
                        Logging.Log(this, "Finished getting RootDescription from cache", -1);
                }
            }
        }
        /// <summary>
        /// Gets the root description for a com native device.
        /// </summary>
        /// <param name="device">The device to get root description for.</param>
        /// <returns>The root description for the device.</returns>
        internal RootDescription this[IUPnPDevice device]
        {
            get
            {
                RootDescription lrdDesc;
                string          lsKey = KeyFor(device);

                if (Logging.Enabled)
                {
                    Logging.Log(this, string.Format("Getting RootDescription from cache for: '{0}' root of '{1}' key '{2}'", device.RootDevice.FriendlyName, device.FriendlyName, lsKey), 1);
                }

                try
                {
                    if (!mdCache.TryGetValue(lsKey, out lrdDesc))
                    {
                        if (Logging.Enabled)
                        {
                            Logging.Log(this, "Cache missed");
                        }
                        lrdDesc = device.RootDeviceDescription();

                        if (Logging.Enabled)
                        {
                            Logging.Log(this, "Adding to cache");
                        }
                        mdCache[lsKey] = lrdDesc;
                    }
                    else
                    if (Logging.Enabled)
                    {
                        Logging.Log(this, "Cache hit");
                    }

                    return(lrdDesc);
                }
                finally
                {
                    if (Logging.Enabled)
                    {
                        Logging.Log(this, "Finished getting RootDescription from cache", -1);
                    }
                }
            }
        }