Доступ к атрибутам с помощью 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 см. в следующем разделе:
- Метод Get
- Метод GetEx
- Метод GetInfo
- Оптимизация с помощью GetInfoEx
- Доступ к атрибутам с помощью интерфейса IDirectoryObject
- Пример кода для чтения атрибутов