Exemple #1
0
        //Enumerate all dcs with srv records
        public static IEnumerable <string> EnumerateDCs(string domainDnsName, DsFlag flags)
        {
            IntPtr handle;
            int    result = NativeMethods.DsGetDcOpenW(domainDnsName, DsEnumerateOptions.None, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, flags, out handle);

            if (result != 0)
            {
                ThrowNetApi(result);
            }
            try
            {
                IntPtr hostName;
                while ((result = NativeMethods.DsGetDcNextW(handle, IntPtr.Zero, IntPtr.Zero, out hostName)) == 0)
                {
                    yield return(Marshal.PtrToStringUni(hostName));

                    NativeMethods.NetApiBufferFree(hostName);
                }
                if (result != 259) //NoMoreItems
                {
                    ThrowNetApi(result);
                }
            }
            finally
            {
                NativeMethods.DsGetDcCloseW(handle);
            }
        }
 public static extern int DsGetDcNameW(
     string ComputerName,
     string DomainName,
     IntPtr DomainGuid,
     IntPtr SiteName,
     DsFlag Flags,
     out IntPtr DomainControllerInfo);
 public static extern int DsGetDcOpenW(
     string DnsName,
     DsEnumerateOptions options,
     IntPtr SiteName,
     IntPtr DomainGuid,
     IntPtr DnsForestName,
     DsFlag Flags,
     out IntPtr GetDcContext);
Exemple #4
0
        //Get a dc in the domain
        public static DOMAIN_CONTROLLER_INFO GetDc(string domainName, DsFlag flags, string computerNameToPerformSearch = null)
        {
            IntPtr returnValue;
            int    result = string.IsNullOrWhiteSpace(computerNameToPerformSearch) ? NativeMethods.DsGetDcNameW(IntPtr.Zero, domainName, IntPtr.Zero, IntPtr.Zero, flags, out returnValue) : NativeMethods.DsGetDcNameW(computerNameToPerformSearch, domainName, IntPtr.Zero, IntPtr.Zero, flags, out returnValue);

            if (result != 0)
            {
                ThrowNetApi(result);
            }
            var dci = (DOMAIN_CONTROLLER_INFO)Marshal.PtrToStructure(returnValue, typeof(DOMAIN_CONTROLLER_INFO));

            NativeMethods.NetApiBufferFree(returnValue);
            return(dci);
        }