Acessando atributos com ADSI

Os métodos IADs.Get e IADs.GetEx são usados para recuperar valores de atributo nomeados. Ambos os métodos retornam um valor VARIANT. Esses métodos estão disponíveis somente para diretórios que oferecem suporte a um esquema. Ao acessar objetos em um diretório sem um esquema, as interfaces IADsPropertyEntry e IADsPropertyValue devem ser usadas para manipular valores de atributo.

Os métodos IADs.Get e IADs.GetEx retornam uma VARIANT que pode, ou não, ser uma matriz VARIANT, dependendo do número de valores retornados pelo servidor. Por exemplo, se apenas um valor for retornado do servidor, independentemente de ser um atributo de valor único ou múltiplo, o método retornará um único VARIANT. Por outro lado, se vários valores forem retornados, uma matriz VARIANT será retornada. Se uma matriz VARIANT for retornada, o membro vt da estrutura VARIANT conterá os sinalizadores VT_VARIANT/vbVariant e VT_ARRAY/vbArray.

Os métodos IADs.Get e IADs.GetEx também podem retornar um objeto COM usando a interface IDispatch. Nesse caso, o membro vt da estrutura VARIANT contém o sinalizador VT_DISPATCH/vbObject. Para acessar o objeto COM, chame o método QueryInterface na interface IDispatch para obter a interface desejada.

Outro tipo de dados retornado pelos métodos IADs.Get e IADs.GetEx são dados binários. Nesse caso, os dados são fornecidos como uma matriz contígua de bytes e o membro vt da estrutura VARIANT conterá os sinalizadores VT_UI1/vbByte e VT_ARRAY/vbArray.

Observação

Microsoft Visual Basic, Scripting Edition oferece suporte apenas a matrizes VARIANT e VARIANT. Devido a isso, VBScript não pode ser usado para ler valores de propriedade binária.

 

Muitas interfaces ADSI definem propriedades específicas da interface. Por exemplo, a interface IADsComputer define a propriedade Location. Essas propriedades definidas pela interface podem conter dados idênticos a um dos atributos nomeados, mas as propriedades são específicas para o tipo de objeto ao qual a interface se refere. Em linguagens que oferecem suporte à automação, essas propriedades definidas pela interface podem ser acessadas usando a notação de ponto, conforme mostrado no exemplo de código a seguir.

Exemplos

O exemplo de código a seguir mostra como acessar a propriedade ADsPath na interface IADs.

Dim oUser as IADs
Dim Path as String
 
' Bind to a specific user object.
set oUser = GetObject(
            "LDAP://CN=Jeff Smith,CN=Users,DC=fabrikam,DC=com")
 
' Get property.
Path = MyUser.ADsPath

Em linguagens não automatizadas, os métodos de acesso à propriedade devem ser usados para acessar as propriedades definidas pela interface. Por exemplo, o método IADsComputer::get_Location é usado para recuperar a propriedade IADsComputer.Location .

O exemplo de código C++ a seguir demonstra como usar o método de acesso à propriedade em C++ para recuperar o ADsPath de um usuário.

HRESULT hr;
IADs *pUser; 
 
// Bind to user object.
hr = ADsGetObject(
     L"LDAP://CN=Jeff Smith,CN=Users,DC=fabrikam,DC=com", 
     IID_IADs, 
     (void**)&pUser);
if(SUCCEEDED(hr)) 
{
    BSTR bstrName;

    // Get property.
    hr = pUser->get_Name(&bstrName);
    if(SUCCEEDED(hr)) 
    {
        wprintf(bstrName);
 
        SysFreeString(bstrName);
    }

    pUser->Release();
}

Para obter mais informações sobre como acessar atributos com ADSI, consulte: