IADsPathname 接口
IADsPathname 接口分析和修改 ADsPath 的各种元素。 它还在各种显示格式之间转换 ADsPath。
下面的代码示例从有效的 ADsPath 中提取并返回服务器名称,以便在维护实用工具中向用户显示。
HRESULT GetServerName(BSTR adsPath, BSTR *adsServer)
{
HRESULT hr = S_OK;
IADsPathname *pIADsPathname = NULL;
// Create the IADsPathname object.
hr = CoCreateInstance(CLSID_Pathname,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADsPathname,
(void**) &pIADsPathname);
if (FAILED(hr))
{
if (pIADsPathname)
pIADsPathname->Release();
return (hr);
}
// Set the path.
hr = pIADsPathname->Set(adsPath, ADS_SETTYPE_FULL);
if (SUCCEEDED(hr))
// Extract and return the server name.
hr = pIADsPathname->Retrieve(ADS_FORMAT_SERVER, adsServer);
// Cleanup.
pIADsPathname->Release();
return (hr);
}
下面的代码示例通过将对象的 可分辨名称 属性设置为自己的 ADsPath 来帮助初始化新创建的 ADSI 对象。 请注意,调用例程必须通过调用 SetInfo 方法提交对基础目录存储的任何更改。
HRESULT SetDistinguishedName(IADs *pIADs)
{
HRESULT hr = S_OK;
CComBSTR sbstrADsPath;
IADsPathname *pIADsPathname = NULL;
// Get the ADsPath for this object.
hr = pIADs->get_ADsPath(&sbstrADsPath);
if (FAILED(hr))
return (hr);
// Create the IADsPathname object.
hr = CoCreateInstance(CLSID_Pathname,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADsPathname,
(void**) &pIADsPathname);
if (FAILED(hr))
{
if (pIADsPathname)
pIADsPathname->Release();
return (hr);
}
// Set the path.
hr = pIADsPathname->Set(sbstrADsPath, ADS_SETTYPE_FULL);
if (SUCCEEDED(hr))
{
CComBSTR sbstrDNPath;
// Convert the path to Distinguished Name format.
hr = pIADsPathname->Retrieve(ADS_FORMAT_WINDOWS_DN,
&sbstrDNPath);
if (SUCCEEDED(hr))
{
// Set the distinguished name property.
VARIANT var;
VariantInit(&var);
V_BSTR(&var) = sbstrDNPath;
V_VT(&var) = VT_BSTR;
hr = pIADs->Put(CComBSTR("distinguishedName"), var);
VariantClear(&var);
}
}
// Cleanup.
pIADsPathname->Release();
return (hr);
}