//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1999 - 1999 // // File: ntgcond.cpp // //-------------------------------------------------------------------------- // NTGCond.cpp: implementation of the CNTGroupsCondition class. // ////////////////////////////////////////////////////////////////////// #include "precompiled.h" #include "NTGCond.h" #include "textsid.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CNTGroupsCondition::CNTGroupsCondition(IIASAttributeInfo* pCondAttr, ATL::CString& strConditionText, HWND hWndParent, LPTSTR pszServerAddress ) :CCondition(pCondAttr, strConditionText) { m_fParsed = FALSE; // parsing needed m_hWndParent = hWndParent; m_pszServerAddress = pszServerAddress; } CNTGroupsCondition::CNTGroupsCondition(IIASAttributeInfo* pCondAttr, HWND hWndParent, LPTSTR pszServerAddress ) :CCondition(pCondAttr) { m_fParsed = TRUE; // no parsing needed m_hWndParent = hWndParent; m_pszServerAddress = pszServerAddress; } CNTGroupsCondition::~CNTGroupsCondition() { } //+--------------------------------------------------------------------------- // // Function: CNTGroupsCondition::Edit // // Synopsis: call user/group picker to pick NT groups // // Arguments: None // // Returns: HRESULT - // // History: Created Header byao 2/23/98 3:45:35 AM // //+--------------------------------------------------------------------------- HRESULT CNTGroupsCondition::Edit() { TRACE_FUNCTION("CNTGroupsCondition::Edit"); HRESULT hr = S_OK; CComPtr spIASGroupsAttributeEditor; hr = CoCreateInstance( CLSID_IASGroupsAttributeEditor, NULL, CLSCTX_INPROC_SERVER, IID_IIASAttributeEditor, (LPVOID *) &spIASGroupsAttributeEditor ); if( FAILED( hr ) ) { return hr; } if( ! spIASGroupsAttributeEditor ) { return E_FAIL; } CComVariant varGroupsCondition; V_VT(&varGroupsCondition) = VT_BSTR; V_BSTR(&varGroupsCondition) = SysAllocString( (LPCTSTR) m_strConditionText ); // We need to pass the machine name in somehow, so we use the // otherwise unused BSTR * pReserved parameter of this method. CComBSTR bstrServerAddress = m_pszServerAddress; hr = spIASGroupsAttributeEditor->Edit( NULL, &varGroupsCondition, &bstrServerAddress ); if( S_OK == hr ) { // Some casting here to make sure that we do a deep copy. m_strConditionText = (LPCTSTR) V_BSTR(&varGroupsCondition); // Next time we are asked for display text, we want to make sure that we // get call the IASGroupsAttributeEditor again. m_fParsed = FALSE; } if( FAILED( hr ) ) { ShowErrorDialog(NULL, IDS_ERROR_OBJECT_PICKER, NULL, hr ); } return hr; } //+--------------------------------------------------------------------------- // // Function: CNTGroupsCondition::GetDisplayText // // Synopsis: get display text for NT groups // // Arguments: None // // Returns: ATL::CString - display string // // History: Created Header byao 2/23/98 3:47:52 AM // //+--------------------------------------------------------------------------- ATL::CString CNTGroupsCondition::GetDisplayText() { TRACE_FUNCTION("CNTGroupsCondition::GetDisplayText"); ATL::CString strDispText; HRESULT hr = S_OK; if ( !m_fParsed) { CComPtr spIASGroupsAttributeEditor; hr = CoCreateInstance( CLSID_IASGroupsAttributeEditor, NULL, CLSCTX_INPROC_SERVER, IID_IIASAttributeEditor, (LPVOID *) &spIASGroupsAttributeEditor ); if ( FAILED(hr) || ! spIASGroupsAttributeEditor ) { ErrorTrace(ERROR_NAPMMC_NTGCONDITION, "CoCreateInstance of Groups editor failed."); ShowErrorDialog(NULL, IDS_ERROR_PARSE_CONDITION, (LPTSTR)(LPCTSTR)m_strConditionText, hr ); strDispText = _T(""); return strDispText; } CComVariant varGroupsCondition; V_VT(&varGroupsCondition) = VT_BSTR; V_BSTR(&varGroupsCondition) = SysAllocString( (LPCTSTR) m_strConditionText ); CComBSTR bstrDisplay; CComBSTR bstrDummy; // We need to pass the machine name in somehow, so we use the // otherwise unused BSTR * pReserved parameter of this method. CComBSTR bstrServerName = m_pszServerAddress; hr = spIASGroupsAttributeEditor->GetDisplayInfo( NULL, &varGroupsCondition, &bstrDummy, &bstrDisplay, &bstrServerName ); if( SUCCEEDED(hr) ) { m_strDisplayCondText = bstrDisplay; } if ( FAILED(hr) ) { ErrorTrace(ERROR_NAPMMC_NTGCONDITION, "Invalid condition syntax"); ShowErrorDialog(NULL, IDS_ERROR_PARSE_CONDITION, (LPTSTR)(LPCTSTR)m_strConditionText, hr ); strDispText = _T(""); return strDispText; } } CComBSTR bstrName; hr = m_spAttributeInfo->get_AttributeName( &bstrName ); _ASSERTE( SUCCEEDED( hr ) ); strDispText = bstrName; { ATL::CString matches; matches.LoadString(IDS_TEXT_MATCHES); strDispText += matches; } strDispText += _T("\""); strDispText += m_strDisplayCondText; strDispText += _T("\""); DebugTrace(DEBUG_NAPMMC_NTGCONDITION, "GetDisplayText() returning %ws", strDispText); return strDispText; } //+--------------------------------------------------------------------------- // // Function: CNtGroupsCondition::GetConditionText // // Synopsis: Get the condition text for this condition. // We just need to add the NTGroups prefix to it // // Arguments: None // // Returns: WCHAR* - condition text // // History: Created Header byao 2/22/98 11:38:41 PM // //+--------------------------------------------------------------------------- WCHAR* CNTGroupsCondition::GetConditionText() { TRACE_FUNCTION("CNTGroupsCondition::GetConditionText"); WCHAR *pwzCondText; pwzCondText = new WCHAR[m_strConditionText.GetLength()+128]; if (pwzCondText == NULL) { ErrorTrace(ERROR_NAPMMC_NTGCONDITION, "Error creating condition text, err = %x", GetLastError()); ShowErrorDialog(NULL, IDS_ERROR_SDO_ERROR_GET_CONDTEXT ); return NULL; } // now form the condition text wcscpy(pwzCondText, NTG_PREFIX); wcscat(pwzCondText, _T("(\"") ); wcscat(pwzCondText, (LPCTSTR)m_strConditionText); wcscat(pwzCondText, _T("\")")); DebugTrace(DEBUG_NAPMMC_NTGCONDITION, "GetConditionText() returning %ws", pwzCondText); return pwzCondText; }