887 lines
21 KiB
C++
887 lines
21 KiB
C++
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Copyright (c) 2000-2001 Microsoft Corporation
|
||
|
//
|
||
|
// Module Name:
|
||
|
// CSAccountPage.cpp
|
||
|
//
|
||
|
// Maintained By:
|
||
|
// David Potter (DavidP) 22-MAR-2001
|
||
|
// Geoffrey Pease (GPease) 12-MAY-2000
|
||
|
//
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#include "Pch.h"
|
||
|
#include "CSAccountPage.h"
|
||
|
|
||
|
DEFINE_THISCLASS("CCSAccountPage");
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// CCSAccountPage::CCSAccountPage(
|
||
|
// IServiceProvider * pspIn,
|
||
|
// ECreateAddMode ecamCreateAddModeIn,
|
||
|
// BSTR * pbstrUsernameIn,
|
||
|
// BSTR * pbstrPasswordIn,
|
||
|
// BSTR * pbstrDomainIn,
|
||
|
// BSTR * pbstrClusterNameIn
|
||
|
// )
|
||
|
//
|
||
|
//--
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
CCSAccountPage::CCSAccountPage(
|
||
|
IServiceProvider * pspIn,
|
||
|
ECreateAddMode ecamCreateAddModeIn,
|
||
|
BSTR * pbstrUsernameIn,
|
||
|
BSTR * pbstrPasswordIn,
|
||
|
BSTR * pbstrDomainIn,
|
||
|
BSTR * pbstrClusterNameIn
|
||
|
)
|
||
|
{
|
||
|
TraceFunc( "" );
|
||
|
|
||
|
// m_hwnd
|
||
|
THR( pspIn->TypeSafeQI( IServiceProvider, &m_psp ) );
|
||
|
m_ecamCreateAddMode = ecamCreateAddModeIn;
|
||
|
|
||
|
m_pbstrUsername = pbstrUsernameIn;
|
||
|
m_pbstrPassword = pbstrPasswordIn;
|
||
|
m_pbstrDomain = pbstrDomainIn;
|
||
|
m_pbstrClusterName = pbstrClusterNameIn;
|
||
|
|
||
|
m_cRef = 0;
|
||
|
m_ptgd = NULL;
|
||
|
|
||
|
Assert( m_pbstrUsername != NULL );
|
||
|
Assert( m_pbstrPassword != NULL );
|
||
|
Assert( m_pbstrDomain != NULL );
|
||
|
Assert( m_pbstrClusterName != NULL );
|
||
|
|
||
|
TraceFuncExit();
|
||
|
|
||
|
} //*** CCSAccountPage::CCSAccountPage()
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// CCSAccountPage::~CCSAccountPage( void )
|
||
|
//
|
||
|
//--
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
CCSAccountPage::~CCSAccountPage( void )
|
||
|
{
|
||
|
TraceFunc( "" );
|
||
|
|
||
|
if ( m_psp != NULL )
|
||
|
{
|
||
|
m_psp->Release();
|
||
|
}
|
||
|
|
||
|
if ( m_ptgd != NULL )
|
||
|
{
|
||
|
// Make sure we don't get called anymore.
|
||
|
THR( m_ptgd->SetCallback( NULL ) );
|
||
|
|
||
|
m_ptgd->Release();
|
||
|
}
|
||
|
|
||
|
Assert( m_cRef == 0 );
|
||
|
|
||
|
TraceFuncExit();
|
||
|
|
||
|
} //*** CCSAccountPage::~CCSAccountPage()
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// LRESULT
|
||
|
// CCSAccountPage::OnInitDialog( void )
|
||
|
//
|
||
|
//--
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
LRESULT
|
||
|
CCSAccountPage::OnInitDialog( void )
|
||
|
{
|
||
|
TraceFunc( "" );
|
||
|
|
||
|
BOOL bRet;
|
||
|
HRESULT hr;
|
||
|
|
||
|
BSTR bstrDomain = NULL;
|
||
|
|
||
|
IUnknown * punk = NULL;
|
||
|
ITaskManager * ptm = NULL;
|
||
|
|
||
|
LRESULT lr = FALSE;
|
||
|
|
||
|
//
|
||
|
// (jfranco, bug #377545) Limit user name length to MAX_USERNAME_LENGTH
|
||
|
//
|
||
|
// according to msdn, EM_(SET)LIMITTEXT does not return a value, so ignore what SendDlgItemMessage returns
|
||
|
SendDlgItemMessage( m_hwnd, IDC_CSACCOUNT_E_USERNAME, EM_SETLIMITTEXT, MAX_USERNAME_LENGTH, 0 );
|
||
|
|
||
|
//
|
||
|
// Create the task to get the domains.
|
||
|
//
|
||
|
hr = THR( m_psp->TypeSafeQS( CLSID_TaskManager,
|
||
|
ITaskManager,
|
||
|
&ptm
|
||
|
) );
|
||
|
if ( FAILED( hr ) )
|
||
|
goto Cleanup;
|
||
|
|
||
|
hr = THR( ptm->CreateTask( TASK_GetDomains, &punk ) );
|
||
|
if ( FAILED( hr ) )
|
||
|
goto Cleanup;
|
||
|
|
||
|
// TraceMoveFromMemoryList( punk, g_GlobalMemoryList );
|
||
|
|
||
|
hr = THR( punk->TypeSafeQI( ITaskGetDomains, &m_ptgd ) );
|
||
|
if ( FAILED( hr ) )
|
||
|
goto Cleanup;
|
||
|
|
||
|
hr = THR( m_ptgd->SetCallback( static_cast< ITaskGetDomainsCallback * >( this ) ) );
|
||
|
if ( FAILED( hr ) )
|
||
|
goto Cleanup;
|
||
|
|
||
|
hr = THR( ptm->SubmitTask( m_ptgd ) );
|
||
|
if ( FAILED( hr ) )
|
||
|
goto Cleanup;
|
||
|
|
||
|
//
|
||
|
// Default to the script supplied information.
|
||
|
//
|
||
|
|
||
|
SetDlgItemText( m_hwnd, IDC_CSACCOUNT_E_USERNAME, *m_pbstrUsername );
|
||
|
SetDlgItemText( m_hwnd, IDC_CSACCOUNT_E_PASSWORD, *m_pbstrPassword );
|
||
|
SetDlgItemText( m_hwnd, IDC_CSACCOUNT_CB_DOMAIN, *m_pbstrDomain );
|
||
|
|
||
|
//
|
||
|
// Get the domain of the current computer.
|
||
|
//
|
||
|
|
||
|
hr = THR( HrGetComputerName( ComputerNameDnsDomain, &bstrDomain ) );
|
||
|
if ( FAILED( hr ) )
|
||
|
goto Cleanup;
|
||
|
|
||
|
SetDlgItemText( m_hwnd, IDC_CSACCOUNT_CB_DOMAIN, bstrDomain );
|
||
|
|
||
|
Cleanup:
|
||
|
THR( HrUpdateWizardButtons( FALSE ) );
|
||
|
|
||
|
if ( punk != NULL )
|
||
|
{
|
||
|
punk->Release();
|
||
|
}
|
||
|
|
||
|
if ( ptm != NULL )
|
||
|
{
|
||
|
ptm->Release();
|
||
|
}
|
||
|
|
||
|
TraceSysFreeString( bstrDomain );
|
||
|
|
||
|
RETURN( lr );
|
||
|
|
||
|
} //*** CCSAccountPage::OnInitDialog()
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// LRESULT
|
||
|
// CCSAccountPage::OnCommand(
|
||
|
// UINT idNotificationIn,
|
||
|
// UINT idControlIn,
|
||
|
// HWND hwndSenderIn
|
||
|
// )
|
||
|
//
|
||
|
//--
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
LRESULT
|
||
|
CCSAccountPage::OnCommand(
|
||
|
UINT idNotificationIn,
|
||
|
UINT idControlIn,
|
||
|
HWND hwndSenderIn
|
||
|
)
|
||
|
{
|
||
|
TraceFunc( "" );
|
||
|
|
||
|
LRESULT lr = FALSE;
|
||
|
|
||
|
switch ( idControlIn )
|
||
|
{
|
||
|
case IDC_CSACCOUNT_E_PASSWORD:
|
||
|
case IDC_CSACCOUNT_E_USERNAME:
|
||
|
if ( idNotificationIn == EN_CHANGE )
|
||
|
{
|
||
|
THR( HrUpdateWizardButtons( FALSE ) );
|
||
|
lr = TRUE;
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case IDC_CSACCOUNT_CB_DOMAIN:
|
||
|
if ( idNotificationIn == CBN_EDITCHANGE )
|
||
|
{
|
||
|
THR( HrUpdateWizardButtons( FALSE ) );
|
||
|
lr = TRUE;
|
||
|
}
|
||
|
else if ( idNotificationIn == CBN_SELCHANGE )
|
||
|
{
|
||
|
THR( HrUpdateWizardButtons( TRUE ) );
|
||
|
lr = TRUE;
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
RETURN( lr );
|
||
|
|
||
|
} //*** CCSAccountPage::OnCommand()
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// HRESULT
|
||
|
// CCSAccountPage::HrUpdateWizardButtons(
|
||
|
// BOOL fIgnoreComboxBoxIn
|
||
|
// )
|
||
|
//
|
||
|
//--
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
HRESULT
|
||
|
CCSAccountPage::HrUpdateWizardButtons(
|
||
|
BOOL fIgnoreComboxBoxIn
|
||
|
)
|
||
|
{
|
||
|
TraceFunc( "" );
|
||
|
|
||
|
DWORD dwLen;
|
||
|
|
||
|
HRESULT hr = S_OK;
|
||
|
DWORD dwFlags = PSWIZB_BACK | PSWIZB_NEXT;
|
||
|
|
||
|
dwLen = GetWindowTextLength( GetDlgItem( m_hwnd, IDC_CSACCOUNT_E_USERNAME ) );
|
||
|
if ( dwLen == 0 )
|
||
|
{
|
||
|
dwFlags &= ~PSWIZB_NEXT;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// It is valid to have a blank password. No need to check it.
|
||
|
//
|
||
|
|
||
|
if ( !fIgnoreComboxBoxIn )
|
||
|
{
|
||
|
LRESULT lr;
|
||
|
|
||
|
dwLen = GetWindowTextLength( GetDlgItem( m_hwnd, IDC_CSACCOUNT_CB_DOMAIN ) );
|
||
|
lr = ComboBox_GetCurSel( GetDlgItem( m_hwnd, IDC_CSACCOUNT_CB_DOMAIN ) );
|
||
|
if ( lr == CB_ERR )
|
||
|
{
|
||
|
if ( dwLen == 0 )
|
||
|
{
|
||
|
dwFlags &= ~PSWIZB_NEXT;
|
||
|
}
|
||
|
}
|
||
|
else if ( dwLen == 0 )
|
||
|
{
|
||
|
dwFlags &= ~PSWIZB_NEXT;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
PropSheet_SetWizButtons( GetParent( m_hwnd ), dwFlags );
|
||
|
|
||
|
HRETURN( hr );
|
||
|
|
||
|
} //*** CCSAccountPage::HrUpdateWizardButtons()
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// LRESULT
|
||
|
// CCSAccountPage::OnNotifyQueryCancel( void )
|
||
|
//
|
||
|
//--
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
LRESULT
|
||
|
CCSAccountPage::OnNotifyQueryCancel( void )
|
||
|
{
|
||
|
TraceFunc( "" );
|
||
|
|
||
|
LRESULT lr = TRUE;
|
||
|
|
||
|
int iRet;
|
||
|
|
||
|
iRet = MessageBoxFromStrings( m_hwnd,
|
||
|
IDS_QUERY_CANCEL_TITLE,
|
||
|
IDS_QUERY_CANCEL_TEXT,
|
||
|
MB_YESNO
|
||
|
);
|
||
|
|
||
|
if ( iRet == IDNO )
|
||
|
{
|
||
|
SetWindowLongPtr( m_hwnd, DWLP_MSGRESULT, -1 );
|
||
|
}
|
||
|
|
||
|
RETURN( lr );
|
||
|
|
||
|
} //*** CCSAccountPage::OnNotifyQueryCancel()
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// LRESULT
|
||
|
// CCSAccountPage::OnNotifySetActive( void )
|
||
|
//
|
||
|
//--
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
LRESULT
|
||
|
CCSAccountPage::OnNotifySetActive( void )
|
||
|
{
|
||
|
TraceFunc( "" );
|
||
|
|
||
|
HRESULT hr;
|
||
|
|
||
|
OBJECTCOOKIE cookieDummy;
|
||
|
|
||
|
LRESULT lr = TRUE;
|
||
|
|
||
|
IUnknown * punk = NULL;
|
||
|
IClusCfgClusterInfo * pccci = NULL;
|
||
|
IClusCfgCredentials * piccc = NULL;
|
||
|
IObjectManager * pom = NULL;
|
||
|
|
||
|
BSTR bstrUsername = NULL;
|
||
|
BSTR bstrPassword = NULL;
|
||
|
BSTR bstrDomain = NULL;
|
||
|
|
||
|
if ( m_ecamCreateAddMode == camADDING )
|
||
|
{
|
||
|
Assert( *m_pbstrClusterName != NULL );
|
||
|
|
||
|
//
|
||
|
// See if the cluster configuration information has something
|
||
|
// different.
|
||
|
//
|
||
|
|
||
|
hr = THR( m_psp->TypeSafeQS( CLSID_ObjectManager,
|
||
|
IObjectManager,
|
||
|
&pom
|
||
|
) );
|
||
|
if ( FAILED( hr ) )
|
||
|
goto Cleanup;
|
||
|
|
||
|
hr = THR( pom->FindObject( CLSID_ClusterConfigurationType,
|
||
|
NULL,
|
||
|
*m_pbstrClusterName,
|
||
|
DFGUID_ClusterConfigurationInfo,
|
||
|
&cookieDummy,
|
||
|
&punk
|
||
|
) );
|
||
|
if ( FAILED( hr ) )
|
||
|
goto Cleanup;
|
||
|
|
||
|
hr = THR( punk->TypeSafeQI( IClusCfgClusterInfo, &pccci ) );
|
||
|
if ( FAILED( hr ) )
|
||
|
goto Cleanup;
|
||
|
|
||
|
hr = THR( pccci->GetClusterServiceAccountCredentials( &piccc ) );
|
||
|
if ( FAILED( hr ) )
|
||
|
goto Cleanup;
|
||
|
|
||
|
hr = THR( piccc->GetCredentials( &bstrUsername,
|
||
|
&bstrDomain,
|
||
|
&bstrPassword
|
||
|
) );
|
||
|
if ( FAILED( hr ) )
|
||
|
goto Cleanup;
|
||
|
|
||
|
SetDlgItemText( m_hwnd, IDC_CSACCOUNT_E_USERNAME, bstrUsername );
|
||
|
SetDlgItemText( m_hwnd, IDC_CSACCOUNT_CB_DOMAIN, bstrDomain );
|
||
|
|
||
|
//
|
||
|
// Only update the password if we actually received something from GetCredentials().
|
||
|
// When we first enter this page, this will not be the case and we would nuke the
|
||
|
// scripted password.
|
||
|
//
|
||
|
if ( ( bstrPassword != NULL )
|
||
|
&& ( *bstrPassword != L'\0' ) )
|
||
|
SetDlgItemText( m_hwnd, IDC_CSACCOUNT_E_PASSWORD, bstrPassword );
|
||
|
|
||
|
//
|
||
|
// Disable the username and domain windows.
|
||
|
//
|
||
|
|
||
|
EnableWindow( GetDlgItem( m_hwnd, IDC_CSACCOUNT_E_USERNAME ), FALSE );
|
||
|
EnableWindow( GetDlgItem( m_hwnd, IDC_CSACCOUNT_CB_DOMAIN ), FALSE );
|
||
|
}
|
||
|
|
||
|
Cleanup:
|
||
|
THR( HrUpdateWizardButtons( FALSE ) );
|
||
|
|
||
|
if ( punk != NULL )
|
||
|
{
|
||
|
punk->Release();
|
||
|
}
|
||
|
|
||
|
if ( pom != NULL )
|
||
|
{
|
||
|
pom->Release();
|
||
|
}
|
||
|
|
||
|
if ( piccc != NULL )
|
||
|
{
|
||
|
piccc->Release();
|
||
|
}
|
||
|
|
||
|
if ( pccci != NULL )
|
||
|
{
|
||
|
pccci->Release();
|
||
|
}
|
||
|
|
||
|
TraceSysFreeString( bstrUsername );
|
||
|
TraceSysFreeString( bstrPassword );
|
||
|
TraceSysFreeString( bstrDomain );
|
||
|
|
||
|
RETURN( lr );
|
||
|
|
||
|
} //*** CCSAccountPage::OnNotifySetActive()
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// LRESULT
|
||
|
// CCSAccountPage::OnNotifyWizNext( void )
|
||
|
//
|
||
|
//--
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
LRESULT
|
||
|
CCSAccountPage::OnNotifyWizNext( void )
|
||
|
{
|
||
|
TraceFunc( "" );
|
||
|
|
||
|
HRESULT hr;
|
||
|
HWND hwnd;
|
||
|
DWORD dwLen;
|
||
|
|
||
|
BSTR bstrUsername = NULL;
|
||
|
BSTR bstrPassword = NULL;
|
||
|
BSTR bstrDomain = NULL;
|
||
|
|
||
|
OBJECTCOOKIE cookieDummy;
|
||
|
|
||
|
LRESULT lr = TRUE;
|
||
|
|
||
|
IUnknown * punk = NULL;
|
||
|
IObjectManager * pom = NULL;
|
||
|
IClusCfgClusterInfo * pccci = NULL;
|
||
|
IClusCfgCredentials * piccc = NULL;
|
||
|
|
||
|
//
|
||
|
// Get the username from the UI.
|
||
|
//
|
||
|
|
||
|
hwnd = GetDlgItem( m_hwnd, IDC_CSACCOUNT_E_USERNAME );
|
||
|
Assert( hwnd != NULL );
|
||
|
|
||
|
dwLen = GetWindowTextLength( hwnd );
|
||
|
Assert( dwLen != 0 );
|
||
|
dwLen ++;
|
||
|
|
||
|
bstrUsername = TraceSysAllocStringByteLen( NULL, sizeof(WCHAR) * ( dwLen + 1 ) );
|
||
|
if ( bstrUsername == NULL )
|
||
|
goto OutOfMemory;
|
||
|
|
||
|
GetWindowText( hwnd, bstrUsername, dwLen );
|
||
|
|
||
|
//
|
||
|
// Get the password from the UI.
|
||
|
//
|
||
|
|
||
|
hwnd = GetDlgItem( m_hwnd, IDC_CSACCOUNT_E_PASSWORD );
|
||
|
Assert( hwnd != NULL );
|
||
|
|
||
|
dwLen = GetWindowTextLength( hwnd );
|
||
|
dwLen ++;
|
||
|
|
||
|
bstrPassword = TraceSysAllocStringByteLen( NULL, sizeof(WCHAR) * ( dwLen + 1 ) );
|
||
|
if ( bstrPassword == NULL )
|
||
|
goto OutOfMemory;
|
||
|
|
||
|
GetWindowText( hwnd, bstrPassword, dwLen );
|
||
|
|
||
|
//
|
||
|
// Get the domain from the UI.
|
||
|
//
|
||
|
|
||
|
hwnd = GetDlgItem( m_hwnd, IDC_CSACCOUNT_CB_DOMAIN );
|
||
|
Assert( hwnd != NULL );
|
||
|
|
||
|
dwLen = GetWindowTextLength( hwnd );
|
||
|
Assert( dwLen != 0 );
|
||
|
dwLen ++;
|
||
|
|
||
|
bstrDomain = TraceSysAllocStringByteLen( NULL, sizeof(WCHAR) * ( dwLen + 1 ) );
|
||
|
if ( bstrDomain == NULL )
|
||
|
goto OutOfMemory;
|
||
|
|
||
|
GetWindowText( hwnd, bstrDomain, dwLen );
|
||
|
|
||
|
//
|
||
|
// Release the old strings (if any).
|
||
|
//
|
||
|
|
||
|
TraceSysFreeString( *m_pbstrUsername );
|
||
|
TraceSysFreeString( *m_pbstrPassword );
|
||
|
TraceSysFreeString( *m_pbstrDomain );
|
||
|
|
||
|
//
|
||
|
// Give ownership away.
|
||
|
//
|
||
|
|
||
|
*m_pbstrUsername = bstrUsername;
|
||
|
*m_pbstrPassword = bstrPassword;
|
||
|
*m_pbstrDomain = bstrDomain;
|
||
|
|
||
|
bstrUsername = NULL;
|
||
|
bstrPassword = NULL;
|
||
|
bstrDomain = NULL;
|
||
|
|
||
|
//
|
||
|
// Grab the object manager.
|
||
|
//
|
||
|
|
||
|
hr = THR( m_psp->TypeSafeQS( CLSID_ObjectManager,
|
||
|
IObjectManager,
|
||
|
&pom
|
||
|
) );
|
||
|
if ( FAILED( hr ) )
|
||
|
goto Error;
|
||
|
|
||
|
//
|
||
|
// Get the cluster configuration info.
|
||
|
//
|
||
|
|
||
|
hr = THR( pom->FindObject( CLSID_ClusterConfigurationType,
|
||
|
NULL,
|
||
|
*m_pbstrClusterName,
|
||
|
DFGUID_ClusterConfigurationInfo,
|
||
|
&cookieDummy,
|
||
|
&punk
|
||
|
) );
|
||
|
if ( FAILED( hr ) )
|
||
|
goto Error;
|
||
|
|
||
|
hr = THR( punk->TypeSafeQI( IClusCfgClusterInfo, &pccci ) );
|
||
|
if ( FAILED( hr ) )
|
||
|
goto Cleanup;
|
||
|
|
||
|
//
|
||
|
// Set the cluster service account credentials...
|
||
|
//
|
||
|
|
||
|
hr = THR( pccci->GetClusterServiceAccountCredentials( &piccc ) );
|
||
|
if ( FAILED( hr ) )
|
||
|
goto Error;
|
||
|
|
||
|
hr = THR( piccc->SetCredentials( *m_pbstrUsername, *m_pbstrDomain, *m_pbstrPassword ) );
|
||
|
if ( FAILED( hr ) )
|
||
|
goto Error;
|
||
|
|
||
|
Cleanup:
|
||
|
if ( punk != NULL )
|
||
|
{
|
||
|
punk->Release();
|
||
|
}
|
||
|
|
||
|
TraceSysFreeString( bstrUsername );
|
||
|
TraceSysFreeString( bstrPassword );
|
||
|
TraceSysFreeString( bstrDomain );
|
||
|
|
||
|
if ( piccc != NULL )
|
||
|
{
|
||
|
piccc->Release();
|
||
|
}
|
||
|
|
||
|
if ( pccci != NULL )
|
||
|
{
|
||
|
pccci->Release();
|
||
|
}
|
||
|
|
||
|
if ( pom != NULL )
|
||
|
{
|
||
|
pom->Release();
|
||
|
}
|
||
|
|
||
|
RETURN( lr );
|
||
|
|
||
|
Error:
|
||
|
SetWindowLongPtr( m_hwnd, DWLP_MSGRESULT, -1 );
|
||
|
goto Cleanup;
|
||
|
|
||
|
OutOfMemory:
|
||
|
goto Error;
|
||
|
|
||
|
} //*** CCSAccountPage::OnNotifyWizNext()
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// LRESULT
|
||
|
// CCSAccountPage::OnNotify(
|
||
|
// WPARAM idCtrlIn,
|
||
|
// LPNMHDR pnmhdrIn
|
||
|
// )
|
||
|
//
|
||
|
//--
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
LRESULT
|
||
|
CCSAccountPage::OnNotify(
|
||
|
WPARAM idCtrlIn,
|
||
|
LPNMHDR pnmhdrIn
|
||
|
)
|
||
|
{
|
||
|
TraceFunc( "" );
|
||
|
|
||
|
LRESULT lr = TRUE;
|
||
|
|
||
|
SetWindowLongPtr( m_hwnd, DWLP_MSGRESULT, 0 );
|
||
|
|
||
|
switch( pnmhdrIn->code )
|
||
|
{
|
||
|
case PSN_SETACTIVE:
|
||
|
lr = OnNotifySetActive();
|
||
|
break;
|
||
|
|
||
|
case PSN_WIZNEXT:
|
||
|
lr = OnNotifyWizNext();
|
||
|
break;
|
||
|
|
||
|
case PSN_QUERYCANCEL:
|
||
|
lr = OnNotifyQueryCancel();
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
RETURN( lr );
|
||
|
|
||
|
} //*** CCSAccountPage::OnNotify()
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// INT_PTR
|
||
|
// CALLBACK
|
||
|
// CCSAccountPage::S_DlgProc(
|
||
|
// HWND hDlgIn,
|
||
|
// UINT MsgIn,
|
||
|
// WPARAM wParam,
|
||
|
// LPARAM lParam
|
||
|
// )
|
||
|
//
|
||
|
//--
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
INT_PTR
|
||
|
CALLBACK
|
||
|
CCSAccountPage::S_DlgProc(
|
||
|
HWND hDlgIn,
|
||
|
UINT MsgIn,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam
|
||
|
)
|
||
|
{
|
||
|
// Don't do TraceFunc because every mouse movement
|
||
|
// will cause this function to be called.
|
||
|
|
||
|
WndMsg( hDlgIn, MsgIn, wParam, lParam );
|
||
|
|
||
|
LRESULT lr = FALSE;
|
||
|
|
||
|
CCSAccountPage * pPage = reinterpret_cast< CCSAccountPage *> ( GetWindowLongPtr( hDlgIn, GWLP_USERDATA ) );
|
||
|
|
||
|
if ( MsgIn == WM_INITDIALOG )
|
||
|
{
|
||
|
PROPSHEETPAGE * ppage = reinterpret_cast< PROPSHEETPAGE * >( lParam );
|
||
|
SetWindowLongPtr( hDlgIn, GWLP_USERDATA, (LPARAM) ppage->lParam );
|
||
|
pPage = reinterpret_cast< CCSAccountPage * >( ppage->lParam );
|
||
|
pPage->m_hwnd = hDlgIn;
|
||
|
}
|
||
|
|
||
|
if ( pPage != NULL )
|
||
|
{
|
||
|
Assert( hDlgIn == pPage->m_hwnd );
|
||
|
|
||
|
switch( MsgIn )
|
||
|
{
|
||
|
case WM_INITDIALOG:
|
||
|
lr = pPage->OnInitDialog();
|
||
|
break;
|
||
|
|
||
|
case WM_NOTIFY:
|
||
|
lr = pPage->OnNotify( wParam, reinterpret_cast< LPNMHDR >( lParam ) );
|
||
|
break;
|
||
|
|
||
|
case WM_COMMAND:
|
||
|
lr= pPage->OnCommand( HIWORD( wParam ), LOWORD( wParam ), (HWND) lParam );
|
||
|
break;
|
||
|
|
||
|
// no default clause needed
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return lr;
|
||
|
|
||
|
} //*** CCSAccountPage::S_DlgProc()
|
||
|
|
||
|
|
||
|
|
||
|
// ************************************************************************
|
||
|
//
|
||
|
// IUnknown
|
||
|
//
|
||
|
// ************************************************************************
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// STDMETHODIMP
|
||
|
// CCSAccountPage::QueryInterface(
|
||
|
// REFIID riidIn,
|
||
|
// LPVOID * ppvOut
|
||
|
// )
|
||
|
//
|
||
|
//--
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
STDMETHODIMP
|
||
|
CCSAccountPage::QueryInterface(
|
||
|
REFIID riidIn,
|
||
|
LPVOID * ppvOut
|
||
|
)
|
||
|
{
|
||
|
TraceQIFunc( riidIn, ppvOut );
|
||
|
|
||
|
HRESULT hr = E_NOINTERFACE;
|
||
|
|
||
|
if ( IsEqualIID( riidIn, IID_IUnknown ) )
|
||
|
{
|
||
|
*ppvOut = static_cast< ITaskGetDomainsCallback * >( this );
|
||
|
hr = S_OK;
|
||
|
} // if: IUnknown
|
||
|
else if ( IsEqualIID( riidIn, IID_ITaskGetDomainsCallback ) )
|
||
|
{
|
||
|
*ppvOut = TraceInterface( __THISCLASS__, ITaskGetDomainsCallback, this, 0 );
|
||
|
hr = S_OK;
|
||
|
} // else if: ITaskGetDomainsCallback
|
||
|
|
||
|
if ( SUCCEEDED( hr ) )
|
||
|
{
|
||
|
((IUnknown*) *ppvOut)->AddRef();
|
||
|
} // if: success
|
||
|
|
||
|
QIRETURN_IGNORESTDMARSHALLING( hr, riidIn );
|
||
|
|
||
|
} //*** CCSAccountPage::QueryInterface()
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// STDMETHODIMP_( ULONG )
|
||
|
// CCSAccountPage::AddRef( void )
|
||
|
//
|
||
|
//--
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
STDMETHODIMP_( ULONG )
|
||
|
CCSAccountPage::AddRef( void )
|
||
|
{
|
||
|
TraceFunc( "[IUnknown]" );
|
||
|
|
||
|
InterlockedIncrement( &m_cRef );
|
||
|
|
||
|
RETURN( m_cRef );
|
||
|
|
||
|
} //*** CCSAccountPage::AddRef()
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// STDMETHODIMP_( ULONG )
|
||
|
// CCSAccountPage::Release( void )
|
||
|
//
|
||
|
//--
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
STDMETHODIMP_( ULONG )
|
||
|
CCSAccountPage::Release( void )
|
||
|
{
|
||
|
TraceFunc( "[IUnknown]" );
|
||
|
|
||
|
InterlockedDecrement( &m_cRef );
|
||
|
|
||
|
if ( m_cRef )
|
||
|
RETURN( m_cRef );
|
||
|
|
||
|
// TraceDo( delete this );
|
||
|
|
||
|
RETURN(0);
|
||
|
|
||
|
} //*** CCSAccountPage::Release()
|
||
|
|
||
|
|
||
|
//****************************************************************************
|
||
|
//
|
||
|
// ITaskGetDomainsCallback
|
||
|
//
|
||
|
//****************************************************************************
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// STDMETHODIMP
|
||
|
// CCSAccountPage::ReceiveDomainResult(
|
||
|
// HRESULT hrIn
|
||
|
// )
|
||
|
//
|
||
|
//--
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
STDMETHODIMP
|
||
|
CCSAccountPage::ReceiveDomainResult(
|
||
|
HRESULT hrIn
|
||
|
)
|
||
|
{
|
||
|
TraceFunc( "[ITaskGetDomainsCallback]" );
|
||
|
|
||
|
HRESULT hr;
|
||
|
|
||
|
hr = THR( m_ptgd->SetCallback( NULL ) );
|
||
|
|
||
|
HRETURN( hr );
|
||
|
|
||
|
} //*** CCSAccountPage::ReceiveResult()
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// STDMETHODIMP
|
||
|
// CCSAccountPage::ReceiveDomainName(
|
||
|
// LPCWSTR pcszDomainIn
|
||
|
// )
|
||
|
//
|
||
|
//--
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
STDMETHODIMP
|
||
|
CCSAccountPage::ReceiveDomainName(
|
||
|
LPCWSTR pcszDomainIn
|
||
|
)
|
||
|
{
|
||
|
TraceFunc( "[ITaskGetDomainsCallback]" );
|
||
|
|
||
|
HRESULT hr = S_OK;
|
||
|
|
||
|
ComboBox_AddString( GetDlgItem( m_hwnd, IDC_CSACCOUNT_CB_DOMAIN ), pcszDomainIn );
|
||
|
|
||
|
HRETURN( hr );
|
||
|
|
||
|
} //*** CCSAccountPage::ReceiveName()
|