IADsPropertyList::P utPropertyItem 메서드(iads.h)
IADsPropertyList::P utPropertyItem 메서드는 속성 목록의 항목 값을 업데이트합니다.
구문
HRESULT PutPropertyItem(
[in] VARIANT varData
);
매개 변수
[in] varData
속성 캐시에 넣을 새 속성 값입니다. 수정된 속성 값이 포함된 IADsPropertyEntry를 구현하는 개체에 대한 IDispatch 포인터가 포함되어야 합니다.
반환 값
이 메서드는 S_OK 포함하여 표준 HRESULT 반환 값을 지원합니다. 자세한 내용 및 기타 반환 값은 ADSI 오류 코드를 참조하세요.
설명
IADsPropertyEntry::p ut_ControlCode는 적절한 ADS_PROPERTY_OPERATION_ENUM 값을 사용하여 원하는 수정/추가/삭제 작업으로 설정해야 합니다. PutPropertyItem이 호출된 후 디렉터리 저장소에서 변경 내용을 유지하려면 IADs::SetInfo를 호출해야 합니다. 속성 값은 IADs::SetInfo 메서드가 호출될 때까지 커밋되지 않습니다.
예제
다음 코드 예제에서는 PutPropertyItem을 사용하여 속성 목록에 새 항목을 추가하는 방법을 보여줍니다.
Dim propList As IADsPropertyList
Dim propVal As IADsPropertyValue
Dim propEntry As IADsPropertyEntry
On Error GoTo Cleanup
Set propList = GetObject("LDAP://DC=Fabrikam,DC=com")
Set propVal = New PropertyValue
'--- Property Value-----
propVal.CaseIgnoreString = "Fabrikam, Inc - Seattle, WA"
propVal.ADsType = ADSTYPE_CASE_IGNORE_STRING
'--- Property Entry ----
Set propEntry = New PropertyEntry
propEntry.Name = "adminDescription"
propEntry.Values = Array(propVal)
propEntry.ControlCode = ADS_PROPERTY_UPDATE
propEntry.ADsType = ADSTYPE_CASE_IGNORE_STRING
' --- Property List----
propList.PutPropertyItem (propEntry)
' query the IADs interface on the propList object
Dim IADsObj As IADs
Set IADsObj=propList
' Commit changes of the property list to the directory store.
IADsObj.SetInfo
Cleanup:
If(Err.Number<>0) Then
MsgBox("An error has occurred. " & Err.Number)
End If
Set propList = Nothing
Set propVal = Nothing
Set propEntry = Nothing
Set IADsObj = Nothing
다음 코드 예제에서는 IADsPropertyList::P utPropertyItem을 사용하여 속성 목록에 새 항목을 추가합니다.
// forward declaration of a helper function
HRESULT ADsBuildVarArrayDisp(IDispatch ** ppObjs,
DWORD dwObjs,
VARIANT * pVar
)
int main()
{
HRESULT hr = CoInitialize(NULL);
IADsPropertyList *pList;
hr = ADsOpenObject(L"LDAP://dc=Fabrikam,dc=com",
L"Administrator",
L"",
ADS_SECURE_AUTHENTICATION,
IID_IADsPropertyList,
(void**)&pList);
if(hr!=S_OK)
{
_tprintf(TEXT("An error has occurred."));
return;
}
// create a property value object
IADsPropertyValue *pVal;
hr = CoCreateInstance(CLSID_PropertyValue,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADsPropertyValue,
(void**)&pVal);
if(hr!=S_OK)
{
_tprintf(TEXT("An error has occurred."));
pList->Release();
return;
}
hr = pVal->put_CaseIgnoreString(CComBSTR("Fabrikam, Inc - Seattle, WA"));
hr = pVal->put_ADsType(ADSTYPE_CASE_IGNORE_STRING);
// put the propertyValue object into a variant array for
// assignment to a propertyEntry object
IDispatch *pDisp;
hr = pVal->QueryInterface(IID_IDispatch,(void**)&pDisp);
hr = pVal->Release();
VARIANT vVals;
VariantInit(&vVals);
hr = ADsBuildVarArrayDisp(&pDisp,1,&vVals); //code given below.
pDisp->Release();
if(hr!=S_OK)
{
_tprintf(TEXT("An error has occurred."));
pList->Release();
return;
}
// Create a propertyEntry object
IADsPropertyEntry *pEntry;
hr = CoCreateInstance(CLSID_PropertyEntry,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADsPropertyEntry,
(void**)&pEntry);
hr = pEntry->put_Name(CComBSTR("adminDescription"));
hr = pEntry->put_ControlCode(ADS_PROPERTY_UPDATE);
hr = pEntry->put_ADsType(ADSTYPE_CASE_IGNORE_STRING);
hr = pEntry->put_Values(vVals);
VariantClear(&vVals);
// Convert pEntry to pDisp for use in pList.PutPropertyItem
hr = pEntry->QueryInterface(IID_IDispatch,(void**)&pDisp);
pEntry->Release();
VARIANT vEntry;
VariantInit(&vEntry);
V_DISPATCH(&vEntry)=pDisp;
V_VT(&vEntry)= VT_DISPATCH;
hr = pList->PutPropertyItem(vEntry);
VariantClear(&vEntry);
IADs *pObj;
hr = pList->QueryInterface(IID_IADs,(void**)&pObj);
pObj->SetInfo();
pObj->Release();
pList->Release();
CoUninitialize();
return 0;
}
////////////////
// Helper function to build a variant array of IDispatch objects.
///////////////
HRESULT ADsBuildVarArrayDisp(
IDispatch ** ppObjs,
DWORD dwObjs,
VARIANT * pVar
)
{
VARIANT v;
SAFEARRAYBOUND sabNewArray;
DWORD i;
SAFEARRAY *psa = NULL;
HRESULT hr = E_FAIL;
if((!IDispatch) || (dwObjs<=0))
{
return E_INVALIDARG;
}
sabNewArray.cElements = dwObjs;
sabNewArray.lLbound = 0;
psa = SafeArrayCreate(VT_VARIANT, 1, &sabNewArray);
if (!pVar) {
hr = E_ADS_BAD_PARAMETER;
goto Fail;
}
VariantInit(pVar);
if (!psa) {
goto Fail;
}
for (i = 0; i < dwObjs; i++) {
VariantInit(&v);
V_VT(&v) = VT_DISPATCH;
V_DISPATCH(&v) = *(ppObjs + i);
hr = SafeArrayPutElement(psa,
(long FAR *)&i,
&v
);
if (FAILED(hr)) {
goto Fail;
}
}
V_VT(pVar) = VT_VARIANT | VT_ARRAY;
V_ARRAY(pVar) = psa;
return(ResultFromScode(S_OK));
Fail:
if (psa) {
SafeArrayDestroy(psa);
}
return(E_FAIL);
}
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista |
지원되는 최소 서버 | Windows Server 2008 |
대상 플랫폼 | Windows |
헤더 | iads.h |
DLL | Activeds.dll |