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

251 lines
7 KiB
C++

//////////////////////////////////////////////////////////////////////////////
/*++
Copyright (C) Microsoft Corporation
Module Name: rapwz_profile.cpp
Abstract:
Implementation file for the CNewRAPWiz_EditProfile class.
We implement the class needed to handle the first property page for a Policy node.
Revision History:
mmaguire 12/15/97 - created
byao 1/22/98 Modified for Network Access Policy
--*/
//////////////////////////////////////////////////////////////////////////////
#include "Precompiled.h"
#include "rapwz_profile.h"
#include "NapUtil.h"
#include "PolicyNode.h"
#include "PoliciesNode.h"
#include "rasprof.h"
#include "ChangeNotification.h"
//+---------------------------------------------------------------------------
//
// Function: CNewRAPWiz_EditProfile
//
// Class: CNewRAPWiz_EditProfile
//
// Synopsis: class constructor
//
// Arguments: CPolicyNode *pPolicyNode - policy node for this property page
// CIASAttrList *pAttrList -- attribute list
// TCHAR* pTitle = NULL -
//
// Returns: Nothing
//
// History: Created Header byao 2/16/98 4:31:52 PM
//
//+---------------------------------------------------------------------------
CNewRAPWiz_EditProfile::CNewRAPWiz_EditProfile(
CRapWizardData* pWizData,
LONG_PTR hNotificationHandle,
CIASAttrList *pIASAttrList,
TCHAR* pTitle, BOOL bOwnsNotificationHandle,
bool isWin2k
)
: CIASWizard97Page<CNewRAPWiz_EditProfile, IDS_NEWRAPWIZ_EDITPROFILE_TITLE, IDS_NEWRAPWIZ_EDITPROFILE_SUBTITLE> ( hNotificationHandle, pTitle, bOwnsNotificationHandle ),
m_spWizData(pWizData),
m_isWin2k(isWin2k)
{
TRACE_FUNCTION("CNewRAPWiz_EditProfile::CNewRAPWiz_EditProfile");
m_pIASAttrList = pIASAttrList;
}
//+---------------------------------------------------------------------------
//
// Function: CNewRAPWiz_EditProfile
//
// Class: CNewRAPWiz_EditProfile
//
// Synopsis: class destructor
//
// Returns: Nothing
//
// History: Created Header byao 2/16/98 4:31:52 PM
//
//+---------------------------------------------------------------------------
CNewRAPWiz_EditProfile::~CNewRAPWiz_EditProfile()
{
TRACE_FUNCTION("CNewRAPWiz_EditProfile::~CNewRAPWiz_EditProfile");
}
//////////////////////////////////////////////////////////////////////////////
/*++
CNewRAPWiz_EditProfile::OnInitDialog
--*/
//////////////////////////////////////////////////////////////////////////////
LRESULT CNewRAPWiz_EditProfile::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
TRACE_FUNCTION("CNewRAPWiz_EditProfile::OnInitDialog");
HRESULT hr = S_OK;
BOOL fRet;
CComPtr<IUnknown> spUnknown;
CComPtr<IEnumVARIANT> spEnumVariant;
long ulCount;
ULONG ulCountReceived;
SetModified(FALSE);
return TRUE; // ISSUE: what do we need to be returning here?
}
//////////////////////////////////////////////////////////////////////////////
/*++
CNewRAPWiz_EditProfile::OnWizardFinish
--*/
//////////////////////////////////////////////////////////////////////////////
BOOL CNewRAPWiz_EditProfile::OnWizardNext()
{
// reset the dirty bit
SetModified(FALSE);
return m_spWizData->GetNextPageId(((PROPSHEETPAGE*)(*this))->pszTemplate);
}
//////////////////////////////////////////////////////////////////////////////
/*++
CNewRAPWiz_EditProfile::OnQueryCancel
--*/
//////////////////////////////////////////////////////////////////////////////
BOOL CNewRAPWiz_EditProfile::OnQueryCancel()
{
TRACE_FUNCTION("CNewRAPWiz_EditProfile::OnQueryCancel");
return TRUE;
}
//////////////////////////////////////////////////////////////////////////////
/*++
CNewRAPWiz_EditProfile::OnEditProfile
--*/
//////////////////////////////////////////////////////////////////////////////
//////////
// Signature of the entry point to the profile editing DLL.
//////////
typedef HRESULT (APIENTRY *OPENRAS_IASPROFILEDLG)(
LPCWSTR pszMachineName,
ISdo* pProfile, // profile SDO pointer
ISdoDictionaryOld* pDictionary, // dictionary SDO pointer
BOOL bReadOnly, // if the dlg is for readonly
DWORD dwTabFlags, // what to show
void *pvData // additional data
);
LRESULT CNewRAPWiz_EditProfile::OnEditProfile(UINT uMsg, WPARAM wParam, HWND hwnd, BOOL& bHandled)
{
TRACE_FUNCTION("CNewRAPWiz_EditProfile::OnEditProfile");
OPENRAS_IASPROFILEDLG pfnProfileEditor = NULL;
HRESULT hr = S_OK;
HMODULE hProfileDll = NULL;
hProfileDll = LoadLibrary(_T("rasuser.dll"));
if ( NULL == hProfileDll )
{
hr = HRESULT_FROM_WIN32(GetLastError());
ErrorTrace(ERROR_NAPMMC_POLICYPAGE1, "LoadLibrary() failed, err = %x", hr);
ShowErrorDialog(m_hWnd, IDS_ERROR_CANT_FIND_PROFILEDLL, NULL, hr);
return 0;
}
pfnProfileEditor = (OPENRAS_IASPROFILEDLG) GetProcAddress(hProfileDll, "OpenRAS_IASProfileDlg");
if ( NULL == pfnProfileEditor )
{
hr = HRESULT_FROM_WIN32(GetLastError());
ErrorTrace(ERROR_NAPMMC_POLICYPAGE1, "GetProcAddress() failed, err = %x", hr);
ShowErrorDialog(m_hWnd, IDS_ERROR_CANT_FIND_PROFILEAPI, NULL, hr);
FreeLibrary(hProfileDll);
return 0;
}
// findout if this is extending RRAS or IAS
CPoliciesNode* pPoliciesNode = dynamic_cast<CPoliciesNode*>(m_spWizData->m_pPolicyNode->m_pParentNode);
DWORD dwFlags = RAS_IAS_PROFILEDLG_SHOW_IASTABS;
if(pPoliciesNode != NULL)
{
if(!pPoliciesNode->m_fExtendingIAS)
dwFlags = RAS_IAS_PROFILEDLG_SHOW_RASTABS;
}
if(m_isWin2k)
{
dwFlags |= RAS_IAS_PROFILEDLG_SHOW_WIN2K;
}
//
// now we do have this profile sdo, call the API
//
hr = pfnProfileEditor(
m_spWizData->m_pPolicyNode->m_pszServerAddress,
m_spWizData->m_spProfileSdo,
m_spWizData->m_spDictionarySdo,
FALSE,
dwFlags,
(void *)&(m_pIASAttrList->m_AttrList)
);
FreeLibrary(hProfileDll);
DebugTrace(DEBUG_NAPMMC_POLICYPAGE1, "OpenRAS_IASProfileDlg() returned %x", hr);
if ( FAILED(hr) )
{
return hr;
}
return hr;
}
//////////////////////////////////////////////////////////////////////////////
/*++
CNewRAPWiz_EditProfile::OnSetActive
Return values:
TRUE if the page can be made active
FALSE if the page should be be skipped and the next page should be looked at.
Remarks:
If you want to change which pages are visited based on a user's
choices in a previous page, return FALSE here as appropriate.
--*/
//////////////////////////////////////////////////////////////////////////////
BOOL CNewRAPWiz_EditProfile::OnSetActive()
{
ATLTRACE(_T("# CNewRAPWiz_EditProfile::OnSetActive\n"));
// MSDN docs say you need to use PostMessage here rather than SendMessage.
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK | PSWIZB_NEXT);
return TRUE;
}