Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Dit onderwerp bevat een codevoorbeeld waarmee een hostserver voor de toepassingsmappartitie wordt gevonden.
In het volgende C/C++-codevoorbeeld ziet u hoe u de functie DsGetDcName gebruikt om een domeincontroller te vinden die als host fungeert voor een replica van een toepassingsmappartitie. In dit codevoorbeeld ziet u ook hoe u de functie DsCrackNames gebruikt om de DN-naam van een toepassingsmappartitie te converteren naar een DNS-naam.
/***************************************************************************
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;
}