尋找應用程式目錄分割主機伺服器的範例程序代碼
本主題包含尋找應用程式目錄分割主機伺服器的程式代碼範例。
下列 C/C++ 程式代碼範例示範如何使用 DsGetDcName 函式來尋找裝載應用程式目錄分割複本的域控制器。 此程式代碼範例也會示範如何使用 DsCrackNames 函 式,將應用程式目錄分割區的辨別名稱轉換為 DNS 名稱。
/***************************************************************************
AppPartitionDNToDNS()
Converts the distinguished name of an application directory partition to
a DNS name for the partition.
The caller must free the memory allocated to ppszDNS by calling
FreeADsMem when it is no longer required.
***************************************************************************/
DWORD AppPartitionDNToDNS(LPCTSTR pszDN, LPTSTR *ppszDNS)
{
DWORD dwRet;
LPCTSTR rgpszNames[] = {pszDN};
PDS_NAME_RESULT pResults;
/*
Convert the distinguished name to a DNS name using only syntactic
mapping. The DS_NAME_FLAG_SYNTACTICAL_ONLY flag allows DsCrackNames to
be called without binding.
*/
dwRet = DsCrackNames(NULL,
DS_NAME_FLAG_SYNTACTICAL_ONLY,
DS_FQDN_1779_NAME,
DS_CANONICAL_NAME,
1,
rgpszNames,
&pResults);
if(NO_ERROR == dwRet)
{
/*
Allocate the memory and copy the DNS name of the partition.
*/
DWORD dwBytes = (lstrlen(pResults->rItems[0].pDomain) + 1) * sizeof(TCHAR);
*ppszDNS = (LPTSTR)AllocADsMem(dwBytes);
if(*ppszDNS)
{
wcsncpy_s(*ppszDNS, pResults->rItems[0].pDomain, dwBytes);
dwRet = NO_ERROR;
}
else
{
dwRet = ERROR_NOT_ENOUGH_MEMORY;
}
// Free the result set.
DsFreeNameResult(pResults);
}
return dwRet;
}
/***************************************************************************
PrintDCFromAppPartition()
Given the distinguished name of an application directory partition,
prints to the console the DNS name of a domain controller that hosts a
replica of the application directory partition.
***************************************************************************/
DWORD PrintDCFromAppPartition(LPCTSTR pszAppPartitionDN)
{
DWORD dwRet;
/*
Convert the distinguished name of the partition to a DNS name so that
the DNS name can be passed to DsGetDcName.
*/
LPTSTR pszDNS;
dwRet = AppPartitionDNToDNS(pszAppPartitionDN, &pszDNS);
if(NO_ERROR == dwRet)
{
PDOMAIN_CONTROLLER_INFO pdci;
/*
Get the name of a domain controller that hosts a replica of the
application directory partition.
*/
dwRet = DsGetDcName(NULL,
pszDNS,
NULL,
NULL,
DS_ONLY_LDAP_NEEDED,
&pdci);
if(NO_ERROR == dwRet)
{
// Print the DNS name of the domain controller.
_tprintf(pdci->DomainControllerName);
NetApiBufferFree(pdci);
}
FreeADsMem(pszDNS);
}
return dwRet;
}