Contenedor DisplaySpecifiers

Los especificadores de pantalla se almacenan, por configuración regional, en el contenedor DisplaySpecifiers del contenedor De configuración. Dado que el contenedor de configuración se replica en todo el bosque, los especificadores de pantalla se propagan entre todos los dominios de un bosque.

El contenedor De configuración almacena el contenedor DisplaySpecifiers, que luego almacena los contenedores que corresponden a cada configuración regional. Estos contenedores de configuración regional se denominan mediante la representación hexadecimal del identificador de configuración regional. Por ejemplo, el contenedor de configuración regional de EE. UU./inglés se denomina 409, el contenedor de la configuración regional alemana se denomina 407 y el contenedor de la configuración regional japonesa se denomina 411. Para obtener más información y una lista de posibles identificadores de idioma, vea Constantes y cadenas de identificador de idioma.

Cada contenedor de configuración regional almacena objetos de la clase displaySpecifier .

Para enumerar todos los especificadores de visualización de una configuración regional, enumere todos los objetos displaySpecifier del contenedor de configuración regional especificado dentro del contenedor DisplaySpecifiers.

El ejemplo de código siguiente contiene una función que enlaza al contenedor del especificador de visualización para la configuración regional especificada:

/**********
This function returns a pointer to the display specifier container 
for the specified locale.

If locale is NULL, use default system locale and then return the 
locale in the locale parameter.
***********/
HRESULT BindToDisplaySpecifiersContainerByLocale(
    LCID *locale,
    IADs **ppDispSpecCont)
{
HRESULT hr = E_FAIL;
 
if ((!ppDispSpecCont)||(!locale))
    return E_POINTER;
 
// If no locale is specified, use the default system locale.
if (!(*locale))
{
    *locale = GetSystemDefaultLCID();
    if (!(*locale))
        return E_FAIL;
}
 
// Be sure that the locale is valid.
if (!IsValidLocale(*locale, LCID_SUPPORTED))
    return E_INVALIDARG;
 
LPOLESTR szPath = new OLECHAR[MAX_PATH*2];
IADs *pObj = NULL;
VARIANT var;
 
hr = ADsOpenObject(L"LDAP://rootDSE",
                     NULL,
                     NULL,
                     ADS_SECURE_AUTHENTICATION,
                     IID_IADs,
                     (void**)&pObj);
 
if (SUCCEEDED(hr))
{
    // Get the DN to the configuration container.
    hr = pObj->Get(CComBSTR("configurationNamingContext"), &var);
    if (SUCCEEDED(hr))
    {
        // Build the string to bind to the container for the
        // specified locale in the DisplaySpecifiers container.
        swprintf_s(
            szPath, 
            L"LDAP://cn=%x,cn=DisplaySpecifiers,%s", 
            *locale, 
            var.bstrVal);

        // Bind to the container.
        *ppDispSpecCont = NULL;
        hr = ADsOpenObject(szPath,
                     NULL,
                     NULL,
                     ADS_SECURE_AUTHENTICATION,
                     IID_IADs,
                     (void**)ppDispSpecCont);
 
        if(FAILED(hr))
        {
            if ((*ppDispSpecCont))
            {
                (*ppDispSpecCont)->Release();
                (*ppDispSpecCont) = NULL;
            }
        }
    }
}
 
// Cleanup.
VariantClear(&var);
if (pObj)
    pObj->Release();
 
return hr;
}