private static DateTime WindowsTimeToDateTime(NetlogonWindowsAPI.TIME_OF_DAY_INFO_WINDOWS windowsDCTime)
        {
            DateTime DCDateTime = new DateTime(
                (int)windowsDCTime.tod_year,
                (int)windowsDCTime.tod_month - 1,
                (int)windowsDCTime.tod_day - 1,
                (int)windowsDCTime.tod_hours,
                (int)windowsDCTime.tod_mins,
                (int)windowsDCTime.tod_secs
                );

            return(DCDateTime);
        }
        public uint GetDCTime(
            string domainFQDN,
            out DateTime DCTime
            )
        {
            DCTime = new DateTime();
            NetlogonWindowsAPI.TIME_OF_DAY_INFO_WINDOWS WindowsDCTime = new NetlogonWindowsAPI.TIME_OF_DAY_INFO_WINDOWS();
            uint error = 0;

            IntPtr pBuffer = IntPtr.Zero;

            try
            {
                error = NetlogonWindowsAPI.NetRemoteTOD(
                    domainFQDN,
                    out pBuffer);

                WindowsDCTime = (NetlogonWindowsAPI.TIME_OF_DAY_INFO_WINDOWS)Marshal.PtrToStructure(
                    pBuffer, typeof(NetlogonWindowsAPI.TIME_OF_DAY_INFO_WINDOWS));

                error = NetlogonWindowsAPI.NetApiBufferFree(pBuffer);
                if (error != 0)
                {
                    Logger.Log("NetApiBufferFree() in GetDCTimeWindows() failed!",
                               Logger.LogLevel.Error);
                }
            }
            catch (Exception e)
            {
                Logger.LogException("Netlogon.GetDCTimeWindows", e);
                if (error == 0)
                {
                    error = CNetlogon.Definitions.LWNET_ERROR_INTEROP_EXCEPTION;
                }
            }

            return(error);
        }