windows-nt/Source/XPSP1/NT/net/ias/mmc/nap/ntgcond.cpp
2020-09-26 16:20:57 +08:00

248 lines
6.4 KiB
C++

//+-------------------------------------------------------------------------
//
// 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<IIASAttributeEditor> 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<IIASAttributeEditor> 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;
}