windows-nt/Source/XPSP1/NT/base/ntsetup/opktools/setupmgr/net/domain.c
2020-09-26 16:20:57 +08:00

547 lines
16 KiB
C

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