197 lines
4.1 KiB
C++
197 lines
4.1 KiB
C++
//----------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Active Directory 2.5 Sample Code
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1996 - 2000
|
|
//
|
|
// File: ADsPropertyList.cpp
|
|
//
|
|
// Contents: IADsPropertyList, IADsPropertyEntry and IADsPropertyValue usage
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "stdafx.h"
|
|
#include "ADQI.h"
|
|
#include "ADsPropertyList.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDlgIADsPropertyList dialog
|
|
|
|
|
|
CDlgIADsPropertyList::CDlgIADsPropertyList(LPUNKNOWN pUnk, CWnd* pParent /*=NULL*/)
|
|
: CDialog(CDlgIADsPropertyList::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CDlgIADsPropertyList)
|
|
m_sAttribute = _T("");
|
|
//}}AFX_DATA_INIT
|
|
|
|
HRESULT hr;
|
|
m_pPropList = NULL;
|
|
hr = pUnk->QueryInterface( IID_IADsPropertyList, (void **) &m_pPropList );
|
|
if ( !SUCCEEDED(hr) )
|
|
{
|
|
AfxMessageBox(_T("Fatal Error! QI for IADsPropertyList failed"));
|
|
return;
|
|
}
|
|
pUnk->Release();
|
|
|
|
|
|
//////////////////////////////////////////
|
|
// Retrieve the data to the cache
|
|
////////////////////////////////////////////
|
|
IADs *pADs=NULL;
|
|
hr = m_pPropList->QueryInterface( IID_IADs, (void**) &pADs );
|
|
if ( SUCCEEDED(hr) )
|
|
{
|
|
hr = pADs->GetInfo();
|
|
pADs->Release();
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
CDlgIADsPropertyList::~CDlgIADsPropertyList()
|
|
{
|
|
if ( m_pPropList )
|
|
{
|
|
m_pPropList->Release();
|
|
}
|
|
|
|
}
|
|
|
|
void CDlgIADsPropertyList::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CDlgIADsPropertyList)
|
|
DDX_Control(pDX, IDC_VALUELIST, m_cValueList);
|
|
DDX_Control(pDX, IDC_ADSTYPE, m_cADsType);
|
|
DDX_Text(pDX, IDC_ATTRIBUTE, m_sAttribute);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CDlgIADsPropertyList, CDialog)
|
|
//{{AFX_MSG_MAP(CDlgIADsPropertyList)
|
|
ON_BN_CLICKED(IDC_GET, OnGet)
|
|
ON_BN_CLICKED(IDC_PURGE, OnPurge)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDlgIADsPropertyList message handlers
|
|
//
|
|
//
|
|
// IADsPropertyList->Next
|
|
// IADsPropertyEnty
|
|
//
|
|
|
|
|
|
BOOL CDlgIADsPropertyList::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
m_cADsType.SetCurSel(ADSTYPE_CASE_IGNORE_STRING-1); //Most attributes are string
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////
|
|
// Demonstrate:
|
|
// IADsPropertyList::GetPropertyItem
|
|
// IADsPropertyEntry
|
|
//
|
|
void CDlgIADsPropertyList::OnGet()
|
|
{
|
|
|
|
HRESULT hr;
|
|
CString s;
|
|
BSTR bstr;
|
|
VARIANT var;
|
|
IDispatch *pDispatch;
|
|
IADsPropertyEntry *pEntry;
|
|
IADsPropertyValue *pValue;
|
|
LONG lADsType;
|
|
|
|
|
|
UpdateData(TRUE);
|
|
m_cValueList.ResetContent();
|
|
|
|
bstr = m_sAttribute.AllocSysString();
|
|
hr = m_pPropList->GetPropertyItem( bstr, m_cADsType.GetCurSel()+1, &var );
|
|
SysFreeString( bstr );
|
|
|
|
|
|
if ( SUCCEEDED(hr) )
|
|
{
|
|
pDispatch = V_DISPATCH( &var );
|
|
hr = pDispatch->QueryInterface( IID_IADsPropertyEntry, (void**) &pEntry );
|
|
VariantClear( &var );
|
|
|
|
// IADsPropertyEntry
|
|
if ( SUCCEEDED(hr) )
|
|
{
|
|
CPtrList dList;
|
|
|
|
// get_Values return array of VT_DISPATH
|
|
hr = pEntry->get_Values( &var );
|
|
|
|
|
|
pEntry->get_ADsType( &lADsType);
|
|
|
|
hr = VariantToPtrList( var, dList );
|
|
|
|
pEntry->Release();
|
|
|
|
////////////////////////////
|
|
// IADsPropertyValue
|
|
/////////////////////////////
|
|
if ( SUCCEEDED(hr) )
|
|
{
|
|
POSITION pos;
|
|
pos = dList.GetHeadPosition();
|
|
while ( pos != NULL )
|
|
{
|
|
pDispatch = (IDispatch*) dList.GetAt(pos);
|
|
hr = pDispatch->QueryInterface( IID_IADsPropertyValue, (void**) &pValue );
|
|
|
|
if ( SUCCEEDED(hr) )
|
|
{
|
|
pValue->AddRef();
|
|
hr = PropertyValueToString( lADsType, pValue, s );
|
|
m_cValueList.AddString( s );
|
|
pValue->Release();
|
|
}
|
|
dList.GetNext(pos);
|
|
}
|
|
|
|
}
|
|
|
|
dList.RemoveAll();
|
|
VariantClear(&var);
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
void CDlgIADsPropertyList::OnPurge()
|
|
{
|
|
HRESULT hr;
|
|
|
|
hr = m_pPropList->PurgePropertyList();
|
|
|
|
if ( !SUCCEEDED(hr) )
|
|
{
|
|
AfxMessageBox(GetErrorMessage(hr));
|
|
}
|
|
}
|