IDirectoryObject::GetObjectAttributes メソッド (iads.h)
IDirectoryObject::GetObjectAttributes メソッドは、ディレクトリ サービス オブジェクトの 1 つ以上の指定された属性を取得します。
構文
HRESULT GetObjectAttributes(
[in] LPWSTR *pAttributeNames,
[in] DWORD dwNumberAttributes,
[out] PADS_ATTR_INFO *ppAttributeEntries,
[out] DWORD *pdwNumAttributesReturned
);
パラメーター
[in] pAttributeNames
要求された属性の名前の配列を指定します。
オブジェクトのすべての属性を要求するには、 pAttributeNames を NULL に設定し、 dwNumberAttributes パラメーターを (DWORD)-1 に設定します。
[in] dwNumberAttributes
pAttributeNames 配列のサイズを指定します。 -1 の場合、オブジェクトのすべての属性が要求されます。
[out] ppAttributeEntries
要求された属性値を含む ADS_ATTR_INFO 構造体の配列へのポインターを受け取る変数へのポインター。 ディレクトリ サービス オブジェクトから属性を取得できない場合、返されるポインターは NULL です。
[out] pdwNumAttributesReturned
ppAttributeEntries 配列で取得された属性の数を受け取る DWORD 変数へのポインター。
戻り値
このメソッドは、標準値と次の値を返します。
詳細およびその他の戻り値については、「 ADSI エラー コード」を参照してください。
注釈
ADSI は、ppAttributeEntries パラメーターで返されるADS_ATTR_INFO構造体の配列にメモリを割り当てます。 呼び出し元は、配列を解放するために FreeADsMem を呼び出す必要があります。
ppAttributeEntries で返される属性の順序は、pAttributeNames で要求された順序と必ずしも同じではありません。
IDirectoryObject::GetObjectAttributes メソッドは、要求された属性のスキーマ定義の読み取りを試み、ADS_ATTR_INFO構造体に含まれる ADSVALUE 構造体の適切な形式で属性値を返すことができます。 ただし、スキーマ定義が使用できない場合でも、GetObjectAttributes は成功します。その場合、ADS_ATTR_INFO構造体の dwADsType メンバーはADSTYPE_PROV_SPECIFICを返し、値はADS_PROV_SPECIFIC構造体で返されます。 GetObjectAttributes 呼び出しの結果を処理する場合は、dwADsType を確認して、データが期待される形式で返されたことを確認します。
例
次のコード例は、 IDirectoryObject::GetObjectAttributes メソッドを使用する方法を示しています。
HRESULT hr;
IDirectoryObject *pDirObject = NULL;
hr = ADsGetObject(L"LDAP://CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=com",
IID_IDirectoryObject,
(void**) &pDirObject );
if ( SUCCEEDED(hr) )
{
ADS_ATTR_INFO *pAttrInfo=NULL;
DWORD dwReturn;
LPWSTR pAttrNames[]={L"givenName",L"sn", L"otherTelephone" };
DWORD dwNumAttr=sizeof(pAttrNames)/sizeof(LPWSTR);
//////////////////////////////////////////////////////
// Get attribute values requested.
// Be aware that the order is not necessarily the
// same as requested using pAttrNames.
//////////////////////////////////////////////////////
hr = pDirObject->GetObjectAttributes( pAttrNames,
dwNumAttr,
&pAttrInfo,
&dwReturn );
if ( SUCCEEDED(hr) )
{
for(DWORD idx = 0; idx < dwReturn; idx++ )
{
if ( _wcsicmp(pAttrInfo[idx].pszAttrName,L"givenName") == 0 )
{
switch (pAttrInfo[idx].dwADsType)
{
case ADSTYPE_CASE_IGNORE_STRING:
printf("First Name: %S\n", pAttrInfo[idx].pADsValues->CaseIgnoreString);
break;
case ADSTYPE_PROV_SPECIFIC:
printf("First Name: %S\n", pAttrInfo[idx].pADsValues->ProviderSpecific.lpValue);
break;
default:
printf("Invalid ADsType: %d\n", pAttrInfo[idx].dwADsType);
break;
}
}
else if ( _wcsicmp(pAttrInfo[idx].pszAttrName, L"sn") == 0 )
{
switch (pAttrInfo[idx].dwADsType)
{
case ADSTYPE_CASE_IGNORE_STRING:
printf("Last Name: %S\n", pAttrInfo[idx].pADsValues->CaseIgnoreString);
break;
case ADSTYPE_PROV_SPECIFIC:
printf("Last Name: %S\n", pAttrInfo[idx].pADsValues->ProviderSpecific.lpValue);
break;
default:
printf("Invalid ADsType: %d\n", pAttrInfo[idx].dwADsType);
break;
}
}
else if ( _wcsicmp(pAttrInfo[idx].pszAttrName, L"otherTelephone") == 0 )
{ // Print the multi-valued property, "Other Telephones".
switch (pAttrInfo[idx].dwADsType)
{
case ADSTYPE_CASE_IGNORE_STRING:
printf("Other Telephones:");
for (DWORD val=0; val < pAttrInfo[idx].dwNumValues; val++)
printf(" %S\n", pAttrInfo[idx].pADsValues[val].CaseIgnoreString);
break;
case ADSTYPE_PROV_SPECIFIC:
printf("Other Telephones:");
for (DWORD val=0; val < pAttrInfo[idx].dwNumValues; val++)
printf(" %S\n", pAttrInfo[idx].pADsValues[val].CaseIgnoreString);
break;
default:
printf("Other Telephones:");
for (DWORD val=0; val < pAttrInfo[idx].dwNumValues; val++)
printf(" %S\n", pAttrInfo[idx].pADsValues[val].CaseIgnoreString);
break;
}
}
}
/////////////////////////////////////////////////////////////
// Use FreeADsMem for all memory obtained from the ADSI call.
/////////////////////////////////////////////////////////////
FreeADsMem( pAttrInfo );
}
pDirObject->Release();
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista |
サポートされている最小のサーバー | Windows Server 2008 |
対象プラットフォーム | Windows |
ヘッダー | iads.h |
[DLL] | Activeds.dll |