public static extern int DsGetDcName( [MarshalAs(UnmanagedType.LPTStr)] string ComputerName, [MarshalAs(UnmanagedType.LPTStr)] string DomainName, [In] int DomainGuid, [MarshalAs(UnmanagedType.LPTStr)] string SiteName, [MarshalAs(UnmanagedType.U4)] DSGETDCNAME_FLAGS flags, out IntPtr pDOMAIN_CONTROLLER_INFO);
private static extern int DsGetDcNameUnix ( string ComputerName, string DomainName, [In] IntPtr DomainGuid, string SiteName, DSGETDCNAME_FLAGS Flags, out IntPtr pDOMAIN_CONTROLLER_INFO );
internal static extern int DsGetDcName ( [MarshalAs(UnmanagedType.LPWStr)] string ComputerName, [MarshalAs(UnmanagedType.LPWStr)] string DomainName, [In] IntPtr DomainGuid, [MarshalAs(UnmanagedType.LPWStr)] string SiteName, DSGETDCNAME_FLAGS Flags, out IntPtr pDOMAIN_CONTROLLER_INFO );
bool LocateSomething(string intput, out string domain, out string forest, DSGETDCNAME_FLAGS flag) { IntPtr DomainInfoResolution; domain = null; forest = null; Trace.WriteLine("Trying to solve " + intput + "(" + DateTime.Now.ToString("u") + ")"); int ret; if (platform != PlatformID.Win32NT) { ret = DsGetDcNameUnix(Server, intput, IntPtr.Zero, null, flag, out DomainInfoResolution); } else { ret = DsGetDcName(Server, intput, IntPtr.Zero, null, flag, out DomainInfoResolution); } if (ret == 0) { Trace.WriteLine("DsGetDcName for " + intput + " succeeded (" + DateTime.Now.ToString("u") + ")"); DOMAIN_CONTROLLER_INFO di = (DOMAIN_CONTROLLER_INFO)Marshal.PtrToStructure(DomainInfoResolution, typeof(DOMAIN_CONTROLLER_INFO)); domain = di.DomainName.ToLowerInvariant(); forest = di.DnsForestName.ToLowerInvariant(); NetApiBufferFree(DomainInfoResolution); return(true); } else if (ret == 0x0000054B) { Trace.WriteLine("DsGetDcName for " + intput + " domain not found (" + DateTime.Now.ToString("u") + ")"); } else { Trace.WriteLine("DsGetDcName for " + intput + " failed 0x" + ret.ToString("x") + " (" + DateTime.Now.ToString("u") + ")"); } return(false); }