DWORD CdcSrvGetDCName( PCWSTR pszDomainName, PCDC_DC_INFO_W *ppAffinitizedDC ) { DWORD dwError = 0; PCDC_DC_INFO_W pAffinitizedDC = NULL; DWORD dwAffinitizedSince = 0; BOOL bHAState = FALSE; PWSTR pszDomainToUse = NULL; if (!ppAffinitizedDC) { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR(dwError); } dwError = VmAfSrvGetDomainName(&pszDomainToUse); BAIL_ON_VMAFD_ERROR(dwError); if (!IsNullOrEmptyString(pszDomainName)) { if (!VmAfdStringIsEqualW( pszDomainName, pszDomainToUse, FALSE ) ) { dwError = ERROR_INVALID_DOMAINNAME; BAIL_ON_VMAFD_ERROR(dwError); } } dwError = CdcRegDbGetHAMode(&bHAState); BAIL_ON_VMAFD_ERROR(dwError); dwError = CdcDbGetAffinitizedDC( pszDomainToUse, &dwAffinitizedSince, &pAffinitizedDC ); if (!bHAState || dwError) { dwError = VmAfdAllocateMemory( sizeof(CDC_DC_INFO_W), (PVOID *)&pAffinitizedDC ); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfSrvGetDCName(&pAffinitizedDC->pszDCName); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfSrvGetDomainName(&pAffinitizedDC->pszDomainName); BAIL_ON_VMAFD_ERROR(dwError); dwError = CdcGetClientSiteName(&pAffinitizedDC->pszDcSiteName); BAIL_ON_VMAFD_ERROR(dwError); } *ppAffinitizedDC = pAffinitizedDC; cleanup: VMAFD_SAFE_FREE_MEMORY(pszDomainToUse); return dwError; error: if (ppAffinitizedDC) { *ppAffinitizedDC = NULL; } if (pAffinitizedDC) { VmAfdFreeDomainControllerInfoW(pAffinitizedDC); } goto cleanup; }
DWORD CdcSrvGetDCName( PCWSTR pszDomainName, PCDC_DC_INFO_W *ppAffinitizedDC ) { DWORD dwError = 0; PCDC_DC_INFO_W pAffinitizedDC = NULL; PCDC_DC_INFO_W pAffinitizedDCToFree = NULL; DWORD dwAffinitizedSince = 0; CDC_DB_ENUM_HA_MODE cdcHAMode = CDC_DB_ENUM_HA_MODE_UNDEFINED; PWSTR pszDomainToUse = NULL; UINT64 iStart = 0; UINT64 iEnd = 0; if (!ppAffinitizedDC) { dwError = ERROR_INVALID_PARAMETER; BAIL_ON_VMAFD_ERROR(dwError); } iStart = VmAfdGetTimeInMilliSec(); dwError = VmAfSrvGetDomainName(&pszDomainToUse); BAIL_ON_VMAFD_ERROR(dwError); if (!IsNullOrEmptyString(pszDomainName)) { if (!VmAfdStringIsEqualW( pszDomainName, pszDomainToUse, FALSE ) ) { dwError = ERROR_INVALID_DOMAINNAME; BAIL_ON_VMAFD_ERROR(dwError); } } dwError = CdcRegDbGetHAMode(&cdcHAMode); BAIL_ON_VMAFD_ERROR(dwError); dwError = CdcDbGetAffinitizedDC( pszDomainToUse, &dwAffinitizedSince, &pAffinitizedDC ); if (cdcHAMode == CDC_DB_ENUM_HA_MODE_LEGACY || dwError) { pAffinitizedDCToFree = pAffinitizedDC; dwError = VmAfdAllocateMemory( sizeof(CDC_DC_INFO_W), (PVOID *)&pAffinitizedDC ); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfSrvGetDCName(&pAffinitizedDC->pszDCName); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfdTrimFQDNTrailingDot(pAffinitizedDC->pszDCName); BAIL_ON_VMAFD_ERROR(dwError); dwError = VmAfSrvGetDomainName(&pAffinitizedDC->pszDomainName); BAIL_ON_VMAFD_ERROR(dwError); dwError = CdcRegDbGetSiteName(&pAffinitizedDC->pszDcSiteName); BAIL_ON_VMAFD_ERROR(dwError); } iEnd = VmAfdGetTimeInMilliSec(); *ppAffinitizedDC = pAffinitizedDC; cleanup: VMAFD_SAFE_FREE_MEMORY(pszDomainToUse); if (pAffinitizedDCToFree) { VmAfdFreeDomainControllerInfoW(pAffinitizedDCToFree); } return dwError; error: (DWORD)VmAfdAddDCSuperLogEntry( gVmafdGlobals.pLogger, iStart, iEnd, pAffinitizedDC, dwError); if (ppAffinitizedDC) { *ppAffinitizedDC = NULL; } if (pAffinitizedDC) { VmAfdFreeDomainControllerInfoW(pAffinitizedDC); } goto cleanup; }