//---------------------------------------------------------------------------- // // Copyright (c) 1997-1999 Microsoft Corporation // All rights reserved. // // File Name: // domain.c // // Description: // This file contains the dialog procedure for the domain join // page (IDD_DOMAINJ). // //---------------------------------------------------------------------------- #include "pch.h" #include "resource.h" //---------------------------------------------------------------------------- // // Function: DlgDomainJoinPage // DomainPageChangeAccount // DomainPageChangeWorkgroup // // Purpose: These are the dialog procedure and friends for the domain // join page // //---------------------------------------------------------------------------- //------------------------------------------------------------------------- // // Function: DomainPageChangeAccount // // Purpose: This function exists only to support the Domain Join page. // It is called whenever the user decides to create a computer // account (or not to). This function handles checking // the box and all of the (un)greying activities that must occur. // //------------------------------------------------------------------------- static VOID DomainPageChangeAccount(HWND hwnd, BOOL bCreateAccount) { EnableWindow( GetDlgItem( hwnd, IDC_DOMAINACCT), bCreateAccount ); EnableWindow( GetDlgItem( hwnd, IDC_DOMAINPASSWD), bCreateAccount ); EnableWindow( GetDlgItem( hwnd, IDC_USERACCOUNTLABEL), bCreateAccount ); EnableWindow( GetDlgItem( hwnd, IDC_ACCTNAMELABEL), bCreateAccount ); EnableWindow( GetDlgItem( hwnd, IDC_ACCTPSWDLABEL), bCreateAccount ); EnableWindow( GetDlgItem( hwnd, IDC_CONFIRMLABEL), bCreateAccount ); EnableWindow( GetDlgItem (hwnd, IDC_CONFIRMPASSWORD), bCreateAccount ); CheckDlgButton( hwnd, IDC_CREATEACCT, bCreateAccount ? BST_CHECKED : BST_UNCHECKED ); } //------------------------------------------------------------------------- // // Function: DomainPageChangeWorkgroup // // Purpose: This function exists only to support the Domain Join page. // It is called whenever the user selectes DOMAIN instead of // workgroup and vice versa. This function handles checking // the radio button and all of the (un)greying activities // that must occur. // //------------------------------------------------------------------------- static VOID DomainPageChangeWorkGroup(HWND hwnd, BOOL bWorkGroup, BOOL bCreateAccount) { BOOL bGreyAccountFields = FALSE; // // If workgroup is to be selected do the following: // 1. check the radio button // 2. ungrey the edit box for WORKGROUP // 3. grey the edit box for DOMAIN // 4. grey the check box for CREATE_ACCT // // If workgroup is not selected, then DOMAIN is. In this case, // do the oppositte. // CheckRadioButton(hwnd, IDC_RAD_WORKGROUP, IDC_RAD_DOMAIN, bWorkGroup ? IDC_RAD_WORKGROUP : IDC_RAD_DOMAIN); EnableWindow(GetDlgItem(hwnd, IDC_WORKGROUP), bWorkGroup); EnableWindow(GetDlgItem(hwnd, IDC_DOMAIN), !bWorkGroup); EnableWindow(GetDlgItem(hwnd, IDC_CREATEACCT), !bWorkGroup); // // The edit fields for the admin domain acct and passwd must be greyed // in the following cases: // 1. if workgroup is selected // 2. if domain is selected AND bCreateAccount checkbox is on. // // In other words, grey these always if workgroup is selected. If // workgroup is not selected, grey or un-grey them depending on whether // that bCreateAccount check-box is on or not. // // Note that if !bWorkgroup, then the DOMAIN name has been selected. // if ( bWorkGroup || !bCreateAccount ) bGreyAccountFields = TRUE; DomainPageChangeAccount(hwnd, !bGreyAccountFields); } //---------------------------------------------------------------------------- // // Function: OnDomainJoinInitDialog // // Purpose: // // Arguments: // // Returns: // //---------------------------------------------------------------------------- VOID OnDomainJoinInitDialog( IN HWND hwnd ) { // // Set the text limits on the edit boxes // SendDlgItemMessage( hwnd, IDC_WORKGROUP, EM_LIMITTEXT, (WPARAM) MAX_WORKGROUP_LENGTH, (LPARAM) 0 ); SendDlgItemMessage( hwnd, IDC_DOMAIN, EM_LIMITTEXT, (WPARAM) MAX_DOMAIN_LENGTH, (LPARAM) 0 ); SendDlgItemMessage( hwnd, IDC_DOMAINACCT, EM_LIMITTEXT, (WPARAM) MAX_USERNAME_LENGTH, (LPARAM) 0 ); SendDlgItemMessage( hwnd, IDC_DOMAINPASSWD, EM_LIMITTEXT, (WPARAM) MAX_DOMAIN_PASSWORD_LENGTH, (LPARAM) 0 ); SendDlgItemMessage( hwnd, IDC_CONFIRMPASSWORD, EM_LIMITTEXT, (WPARAM) MAX_DOMAIN_PASSWORD_LENGTH, (LPARAM) 0 ); } //---------------------------------------------------------------------------- // // Function: OnDomainJoinSetActive // // Purpose: // // Arguments: // // Returns: // //---------------------------------------------------------------------------- VOID OnDomainJoinSetActive( IN HWND hwnd ) { // // Make sure the right radio button is checked and controls are greyed out // properly // if( NetSettings.bWorkgroup ) { CheckRadioButton( hwnd, IDC_RAD_WORKGROUP, IDC_RAD_DOMAIN, IDC_RAD_WORKGROUP ); DomainPageChangeWorkGroup( hwnd, TRUE, NetSettings.bCreateAccount ); } else { CheckRadioButton( hwnd, IDC_RAD_WORKGROUP, IDC_RAD_DOMAIN, IDC_RAD_DOMAIN ); DomainPageChangeWorkGroup( hwnd, FALSE, NetSettings.bCreateAccount ); } // // Always re-fill the edit controls with the proper data here because // they might have reset or loaded from a new answer file // SendDlgItemMessage( hwnd, IDC_WORKGROUP, WM_SETTEXT, (WPARAM) MAX_WORKGROUP_LENGTH, (LPARAM) NetSettings.WorkGroupName ); SendDlgItemMessage( hwnd, IDC_DOMAIN, WM_SETTEXT, (WPARAM) MAX_DOMAIN_LENGTH, (LPARAM) NetSettings.DomainName ); SendDlgItemMessage( hwnd, IDC_DOMAINACCT, WM_SETTEXT, (WPARAM) MAX_USERNAME_LENGTH, (LPARAM) NetSettings.DomainAccount ); SendDlgItemMessage( hwnd, IDC_DOMAINPASSWD, WM_SETTEXT, (WPARAM) MAX_DOMAIN_PASSWORD_LENGTH, (LPARAM) NetSettings.DomainPassword ); SendDlgItemMessage( hwnd, IDC_CONFIRMPASSWORD, WM_SETTEXT, (WPARAM) MAX_DOMAIN_PASSWORD_LENGTH, (LPARAM) NetSettings.ConfirmPassword ); WIZ_BUTTONS(hwnd, PSWIZB_BACK | PSWIZB_NEXT ); } //---------------------------------------------------------------------------- // // Function: OnWizNextDomainPage // // Purpose: // // Arguments: IN HWND hwnd - handle to the dialog // // Returns: BOOL // //---------------------------------------------------------------------------- BOOL OnWizNextDomainPage( IN HWND hwnd ) { // // Retrieve all of the settings on this dialog but only // if they are valid // TCHAR szWorkgroupName[MAX_WORKGROUP_LENGTH + 1] = _T(""); TCHAR szDomainName[MAX_DOMAIN_LENGTH + 1] = _T(""); TCHAR szUsername[MAX_USERNAME_LENGTH + 1] = _T(""); TCHAR szDomainPassword[MAX_DOMAIN_PASSWORD_LENGTH + 1] = _T(""); TCHAR szConfirmPassword[MAX_DOMAIN_PASSWORD_LENGTH + 1] = _T(""); BOOL bResult = TRUE; // ISSUE-2002/02/28-stelo- the only error checking done now is to // make sure none of the valid fields are empty, when I do more rigourous // error checking, try to clean up this code if( IsDlgButtonChecked( hwnd, IDC_RAD_WORKGROUP ) ) { // user selected to Join a Workgroup NetSettings.bWorkgroup = TRUE; // // Get the Workgroup string // SendDlgItemMessage( hwnd, IDC_WORKGROUP, WM_GETTEXT, (WPARAM) AS(szWorkgroupName), (LPARAM) szWorkgroupName ); // // see if the string in szPassword is a valid Workgroup name // if( szWorkgroupName[0] != _T('\0') ) { lstrcpyn( NetSettings.WorkGroupName, szWorkgroupName, AS(NetSettings.WorkGroupName) ); } else if( GenSettings.iUnattendMode == UMODE_FULL_UNATTENDED ) { // // only report an error on fully unattended // ReportErrorId( hwnd, MSGTYPE_ERR, IDS_ENTERWORKGROUP ) ; bResult = FALSE; } else { lstrcpyn( NetSettings.WorkGroupName, _T(""), AS(NetSettings.WorkGroupName) ); } } else { // user selected to Join a Domain NetSettings.bWorkgroup = FALSE; // // Get the Domain string // SendDlgItemMessage( hwnd, IDC_DOMAIN, WM_GETTEXT, (WPARAM) AS(szDomainName), (LPARAM) szDomainName ); // // see if the string in szBuffer is a valid Domain name // if( szDomainName[0] != _T('\0') ) { lstrcpyn( NetSettings.DomainName, szDomainName, AS(NetSettings.DomainName) ); } else if( GenSettings.iUnattendMode == UMODE_FULL_UNATTENDED ) { // // only report an error on fully unattended // ReportErrorId( hwnd, MSGTYPE_ERR, IDS_ENTERNTDOMAIN ); bResult = FALSE; } else { lstrcpyn( NetSettings.DomainName, _T(""), AS(NetSettings.DomainName) ); } if( IsDlgButtonChecked( hwnd, IDC_CREATEACCT ) ) { SendDlgItemMessage( hwnd, IDC_DOMAINACCT, WM_GETTEXT, (WPARAM) AS(szUsername), (LPARAM) szUsername ); if( szUsername[0] != _T('\0') ) { lstrcpyn( NetSettings.DomainAccount, szUsername, AS(NetSettings.DomainAccount) ); } else { // don't print this error if we've already printed an error if( bResult ) { ReportErrorId( hwnd, MSGTYPE_ERR, IDS_ENTERUSERNAME ); bResult = FALSE; } } SendDlgItemMessage( hwnd, IDC_DOMAINPASSWD, WM_GETTEXT, (WPARAM) AS(szDomainPassword), (LPARAM) szDomainPassword ); SendDlgItemMessage( hwnd, IDC_CONFIRMPASSWORD, WM_GETTEXT, (WPARAM) AS(szConfirmPassword), (LPARAM) szConfirmPassword ); if( lstrcmp( szDomainPassword, szConfirmPassword ) != 0 ) { // don't print this error if we've already printed an error if( bResult ) { ReportErrorId( hwnd, MSGTYPE_ERR, IDS_PASSWORDS_DONT_MATCH ) ; bResult = FALSE; } } else { // // The only reason why we are saving the confirm password is so that // the confirm edit box is cleared with the other boxes on a Reset // lstrcpyn( NetSettings.DomainPassword, szDomainPassword, AS(NetSettings.DomainPassword) ); lstrcpyn( NetSettings.ConfirmPassword, szConfirmPassword, AS(NetSettings.ConfirmPassword) ); } } } return ( bResult ); } INT_PTR CALLBACK DlgDomainJoinPage( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam) { BOOL bStatus = TRUE; switch (uMsg) { case WM_INITDIALOG: { OnDomainJoinInitDialog( hwnd ); break; } case WM_COMMAND: { int nButtonId=LOWORD(wParam); switch ( nButtonId ) { case IDC_RAD_WORKGROUP: if ( HIWORD(wParam) == BN_CLICKED ) { DomainPageChangeWorkGroup( hwnd, TRUE, NetSettings.bCreateAccount); } break; case IDC_RAD_DOMAIN: if ( HIWORD(wParam) == BN_CLICKED ) { DomainPageChangeWorkGroup( hwnd, FALSE, NetSettings.bCreateAccount); } break; case IDC_CREATEACCT: if ( HIWORD(wParam) == BN_CLICKED ) { NetSettings.bCreateAccount = IsDlgButtonChecked(hwnd, IDC_CREATEACCT); DomainPageChangeAccount( hwnd, NetSettings.bCreateAccount); } break; default: bStatus = FALSE; break; } } break; case WM_NOTIFY: { LPNMHDR pnmh = (LPNMHDR)lParam; switch( pnmh->code ) { case PSN_QUERYCANCEL: WIZ_CANCEL(hwnd); break; case PSN_SETACTIVE: g_App.dwCurrentHelp = IDH_WKGP_DOMN; OnDomainJoinSetActive( hwnd ); break; case PSN_WIZBACK: bStatus = FALSE; break; case PSN_WIZNEXT: if ( !OnWizNextDomainPage( hwnd ) ) WIZ_FAIL(hwnd); else bStatus = FALSE; break; case PSN_HELP: WIZ_HELP(); break; default: bStatus = FALSE; break; } } break; default: bStatus = FALSE; break; } return bStatus; }