Metode IDirectoryObject::GetObjectAttributes (iads.h)
Metode IDirectoryObject::GetObjectAttributes mengambil satu atau beberapa atribut tertentu dari objek layanan direktori.
Sintaks
HRESULT GetObjectAttributes(
[in] LPWSTR *pAttributeNames,
[in] DWORD dwNumberAttributes,
[out] PADS_ATTR_INFO *ppAttributeEntries,
[out] DWORD *pdwNumAttributesReturned
);
Parameter
[in] pAttributeNames
Menentukan array nama atribut yang diminta.
Untuk meminta semua atribut objek, atur pAttributeNames ke NULL dan atur parameter dwNumberAttributes ke (DWORD)-1.
[in] dwNumberAttributes
Menentukan ukuran array pAttributeNames . Jika -1, semua atribut objek diminta.
[out] ppAttributeEntries
Penunjuk ke variabel yang menerima penunjuk ke array struktur ADS_ATTR_INFO yang berisi nilai atribut yang diminta. Jika tidak ada atribut yang dapat diperoleh dari objek layanan direktori, penunjuk yang dikembalikan adalah NULL.
[out] pdwNumAttributesReturned
Penunjuk ke variabel DWORD yang menerima jumlah atribut yang diambil dalam array ppAttributeEntries .
Nilai kembali
Metode ini mengembalikan nilai standar, serta yang berikut ini:
Untuk informasi selengkapnya dan nilai pengembalian lainnya, lihat Kode Kesalahan ADSI.
Keterangan
ADSI mengalokasikan memori untuk array struktur ADS_ATTR_INFO yang dikembalikan dalam parameter ppAttributeEntries . Pemanggil harus memanggil FreeADsMem untuk membebaskan array.
Urutan atribut yang dikembalikan dalam ppAttributeEntries belum tentu sama dengan yang diminta dalam pAttributeNames.
Metode IDirectoryObject::GetObjectAttributes mencoba membaca definisi skema atribut yang diminta sehingga dapat mengembalikan nilai atribut dalam format yang sesuai dalam struktur ADSVALUE yang terkandung dalam struktur ADS_ATTR_INFO . Namun, GetObjectAttributes dapat berhasil bahkan ketika definisi skema tidak tersedia, dalam hal ini anggota dwADsType dari struktur ADS_ATTR_INFO mengembalikan ADSTYPE_PROV_SPECIFIC dan nilai dikembalikan dalam struktur ADS_PROV_SPECIFIC . Saat Anda memproses hasil panggilan GetObjectAttributes , verifikasi dwADsType untuk memastikan bahwa data dikembalikan dalam format yang diharapkan.
Contoh
Contoh kode berikut menunjukkan bagaimana metode IDirectoryObject::GetObjectAttributes dapat digunakan.
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();
}
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows Vista |
Server minimum yang didukung | Windows Server 2008 |
Target Platform | Windows |
Header | iads.h |
DLL | Activeds.dll |