public uint GetDCName( string domainFQDN, uint flags, out CNetlogon.LWNET_DC_INFO DCInfo ) { CNetlogon.LWNET_DC_INFO info = new CNetlogon.LWNET_DC_INFO(); DCInfo = info; IntPtr pDCInfo = IntPtr.Zero; uint error = 0; try { Logger.Log(String.Format("GetDCName({0}, {1}) called", domainFQDN, flags), Logger.NetlogonLogLevel); error = NetlogonAPI.LWNetGetDCName( null, domainFQDN, null, flags, out pDCInfo); DCInfo = (CNetlogon.LWNET_DC_INFO)Marshal.PtrToStructure(pDCInfo, typeof(CNetlogon.LWNET_DC_INFO)); Logger.Log(String.Format("GetDCName() returned {0}, error={1}", CNetlogon.LWNETDCInfoToString(DCInfo), error), Logger.NetlogonLogLevel); } catch (Exception e) { Logger.LogException("Netlogon.GetDCName", e); if (error == 0) { error = CNetlogon.Definitions.LWNET_ERROR_INTEROP_EXCEPTION; } } return(error); }
public uint GetDCName( string domainFQDN, uint flags, out CNetlogon.LWNET_DC_INFO DCInfo ) { uint error = 0; CNetlogon.LWNET_DC_INFO info = new CNetlogon.LWNET_DC_INFO(); NetlogonWindowsAPI.DOMAIN_CONTROLLER_INFO DCInfoWindows; DCInfo = info; IntPtr pDCInfo = IntPtr.Zero; try { Logger.Log(String.Format("GetDCNameWindows({0}, {1}) called", domainFQDN, flags), Logger.NetlogonLogLevel); error = (uint)NetlogonWindowsAPI.DsGetDcName( "", "", IntPtr.Zero, "", (int)flags, out pDCInfo); if (error != 0) { return((uint)error); } DCInfoWindows = (NetlogonWindowsAPI.DOMAIN_CONTROLLER_INFO)Marshal.PtrToStructure(pDCInfo, typeof(NetlogonWindowsAPI.DOMAIN_CONTROLLER_INFO)); Logger.Log(String.Format("DsGetDcName() returned {0}, error={1}", DCINFOToString(DCInfoWindows), error), Logger.NetlogonLogLevel); DCInfo.pucDomainGUID = new byte[CNetlogon.Definitions.LWNET_GUID_SIZE]; DCInfo.DomainControllerName = DCInfoWindows.DomainControllerName; DCInfo.DomainControllerAddress = DCInfoWindows.DomainControllerAddress; DCInfoWindows.DomainGuid.ToByteArray().CopyTo(DCInfo.pucDomainGUID, 0); DCInfo.FullyQualifiedDomainName = DCInfoWindows.DomainName; DCInfo.DnsForestName = DCInfoWindows.DnsForestName; DCInfo.Flags = (uint)DCInfoWindows.Flags; DCInfo.DCSiteName = DCInfoWindows.DcSiteName; DCInfo.ClientSiteName = DCInfoWindows.ClientSiteName; if (DCInfo.DomainControllerName.StartsWith(@"\\")) { DCInfo.DomainControllerName = DCInfo.DomainControllerName.Substring(2); } if (DCInfo.DomainControllerAddress.StartsWith(@"\\")) { DCInfo.DomainControllerAddress = DCInfo.DomainControllerAddress.Substring(2); } Logger.Log(String.Format("GetDCNameWindows() returning {0}, error={1}", CNetlogon.LWNETDCInfoToString(DCInfo), error), Logger.LogLevel.Debug); error = NetlogonWindowsAPI.NetApiBufferFree(pDCInfo); if (error != 0) { Logger.Log("NetApiBufferFree() in GetDCNameWindows() failed!", Logger.LogLevel.Error); } } catch (Exception e) { Logger.LogException("Netlogon.GetDCName", e); if (error == 0) { error = CNetlogon.Definitions.LWNET_ERROR_INTEROP_EXCEPTION; } if (!IntPtr.Zero.Equals(pDCInfo)) { uint error2 = NetlogonWindowsAPI.NetApiBufferFree(pDCInfo); if (error2 != 0) { Logger.Log("Netlogon.DCName: NetAPiBufferFree failed: " + error2); } } } return(error); }