home *** CD-ROM | disk | FTP | other *** search
- //----------------------------------------------------------------------------
- //
- // Microsoft Active Directory 2.5 Sample Code
- //
- // Copyright (C) Microsoft Corporation, 1996 - 1999
- //
- // 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));
- }
- }
-