//  ----------------------
        //  GetInstanceInfo method
        //  ----------------------

        /// <summary>
        /// Gets information for the specified SQL Server Express LocalDB
        /// instance, such as whether it exists, the LocalDB version it uses,
        /// whether it is running, and so on.
        /// </summary>
        /// <param name="instanceName">Name of the instance.</param>
        /// <returns>The information about the specified LocalDB instance.
        ///     </returns>

        public InstanceInfo GetInstanceInfo(string instanceName)
        {
            var info = new LocalDBInstanceInfo();
            var hr   = library.GetFunction(nameof(LocalDBGetInstanceInfo), ref localDBGetInstanceInfo)(instanceName, out info, Marshal.SizeOf(typeof(LocalDBInstanceInfo)));

            return(ValidateHResult(hr) ? new InstanceInfo(info) : null);
        }
        //  ------------
        //  construction
        //  ------------

        internal InstanceInfo(LocalDBInstanceInfo info)
        {
            Name   = info.InstanceName.ToString(Encoding.Unicode);
            Exists = info.Exists;
            ConfigurationCorrupted = info.ConfigurationCorrupted;
            IsRunning          = info.IsRunning;
            Version            = new Version((int)info.Major, (int)info.Minor, (int)info.Build, (int)info.Revision);
            LastStart          = info.LastStartUTC.ToDateTime();
            Connection         = info.Connection.ToString(Encoding.Unicode);
            IsShared           = info.IsShared;
            SharedInstanceName = info.SharedInstanceName.ToString(Encoding.Unicode);
            Owner       = info.OwnerSID.ToString(Encoding.Unicode);
            IsAutomatic = info.IsAutomatic;
        }