스키마 읽기
대부분의 공급자는 Active Directory와 함께 제공되는 스키마를 지원합니다. 스키마에는 클래스 및 특성 정의가 포함됩니다. ADSI는 "Provider://schema"에서 스키마를 추상화합니다. 각 개체는 클래스가 정의된 스키마 위치를 전달합니다. IADs::get_Class 속성 메서드를 사용하여 이 정보를 가져올 수 있습니다.
특정 도메인의 스키마 컨테이너에 바인딩하려면 다음을 수행합니다.
Dim SchemaContainer As Object
Set SchemaContainer = GetObject("LDAP://Fabrikam/Schema")
hr = ADsGetObject(L"LDAP://Fabrikam/Schema", IID_IADsContainer, (void**) &pSchema );
스키마 컨테이너의 정보를 나열하려면 컨테이너에 바인딩하고 다음과 같이 컨테이너의 각 개체를 열거합니다.
Dim prop As Object
Dim obj As Object
Dim SchemaContainer As Object
Dim Class As Object
Set SchemaContainer = GetObject("LDAP://Fabrikam/Schema")
'Show all items in the schema container
For Each obj In SchemaContainer
Debug.Print obj.Name & " (" & obj.Class & ")"
Next
'Show the optional attributes
For Each prop In Class.OptionalProperties
Debug.Print prop
Next
IADsContainer *pSchema=NULL;
HRESULT hr;
CoInitialize(NULL);
hr = ADsGetObject(L"LDAP://Fabrikam/Schema",
IID_IADsContainer, (void**) &pSchema );
if ( !SUCCEEDED(hr) )
{
return hr;
}
// Enumerate schema objects
IEnumVARIANT *pEnum = NULL;
hr = ADsBuildEnumerator( pSchema, &pEnum );
pSchema->Release(); // This is no longer needed, since we have the enumerator already.
if ( SUCCEEDED(hr) )
{
VARIANT var;
ULONG lFetch;
IADs *pChild=NULL;
VariantInit(&var);
while( SUCCEEDED(ADsEnumerateNext( pEnum, 1, &var, &lFetch )) && lFetch == 1 )
{
hr = V_DISPATCH(&var)->QueryInterface( IID_IADs, (void**) &pChild );
if ( SUCCEEDED(hr) )
{
BSTR bstrName;
BSTR bstrClass;
// Get more information on the child classes
pChild->get_Name(&bstrName);
pChild->get_Class(&bstrClass);
printf("%S\t\t(%S)\n", bstrName, bstrClass );
// Clean-up
SysFreeString(bstrName);
SysFreeString(bstrClass);
pChild->Release();
}
VariantClear(&var);
}
}
CoUninitialize();
다음과 같이 개체에 바인딩하고 스키마 위치를 가져올 수도 있습니다.
Dim prop As Object
Dim dom As Object
Dim Class As Object
Set dom = GetObject("LDAP://Fabrikam")
Debug.Print dom.Schema
Set Class = GetObject(dom.Schema)
'Mandatory attributes
For Each prop In Class.MandatoryProperties
Debug.Print prop
Next