IADs::Get メソッド (iads.h)
IADs::Get メソッドは、プロパティ キャッシュから特定の名前のプロパティを取得します。 プロパティには、単一値または複数値を指定できます。 プロパティ値は、単一値プロパティのバリアント、または複数の値を許可するプロパティのバリアント配列 ( VARIANT またはバイト) として表されます。
構文
HRESULT Get(
[in] BSTR bstrName,
[out] VARIANT *pvProp
);
パラメーター
[in] bstrName
プロパティ名を指定する BSTR が含まれます。
[out] pvProp
プロパティの値を受け取る VARIANT へのポインター。 複数値プロパティの場合、プロパティがバイナリ型でない限り、 pvProp は VARIANT のバリアント配列です。 後者の場合、 pvProp はバイトのバリアント配列です (VT_U1またはVT_ARRAY)。 オブジェクトを参照する プロパティの場合、 pvProp は参照されるオブジェクトへのVT_DISPATCH ポインターです。
戻り値
このメソッドは、標準の戻り値と、次の値をサポートします。
詳細については、「 ADSI エラー コード」を参照してください。
解説
IADs::Get メソッドでは、呼び出し元が単一値と複数値のプロパティ値を異なる方法で処理する必要があります。 したがって、対象のプロパティが単一値または複数値であることがわかっている場合は、 IADs::Get メソッドを使用してプロパティ値を取得します。 次のコード例は、呼び出し元として、このメソッドを呼び出すときに単一値プロパティと複数値プロパティを処理する方法を示しています。
プロパティが初期化されていない場合、このメソッドを呼び出すと、 IADs::GetInfo メソッドへの暗黙的な呼び出しが呼び出されます。 これにより、基になるディレクトリから読み込まれると、キャッシュに設定されていないサポートされているプロパティの値が格納されます。 IADs::Get への後続の呼び出しでは、キャッシュ内のプロパティ値のみが処理されます。 IADs::GetInfo に対する暗黙的および明示的な呼び出しの動作の詳細については、「IADs::GetInfo」を参照してください。
IADs::GetEx を使用して、プロパティ キャッシュからプロパティ値を取得することもできます。 ただし、値は、単一値か複数値かに関係なく、 VARIANTのバリアント配列として返されます。 つまり、ADSI は、返されたプロパティ値を一貫したデータ形式でパッケージ化しようとします。 これにより、呼び出し元として、返されるデータに 1 つまたは複数の値が含まれているかどうかわからない場合に、データ型を検証する手間が省けます。
例
次のコード例では、 IADs::Get を使用してオブジェクトのセキュリティ記述子を取得します。
Dim x As IADs
Dim Desc As IADsSecurityDescriptor
On Error GoTo ErrTest:
Set x = GetObject("LDAP://CN=Administrator,CN=Users,DC=Fabrikam,DC=com")
' Single-valued properties.
Debug.Print "Home Phone Number is: " & x.Get("homePhone")
' Some property values represents other ADSI objects.
' Consult your provider documentation.
Set Desc = x.Get("ntSecurityDescriptor")
' Multi-valued property, assuming that multiple values were
' assigned to the "otherHomePhone" properties. Caller must
' enumerate all the available values.
Debug.Print "Other Phone Numbers are: "
otherNumbers = x.Get("otherHomePhone")
For Each homeNum In otherNumbers
Debug.Print homeNum
Next
Exit Sub
ErrTest:
Debug.Print Hex(Err.Number)
Set x = Nothing
Set Desc = Nothing
次のコード例は、IADs::Get と IADs::P ut を使用してバイナリ データのプロパティ値を操作する方法を示しています。
Dim oTarget As IADs
Dim Octet(5) As Byte
Dim MultiOctet(2) As Variant
Dim i As Integer, j As Integer
On Error GoTo Cleanup
' Set up MultiOctetString.
For i = 0 To 2
For j = 0 To 5
Octet(j) = CByte(i * j)
Next j
MultiOctet(i) = Octet
Next i
' Bind to the object and set MultiOctetString.
Set oTarget=GetObject("LDAP://CN=SomeUser,CN=Users,DC=Fabrikam, DC=COM")
oTarget.Put "multiOctetString", MultiOctet
oTarget.SetInfo
Dim GetOctet As Variant
Dim Temp As Variant
' Read back and print MultiOctetString.
GetOctet = oTarget.Get("multiOctetString")
For i = LBound(GetOctet) To UBound(GetOctet)
Temp = GetOctet(i)
For j = LBound(Temp) To UBound(Temp)
Debug.Print Temp(j)
Next j
Debug.Print "----"
Next i
Exit Sub
Cleanup:
MsgBox("An error has occurred. " & Err.Number)
Set oTarget = Nothing
次のコード例は、 IADs::Get を使用してオブジェクトの省略可能なプロパティの値を取得する方法を示しています。
<HTML>
<head><title></title></head>
<body>
<%
Dim x
On error resume next
Set x = GetObject("WinNT://Fabrikam/Administrator")
Response.Write "Object Name: " & x.Name & "<br>"
Response.Write "Object Class: " & x.Class & "<br>"
' Get optional property values of this object.
Set cls = GetObject(x.Schema)
For Each op In cls.OptionalProperties
v = obj.Get(op)
if err.Number = 0 then
Response.Write "Optional Property: " & op & "=" & v & "<br>"
end if
Next
%>
</body>
</html>
次のコード例では、 IADs::Get を使用して、1 つの値と複数の値を持つ属性を読み取ります。
HRESULT hr;
IADs *pUsr=NULL;
CoInitialize(NULL);
///////////////////////////////
// Bind to a directory object.
///////////////////////////////
hr = ADsGetObject(L"WinNT://Fabrikam/Administrator,user", IID_IADs, (void**) &pUsr );
if ( !SUCCEEDED(hr) ) { return hr; }
//////////////////////////////////
// Get a single-valued attribute.
//////////////////////////////////
VARIANT var;
VariantInit(&var);
hr = pUsr->Get(CComBSTR("FullName"), &var );
if ( SUCCEEDED(hr) )
{
printf("FullName: %S\n", V_BSTR(&var) );
VariantClear(&var);
}
if ( pUsr )
{
pUsr->Release();
}
///////////////////////////////////////////////////////
// Get a multi-valued attribute from a service object.
///////////////////////////////////////////////////////
IADs *pSvc = NULL;
hr = ADsGetObject(L"WinNT://Fabrikam/Account/Browser,service", IID_IADs, (void**) &pSvc );
if ( !SUCCEEDED(hr) )
{
return hr;
}
hr = pSvc->Get(CComBSTR("Dependencies"), &var );
if ( SUCCEEDED(hr) )
{
LONG lstart, lend;
SAFEARRAY *sa = V_ARRAY( &var );
VARIANT varItem;
// Get the lower and upper bound.
hr = SafeArrayGetLBound( sa, 1, &lstart );
hr = SafeArrayGetUBound( sa, 1, &lend );
// Iterate and print the content.
VariantInit(&varItem);
printf("Getting service dependencies using IADs :\n");
for ( long idx=lstart; idx <= lend; idx++ )
{
hr = SafeArrayGetElement( sa, &idx, &varItem );
printf("%S ", V_BSTR(&varItem));
VariantClear(&varItem);
}
printf("\n");
VariantClear(&var);
}
// Cleanup.
if ( pSvc )
{
pSvc->Release();
}
要件
サポートされている最小のクライアント | Windows Vista |
サポートされている最小のサーバー | Windows Server 2008 |
対象プラットフォーム | Windows |
ヘッダー | iads.h |
[DLL] | Activeds.dll |