Поделиться через


Доступ к атрибутам с помощью ADSI

Методы IADs.Get и IADs.GetEx используются для получения именованных значений атрибутов. Оба метода возвращают значение VARIANT. Эти методы доступны только для каталогов, поддерживающих схему. При доступе к объектам в каталоге без схемы интерфейсы IADsPropertyEntry и IADsPropertyValue должны использоваться для управления значениями атрибутов.

Методы IADs.Get и IADs.GetEx возвращают вариант VARIANT, который может или не может быть массивом VARIANT в зависимости от количества значений, возвращаемых сервером. Например, если из сервера возвращается только одно значение, независимо от того, является ли он одним или несколькими значениями атрибута, метод возвращает один VARIANT. И наоборот, если возвращаются несколько значений, возвращается массив VARIANT . Если возвращается массив VARIANT, элемент vt структуры VARIANT содержит флаги VT_VARIANT/vbVariant и VT_ARRAY/vbArray.

Методы IADs.Get и IADs.GetEx также могут возвращать COM-объект с помощью интерфейса IDispatch. В этом случае элемент vt структуры VARIANT содержит флаг VT_DISPATCH/vbObject. Чтобы получить доступ к com-объекту, вызовите метод QueryInterface в интерфейсе IDispatch , чтобы получить нужный интерфейс.

Другим типом данных, возвращаемым методом IADs.Get и IADs.GetEx , являются двоичные данные. В этом случае данные предоставляются в виде непрерывного массива байтов, а член vt структуры VARIANT будет содержать флаги VT_UI1/vbByte и VT_ARRAY/vbArray.

Примечание.

Microsoft Visual Basic, scripting Edition поддерживает только массивы VARIANT и VARIANT. Из-за этого VBScript нельзя использовать для чтения двоичных значений свойств.

 

Многие интерфейсы ADSI определяют свойства, относящиеся к интерфейсу. Например, интерфейс IADsComputer определяет свойство Location. Эти определяемые интерфейсом свойства могут содержать данные, идентичные одному из именованных атрибутов, но свойства относятся к типу объекта, на который ссылается интерфейс. На языках, поддерживающих автоматизацию, эти свойства, определяемые интерфейсом, можно получить с помощью нотации точек, как показано в следующем примере кода.

Примеры

В следующем примере кода показано, как получить доступ к свойству ADsPath в интерфейсе 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

На языках, отличных от автоматизации, методы доступа к свойствам должны использоваться для доступа к определяемым интерфейсом свойствам. Например, метод IADsComputer::get_Location используется для получения свойства IADsComputer.Location.

В следующем примере кода C++ показано, как использовать метод доступа к свойствам в C++ для получения ADsPath пользователя.

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();
}

Дополнительные сведения о доступе к атрибутам с помощью ADSI см. в следующем разделе: