public Dictionary <string, object[]> CheckDNS(string ipAddress, string svrFQDN)
        {
            Dictionary <string, object[]> dictionary = new Dictionary <string, object[]>();
            string arg = string.Empty;

            ipAddress = ipAddress.TrimEnd(ManagedMethodProvider.aipArrayDelimiter);
            string[] array = ipAddress.Split(ManagedMethodProvider.aipArrayDelimiter);
            ManagedMethodProvider.IP4_ARRAY[] array2 = new ManagedMethodProvider.IP4_ARRAY[array.Length];
            int num = 0;

            foreach (string ipAddress2 in array)
            {
                array2[num].AddrCount = 1U;
                array2[num].AddrArray = this.ConvertIPToUINT(ipAddress2);
                num++;
            }
            DateTime d   = DateTime.UtcNow.ToLocalTime();
            string   str = Strings.ServerFQDNDisplayName;

            for (int j = 0; j < num; j++)
            {
                d   = DateTime.UtcNow.ToLocalTime();
                arg = this.ProcessDnsQuery(svrFQDN, array[j], array2[j]);
                dictionary.Add("A", new object[]
                {
                    string.Format("TimeSpan = {0}", (DateTime.UtcNow.ToLocalTime() - d).TotalMilliseconds.ToString()),
                    string.Format("DNS Server = {0}", array[j]),
                    str + " = " + svrFQDN,
                    string.Format("DNS Query Result = {0}", arg)
                });
            }
            return(dictionary);
        }
        private string ProcessDnsQuery(string pName, string ipDNSName, ManagedMethodProvider.IP4_ARRAY ipDNS)
        {
            IntPtr        intPtr        = IntPtr.Zero;
            IntPtr        zero          = IntPtr.Zero;
            StringBuilder stringBuilder = new StringBuilder();

            DnsApi.DnsRecordType   dnsRecordType = DnsApi.DnsRecordType.A;
            DnsApi.DnsQueryOptions options       = DnsApi.DnsQueryOptions.ByPassCache | DnsApi.DnsQueryOptions.TreatAsFqdn;
            try
            {
                intPtr = Marshal.AllocHGlobal(Marshal.SizeOf(ipDNS));
                Marshal.StructureToPtr(ipDNS, intPtr, false);
                int num = DnsApi.DnsQuery(pName, dnsRecordType, options, intPtr, ref zero, IntPtr.Zero);
                if (num == 0)
                {
                    IntPtr intPtr2 = zero;
                    do
                    {
                        DnsApi.DNS_RECORD_BASE dns_RECORD_BASE = (DnsApi.DNS_RECORD_BASE)Marshal.PtrToStructure(intPtr2, typeof(DnsApi.DNS_RECORD_BASE));
                        if (dns_RECORD_BASE.WType == (ushort)dnsRecordType)
                        {
                            DnsApi.DnsRecordType wtype = (DnsApi.DnsRecordType)dns_RECORD_BASE.WType;
                            if (wtype == DnsApi.DnsRecordType.A)
                            {
                                stringBuilder.Append(this.ConvertUINTToIP(((DnsApi.DNS_RECORD_A)Marshal.PtrToStructure(intPtr2, typeof(DnsApi.DNS_RECORD_A))).A) + ";");
                            }
                        }
                        intPtr2 = dns_RECORD_BASE.PNext;
                    }while (intPtr2 != IntPtr.Zero);
                    if (stringBuilder.Length > 0)
                    {
                        stringBuilder = (stringBuilder = new StringBuilder(stringBuilder.ToString().TrimEnd(ManagedMethodProvider.aip6AdrDelimiter)));
                    }
                }
                else if (num != 9501)
                {
                    Win32Exception ex = new Win32Exception(num);
                    throw ex;
                }
            }
            catch (Exception ex2)
            {
                throw new Exception(Strings.ErrorDNSQueryA(ipDNSName, pName, ex2.Message), ex2);
            }
            finally
            {
                if (zero != IntPtr.Zero)
                {
                    DnsApi.DnsRecordListFree(zero, DnsApi.DnsFreeType.DnsFreeRecordList);
                }
                if (intPtr != IntPtr.Zero)
                {
                    Marshal.FreeHGlobal(intPtr);
                }
            }
            return(stringBuilder.ToString());
        }