| Platform SDK: Active Directory, ADSI, and Directory Services | 
Users, groups, computers, and other security principals can also be represented in domain account form. Domain account (the logon name used in previous versions of Windows NTŪ) has the following form:
domain\account
where domain is the name of the Windows NT domain that contains the user and account is the samAccountName property of the specified user. For example: Microsoft\jsmith.
The domain account form can be used to specify the trustee in an ACE in a security descriptor. It is also used for the logon name on computers running Windows version NT 4.0 and earlier.
//Need to include the following headers to use DsGetDcName
//#include <LMCONS.H>
//#include <dsgetdc.h>
//#include <lmapibuf.h>
//This function returns the previous version name of the security principal 
//specified by the distinguished name specified by szDN.
//The szDomain parameter should be NULL to use the current domain
//to get the name translation. Otherwise, you should specify the 
//domain you want to use as just the domain name (such as northwestdom) 
//or in dotted format (such as northwestdom.Microsoft.com).
HRESULT GetDownlevelName(LPOLESTR szDomainName, LPOLESTR szDN, LPOLESTR *ppNameString)
{
HRESULT hr = E_FAIL;
IADsNameTranslate *pNameTr = NULL;
IADs *pObject = NULL;
LPOLESTR szPath = new OLECHAR[MAX_PATH];
LPOLESTR szInitDomain = new OLECHAR[MAX_PATH];
BSTR szNameTr;
 
if ((!szDN)||(!ppNameString))
    return hr;
 
//Use the current domain if none is specified.
if (!szDomainName)
{
    //Call DsGetDcName to get the name of this computer's domain.
    PDOMAIN_CONTROLLER_INFO DomainControllerInfo = NULL;
    DWORD dReturn = 0L;
    dReturn = DsGetDcName(  NULL,
                NULL,
                NULL,
                NULL,
                DS_DIRECTORY_SERVICE_REQUIRED,
                &DomainControllerInfo
    );
    if (dReturn==NO_ERROR)
    {
        wcscpy(szInitDomain, DomainControllerInfo->DomainName);
        hr = S_OK;
    }
 
    //Free the buffer.
    if (DomainControllerInfo)
        NetApiBufferFree(DomainControllerInfo);
}
else
{
    wcscpy(szInitDomain, szDomainName);
    hr = S_OK;
}
 
if (SUCCEEDED(hr))
{
 
    //Create the COM object for the IADsNameTranslate object.
    hr  = CoCreateInstance( 
                                CLSID_NameTranslate,
                                NULL,
                                CLSCTX_INPROC_SERVER,
                                IID_IADsNameTranslate,
                                (void **)&pNameTr
                          );
    if (SUCCEEDED(hr))
    {
 
        //Initialize for the specified domain.
        hr = pNameTr->Init(ADS_NAME_INITTYPE_DOMAIN, szInitDomain);
        if (SUCCEEDED(hr))
        {
            hr = pNameTr->Set(ADS_NAME_TYPE_1779, szDN);
            hr = pNameTr->Get(ADS_NAME_TYPE_NT4, &szNameTr);
            if (SUCCEEDED(hr))
            {
                *ppNameString = (OLECHAR *)CoTaskMemAlloc (sizeof(OLECHAR)*(wcslen(szNameTr)+1));
                if (*ppNameString)
                    wcscpy(*ppNameString, szNameTr);
                else
                    hr=E_FAIL;
            }
        }
    }
    if (pNameTr)
       pNameTr->Release();
}
 
//Caller must call CoTaskMemFree to free ppNameString.
return hr;
}