DisplaySpecifiersコンテナー
表示指定子は、ロケールによって、構成コンテナーのDisplaySpecifiersコンテナーに格納されます。 構成コンテナーはフォレスト全体でレプリケートされるため、表示指定子はフォレスト内のすべてのドメインに反映されます。
構成コンテナーは、DisplaySpecifiersコンテナーを格納し、各ロケールに対応するコンテナーを格納します。 これらのロケールコンテナーには、ロケール識別子の十六進表現を使用して名前が付けられます。 たとえば、米国/英語ロケールコンテナーの名前は409、ドイツロケールのコンテナーの名前は407、日本語ロケールのコンテナーの名前は411です。 詳細と使用可能な言語識別子の一覧については、 「言語識別子の定数と文字列」 を参照してください。
各ロケールコンテナーには、displaySpecifierクラスのオブジェクトが格納されます。
ロケールのすべての表示指定子を一覧表示するには、DisplaySpecifiersコンテナー内の指定されたロケールコンテナー内のすべてのdisplaySpecifierオブジェクトを列挙します。
次のコード例には、指定されたロケールの表示指定子コンテナーにバインドする関数が含まれています。
/**********
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;
}