Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1266 lines
40 KiB

/*
+-------------------------------------------------------------------------+
| User Options Dialog |
+-------------------------------------------------------------------------+
| (c) Copyright 1993-1994 |
| Microsoft Corp. |
| All rights reserved |
| |
| Program : [UserDlg.c] |
| Programmer : Arthur Hanson |
| Original Program Date : [Feb 15, 1993] |
| Last Update : [Jun 16, 1994] |
| |
| Version: 1.00 |
| |
| Description: |
| |
| History: |
| arth Jun 16, 1994 1.00 Original Version. |
| |
+-------------------------------------------------------------------------+
*/
#include "globals.h"
#include <limits.h>
#include "nwconv.h"
#include "convapi.h"
#include "userdlg.h"
#include "transfer.h"
#include "ntnetapi.h"
#include "map.h"
#define togmap 1
// Utility Macros for Advanced >> button
#define SetStyleOn(hWnd, Style) SetWindowLong(hWnd, GWL_STYLE, Style | GetWindowLong(hWnd, GWL_STYLE));
#define SetStyleOff(hWnd, Style) SetWindowLong(hWnd, GWL_STYLE, ~Style & GetWindowLong(hWnd, GWL_STYLE));
static CONVERT_OPTIONS cvoDefault;
static CONVERT_OPTIONS *CurrentConvertOptions;
static LPTSTR SourceServ;
static LPTSTR DestServ;
static SOURCE_SERVER_BUFFER *SServ;
static DEST_SERVER_BUFFER *DServ;
static BOOL FPNWChk;
static short TabSelection;
/*+-------------------------------------------------------------------------+
| UserOptionsDefaultsSet()
|
+-------------------------------------------------------------------------+*/
void UserOptionsDefaultsSet(void *cvto) {
memcpy((void *) &cvoDefault, cvto, sizeof(CONVERT_OPTIONS));
} // UserOptionsDefaultsSet
/*+-------------------------------------------------------------------------+
| UserOptionsDefaultsReset()
|
+-------------------------------------------------------------------------+*/
void UserOptionsDefaultsReset() {
memset(&cvoDefault, 0, sizeof(CONVERT_OPTIONS));
cvoDefault.TransferUserInfo = TRUE;
cvoDefault.ForcePasswordChange = TRUE;
cvoDefault.SupervisorDefaults = TRUE;
cvoDefault.AdminAccounts = FALSE;
cvoDefault.NetWareInfo = FALSE;
cvoDefault.GroupNameOption = 1;
} // UserOptionsDefaultsReset
/*+-------------------------------------------------------------------------+
| UserOptionsInit()
|
+-------------------------------------------------------------------------+*/
void UserOptionsInit(void **lpcvto) {
CONVERT_OPTIONS *cvto;
cvto = (CONVERT_OPTIONS *) *lpcvto;
// if we need to allocate space, do so
if (cvto == NULL)
cvto = AllocMemory(sizeof(CONVERT_OPTIONS));
// make sure it was allocated
if (cvto == NULL)
return;
memcpy(cvto, (void *) &cvoDefault, sizeof(CONVERT_OPTIONS));
*lpcvto = (void *) cvto;
} // UserOptionsInit
/*+-------------------------------------------------------------------------+
| UserOptionsLoad()
|
+-------------------------------------------------------------------------+*/
void UserOptionsLoad(HANDLE hFile, void **lpcvto) {
CONVERT_OPTIONS *cvto;
DWORD wrote;
cvto = (CONVERT_OPTIONS *) *lpcvto;
// if we need to allocate space, do so
if (cvto == NULL)
cvto = AllocMemory(sizeof(CONVERT_OPTIONS));
// make sure it was allocated
if (cvto == NULL)
return;
ReadFile(hFile, cvto, sizeof(CONVERT_OPTIONS), &wrote, NULL);
*lpcvto = (void *) cvto;
} // UserOptionsLoad
/*+-------------------------------------------------------------------------+
| UserOptionsSave()
|
+-------------------------------------------------------------------------+*/
void UserOptionsSave(HANDLE hFile, void *pcvto) {
CONVERT_OPTIONS *cvto;
DWORD wrote;
DOMAIN_BUFFER *Trusted;
cvto = (CONVERT_OPTIONS *) pcvto;
// if trusted domain then index the domain list and save off the old
// domain pointer so that we save the index instead.
if (cvto->UseTrustedDomain && (cvto->TrustedDomain != NULL)) {
DomainListIndex();
Trusted = cvto->TrustedDomain;
cvto->TrustedDomain = (DOMAIN_BUFFER *) cvto->TrustedDomain->Index;
} else
cvto->UseTrustedDomain = FALSE;
WriteFile(hFile, pcvto, sizeof(CONVERT_OPTIONS), &wrote, NULL);
// if we replaced the domain pointer, then restore it
if (cvto->UseTrustedDomain)
cvto->TrustedDomain = Trusted;
} // UserOptionsSave
/*+-------------------------------------------------------------------------+
| Passwords_Toggle()
|
+-------------------------------------------------------------------------+*/
void Passwords_Toggle(HWND hDlg, BOOL Toggle) {
HWND hCtrl;
BOOL MainToggle = Toggle;
hCtrl = GetDlgItem(hDlg, IDC_CHKUSERS);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 0)
MainToggle = FALSE;
hCtrl = GetDlgItem(hDlg, IDC_CHKPWFORCE);
ShowWindow(hCtrl, Toggle);
EnableWindow(hCtrl, MainToggle);
#ifdef togmap
hCtrl = GetDlgItem(hDlg, IDC_CHKMAPPING);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
MainToggle = FALSE;
#endif
hCtrl = GetDlgItem(hDlg, IDC_RADIO1);
ShowWindow(hCtrl, Toggle);
EnableWindow(hCtrl, MainToggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO2);
ShowWindow(hCtrl, Toggle);
EnableWindow(hCtrl, MainToggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO3);
ShowWindow(hCtrl, Toggle);
EnableWindow(hCtrl, MainToggle);
hCtrl = GetDlgItem(hDlg, IDC_PWCONST);
ShowWindow(hCtrl, Toggle);
EnableWindow(hCtrl, MainToggle);
} // Passwords_Toggle
/*+-------------------------------------------------------------------------+
| DuplicateUsers_Toggle()
|
+-------------------------------------------------------------------------+*/
void DuplicateUsers_Toggle(HWND hDlg, BOOL Toggle) {
HWND hCtrl;
BOOL MainToggle = Toggle;
hCtrl = GetDlgItem(hDlg, IDC_CHKUSERS);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 0)
MainToggle = FALSE;
#ifdef togmap
hCtrl = GetDlgItem(hDlg, IDC_CHKMAPPING);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
MainToggle = FALSE;
#endif
hCtrl = GetDlgItem(hDlg, IDC_STATDUP);
ShowWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO4);
ShowWindow(hCtrl, Toggle);
EnableWindow(hCtrl, MainToggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO5);
ShowWindow(hCtrl, Toggle);
EnableWindow(hCtrl, MainToggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO6);
ShowWindow(hCtrl, Toggle);
EnableWindow(hCtrl, MainToggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO7);
ShowWindow(hCtrl, Toggle);
EnableWindow(hCtrl, MainToggle);
hCtrl = GetDlgItem(hDlg, IDC_USERCONST);
ShowWindow(hCtrl, Toggle);
EnableWindow(hCtrl, MainToggle);
} // DuplicateUsers_Toggle
/*+-------------------------------------------------------------------------+
| DuplicateGroups_Toggle()
|
+-------------------------------------------------------------------------+*/
void DuplicateGroups_Toggle(HWND hDlg, BOOL Toggle) {
HWND hCtrl;
BOOL MainToggle = Toggle;
hCtrl = GetDlgItem(hDlg, IDC_CHKUSERS);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 0)
MainToggle = FALSE;
#ifdef togmap
hCtrl = GetDlgItem(hDlg, IDC_CHKMAPPING);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
MainToggle = FALSE;
#endif
hCtrl = GetDlgItem(hDlg, IDC_STATDUP);
ShowWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO8);
ShowWindow(hCtrl, Toggle);
EnableWindow(hCtrl, MainToggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO9);
ShowWindow(hCtrl, Toggle);
EnableWindow(hCtrl, MainToggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO10);
ShowWindow(hCtrl, Toggle);
EnableWindow(hCtrl, MainToggle);
hCtrl = GetDlgItem(hDlg, IDC_GROUPCONST);
ShowWindow(hCtrl, Toggle);
EnableWindow(hCtrl, MainToggle);
} // DuplicateGroups_Toggle
/*+-------------------------------------------------------------------------+
| Defaults_Toggle()
|
+-------------------------------------------------------------------------+*/
void Defaults_Toggle(HWND hDlg, BOOL Toggle) {
HWND hCtrl;
BOOL MainToggle = Toggle;
hCtrl = GetDlgItem(hDlg, IDC_CHKUSERS);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 0)
MainToggle = FALSE;
hCtrl = GetDlgItem(hDlg, IDC_CHKSUPER);
EnableWindow(hCtrl, MainToggle);
ShowWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_CHKADMIN);
EnableWindow(hCtrl, MainToggle);
ShowWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_CHKFPNW);
if (FPNWChk)
EnableWindow(hCtrl, MainToggle);
else
EnableWindow(hCtrl, FALSE);
ShowWindow(hCtrl, Toggle);
} // Defaults_Toggle
/*+-------------------------------------------------------------------------+
| Mapping_Toggle()
|
+-------------------------------------------------------------------------+*/
void Mapping_Toggle(HWND hDlg, BOOL Toggle) {
HWND hCtrl;
// These two are the reverse of the others...
hCtrl = GetDlgItem(hDlg, IDC_MAPPINGFILE);
EnableWindow(hCtrl, !Toggle);
hCtrl = GetDlgItem(hDlg, IDC_BTNMAPPINGFILE);
EnableWindow(hCtrl, !Toggle);
hCtrl = GetDlgItem(hDlg, IDC_BTNMAPPINGEDIT);
EnableWindow(hCtrl, !Toggle);
#ifdef togmap
hCtrl = GetDlgItem(hDlg, IDC_RADIO1);
EnableWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO2);
EnableWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO3);
EnableWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO4);
EnableWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO5);
EnableWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO6);
EnableWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO7);
EnableWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO8);
EnableWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO9);
EnableWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_RADIO10);
EnableWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_CHKPWFORCE);
EnableWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_PWCONST);
EnableWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_USERCONST);
EnableWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_GROUPCONST);
EnableWindow(hCtrl, Toggle);
#endif
} // Mapping_Toggle
/*+-------------------------------------------------------------------------+
| UserDialogToggle()
|
+-------------------------------------------------------------------------+*/
void UserDialogToggle(HWND hDlg, BOOL Toggle) {
HWND hCtrl;
hCtrl = GetDlgItem(hDlg, IDC_CHKMAPPING);
EnableWindow(hCtrl, Toggle);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
Mapping_Toggle(hDlg, FALSE);
else
Mapping_Toggle(hDlg, Toggle);
if (!Toggle) {
hCtrl = GetDlgItem(hDlg, IDC_MAPPINGFILE);
EnableWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_BTNMAPPINGFILE);
EnableWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_BTNMAPPINGEDIT);
EnableWindow(hCtrl, Toggle);
}
hCtrl = GetDlgItem(hDlg, IDC_CHKSUPER);
EnableWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_CHKADMIN);
EnableWindow(hCtrl, Toggle);
hCtrl = GetDlgItem(hDlg, IDC_CHKFPNW);
if (FPNWChk)
EnableWindow(hCtrl, Toggle);
else
EnableWindow(hCtrl, FALSE);
// Check the Advanced Trusted domain check and toggle controls appropriatly
hCtrl = GetDlgItem(hDlg, IDC_CHKTRUSTED);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1) {
hCtrl = GetDlgItem(hDlg, IDC_TRUSTED);
EnableWindow(hCtrl, Toggle);
} else {
hCtrl = GetDlgItem(hDlg, IDC_TRUSTED);
EnableWindow(hCtrl, FALSE);
}
// Now toggle the checkbox itself
hCtrl = GetDlgItem(hDlg, IDC_CHKTRUSTED);
EnableWindow(hCtrl, Toggle);
} // UserDialogToggle
/*+-------------------------------------------------------------------------+
| UserDialogSave()
|
+-------------------------------------------------------------------------+*/
void UserDialogSave(HWND hDlg) {
HWND hCtrl;
DWORD_PTR dwIndex;
TCHAR TrustedDomain[MAX_PATH + 1];
hCtrl = GetDlgItem(hDlg, IDC_CHKUSERS);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
CurrentConvertOptions->TransferUserInfo = TRUE;
else
CurrentConvertOptions->TransferUserInfo = FALSE;
hCtrl = GetDlgItem(hDlg, IDC_CHKMAPPING);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
CurrentConvertOptions->UseMappingFile = TRUE;
else
CurrentConvertOptions->UseMappingFile = FALSE;
// Mapping file is handled in Verify
// Password stuff--------------------------------------------------------
hCtrl = GetDlgItem(hDlg, IDC_RADIO1);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
CurrentConvertOptions->PasswordOption = 0;
hCtrl = GetDlgItem(hDlg, IDC_RADIO2);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
CurrentConvertOptions->PasswordOption = 1;
hCtrl = GetDlgItem(hDlg, IDC_RADIO3);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
CurrentConvertOptions->PasswordOption = 2;
hCtrl = GetDlgItem(hDlg, IDC_PWCONST);
* (WORD *)CurrentConvertOptions->PasswordConstant = sizeof(CurrentConvertOptions->PasswordConstant);
SendMessage(hCtrl, EM_GETLINE, 0, (LPARAM) CurrentConvertOptions->PasswordConstant);
hCtrl = GetDlgItem(hDlg, IDC_CHKPWFORCE);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
CurrentConvertOptions->ForcePasswordChange = TRUE;
else
CurrentConvertOptions->ForcePasswordChange = FALSE;
// Username stuff--------------------------------------------------------
hCtrl = GetDlgItem(hDlg, IDC_RADIO4);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
CurrentConvertOptions->UserNameOption = 0;
hCtrl = GetDlgItem(hDlg, IDC_RADIO5);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
CurrentConvertOptions->UserNameOption = 1;
hCtrl = GetDlgItem(hDlg, IDC_RADIO6);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
CurrentConvertOptions->UserNameOption = 2;
hCtrl = GetDlgItem(hDlg, IDC_RADIO7);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
CurrentConvertOptions->UserNameOption = 3;
hCtrl = GetDlgItem(hDlg, IDC_USERCONST);
* (WORD *)CurrentConvertOptions->UserConstant = sizeof(CurrentConvertOptions->UserConstant);
SendMessage(hCtrl, EM_GETLINE, 0, (LPARAM) CurrentConvertOptions->UserConstant);
// Group-name stuff--------------------------------------------------------
hCtrl = GetDlgItem(hDlg, IDC_RADIO8);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
CurrentConvertOptions->GroupNameOption = 0;
hCtrl = GetDlgItem(hDlg, IDC_RADIO9);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
CurrentConvertOptions->GroupNameOption = 1;
hCtrl = GetDlgItem(hDlg, IDC_RADIO10);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
CurrentConvertOptions->GroupNameOption = 2;
hCtrl = GetDlgItem(hDlg, IDC_GROUPCONST);
* (WORD *)CurrentConvertOptions->GroupConstant = sizeof(CurrentConvertOptions->GroupConstant);
SendMessage(hCtrl, EM_GETLINE, 0, (LPARAM) CurrentConvertOptions->GroupConstant);
// Defaults page stuff------------------------------------------------------
hCtrl = GetDlgItem(hDlg, IDC_CHKSUPER);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
CurrentConvertOptions->SupervisorDefaults = TRUE;
else
CurrentConvertOptions->SupervisorDefaults = FALSE;
hCtrl = GetDlgItem(hDlg, IDC_CHKADMIN);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
CurrentConvertOptions->AdminAccounts = TRUE;
else
CurrentConvertOptions->AdminAccounts = FALSE;
if (FPNWChk) {
hCtrl = GetDlgItem(hDlg, IDC_CHKFPNW);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
CurrentConvertOptions->NetWareInfo = TRUE;
else
CurrentConvertOptions->NetWareInfo = FALSE;
} else
CurrentConvertOptions->NetWareInfo = FALSE;
// Advanced >> button stuff-------------------------------------------------
hCtrl = GetDlgItem(hDlg, IDC_CHKTRUSTED);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1) {
CurrentConvertOptions->UseTrustedDomain = TRUE;
// if there is already a trusted domain selected - clear it out
if (CurrentConvertOptions->TrustedDomain != NULL) {
DomainListDelete(CurrentConvertOptions->TrustedDomain);
CurrentConvertOptions->TrustedDomain = NULL;
}
hCtrl = GetDlgItem(hDlg, IDC_TRUSTED);
dwIndex = SendMessage(hCtrl, CB_GETCURSEL, 0, 0);
if (dwIndex != CB_ERR) {
// Get the domain name and then try to add it to our lists
SendMessage(hCtrl, CB_GETLBTEXT, (WPARAM) dwIndex, (LPARAM) TrustedDomain);
CurrentConvertOptions->TrustedDomain = NTTrustedDomainSet(hDlg, DestServ, TrustedDomain);
}
} else
CurrentConvertOptions->UseTrustedDomain = FALSE;
// Set default values to new selections
UserOptionsDefaultsSet(CurrentConvertOptions);
} // UserDialogSave
/*+-------------------------------------------------------------------------+
| UserDialogVerify()
|
+-------------------------------------------------------------------------+*/
BOOL UserDialogVerify(HWND hDlg) {
HWND hCtrl;
static TCHAR MappingFile[MAX_PATH + 1];
static char FileNameA[MAX_PATH + 1];
static char CmdLine[MAX_PATH + 1 + 12]; // Editor + file
TCHAR drive[MAX_DRIVE + 1];
TCHAR dir[MAX_PATH + 1];
TCHAR fname[MAX_PATH + 1];
TCHAR ext[_MAX_EXT + 1];
HANDLE hFile;
// Check trusted domain...
// Check mapping file
hCtrl = GetDlgItem(hDlg, IDC_CHKUSERS);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1) {
hCtrl = GetDlgItem(hDlg, IDC_CHKMAPPING);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1) {
hCtrl = GetDlgItem(hDlg, IDC_MAPPINGFILE);
* (WORD *)MappingFile = sizeof(MappingFile);
SendMessage(hCtrl, EM_GETLINE, 0, (LPARAM) MappingFile);
lsplitpath(MappingFile, drive, dir, fname, ext);
// Make sure a file name is specified
if (lstrlen(fname) == 0) {
MessageBox(hDlg, Lids(IDS_NOREADMAP), Lids(IDS_TXTWARNING), MB_OK | MB_ICONEXCLAMATION);
hCtrl = GetDlgItem(hDlg, IDC_MAPPINGFILE);
SetFocus(hCtrl);
return FALSE;
}
if ((drive[0] == TEXT('\0')) && (dir[0] == TEXT('\0')))
lstrcpy(dir, ProgPath);
if (ext[0] == TEXT('\0'))
lstrcpy(ext, Lids(IDS_S_36));
lmakepath(MappingFile, drive, dir, fname, ext);
lstrcpy(CurrentConvertOptions->MappingFile, MappingFile);
WideCharToMultiByte(CP_ACP, 0, MappingFile, -1, FileNameA, sizeof(FileNameA), NULL, NULL);
hFile = CreateFileA( FileNameA, GENERIC_READ, 0,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
if (hFile == INVALID_HANDLE_VALUE) {
MessageBox(hDlg, Lids(IDS_NOREADMAP), Lids(IDS_TXTWARNING), MB_OK | MB_ICONEXCLAMATION);
hCtrl = GetDlgItem(hDlg, IDC_MAPPINGFILE);
SetFocus(hCtrl);
return FALSE;
} else
CloseHandle(hFile);
}
} // mapping file
return TRUE;
} // UserDialogVerify
/*+-------------------------------------------------------------------------+
| UserDialogSetup()
|
+-------------------------------------------------------------------------+*/
void UserDialogSetup(HWND hDlg) {
HWND hCtrl;
// Main TransferUserCheckbox
hCtrl = GetDlgItem(hDlg, IDC_CHKUSERS);
if (CurrentConvertOptions->TransferUserInfo)
SendMessage(hCtrl, BM_SETCHECK, 1, 0);
else
SendMessage(hCtrl, BM_SETCHECK, 0, 0);
// Mapping file checkbox
hCtrl = GetDlgItem(hDlg, IDC_CHKMAPPING);
if (CurrentConvertOptions->UseMappingFile)
SendMessage(hCtrl, BM_SETCHECK, 1, 0);
else
SendMessage(hCtrl, BM_SETCHECK, 0, 0);
hCtrl = GetDlgItem(hDlg, IDC_MAPPINGFILE);
PostMessage(hCtrl, EM_LIMITTEXT, (WPARAM) MAX_PATH, 0);
SendMessage(hCtrl, WM_SETTEXT, 0, (LPARAM) CurrentConvertOptions->MappingFile);
// Force Password checkbox
hCtrl = GetDlgItem(hDlg, IDC_CHKPWFORCE);
if (CurrentConvertOptions->ForcePasswordChange)
SendMessage(hCtrl, BM_SETCHECK, 1, 0);
else
SendMessage(hCtrl, BM_SETCHECK, 0, 0);
// Set the text and limit the lengths of the edit fields...
hCtrl = GetDlgItem(hDlg, IDC_PWCONST);
PostMessage(hCtrl, EM_LIMITTEXT, (WPARAM) MAX_PW_LEN, 0);
SendMessage(hCtrl, WM_SETTEXT, 0, (LPARAM) CurrentConvertOptions->PasswordConstant);
hCtrl = GetDlgItem(hDlg, IDC_USERCONST);
PostMessage(hCtrl, EM_LIMITTEXT, (WPARAM) MAX_UCONST_LEN, 0);
SendMessage(hCtrl, WM_SETTEXT, 0, (LPARAM) CurrentConvertOptions->UserConstant);
hCtrl = GetDlgItem(hDlg, IDC_GROUPCONST);
PostMessage(hCtrl, EM_LIMITTEXT, (WPARAM) MAX_UCONST_LEN, 0);
SendMessage(hCtrl, WM_SETTEXT, 0, (LPARAM) CurrentConvertOptions->GroupConstant);
// Now init the radio buttons correctly
CheckRadioButton(hDlg, IDC_RADIO1, IDC_RADIO3, IDC_RADIO1 + CurrentConvertOptions->PasswordOption);
CheckRadioButton(hDlg, IDC_RADIO4, IDC_RADIO7, IDC_RADIO4 + CurrentConvertOptions->UserNameOption);
CheckRadioButton(hDlg, IDC_RADIO8, IDC_RADIO10, IDC_RADIO8 + CurrentConvertOptions->GroupNameOption);
// Do the controls in the defaults section
hCtrl = GetDlgItem(hDlg, IDC_CHKSUPER);
if (CurrentConvertOptions->SupervisorDefaults)
SendMessage(hCtrl, BM_SETCHECK, 1, 0);
else
SendMessage(hCtrl, BM_SETCHECK, 0, 0);
hCtrl = GetDlgItem(hDlg, IDC_CHKADMIN);
if (CurrentConvertOptions->AdminAccounts)
SendMessage(hCtrl, BM_SETCHECK, 1, 0);
else
SendMessage(hCtrl, BM_SETCHECK, 0, 0);
if (FPNWChk) {
hCtrl = GetDlgItem(hDlg, IDC_CHKFPNW);
if (CurrentConvertOptions->NetWareInfo)
SendMessage(hCtrl, BM_SETCHECK, 1, 0);
else
SendMessage(hCtrl, BM_SETCHECK, 0, 0);
} else
SendMessage(hCtrl, BM_SETCHECK, 0, 0);
// Now for the Advanced >> area..
hCtrl = GetDlgItem(hDlg, IDC_CHKTRUSTED);
if (CurrentConvertOptions->UseTrustedDomain)
SendMessage(hCtrl, BM_SETCHECK, 1, 0);
else
SendMessage(hCtrl, BM_SETCHECK, 0, 0);
} // UserDialogSetup
/*+-------------------------------------------------------------------------+
| ShowArea()
|
+-------------------------------------------------------------------------+*/
void ShowArea(BOOL fShowDefAreaOnly, HWND hDlg, HWND hWndDefArea) {
RECT rcDlg, rcDefArea;
TCHAR szDlgDims[25];
char szaDlgDims[25];
HWND hWndChild;
RECT rc;
// Save original width and height of dialog box
GetWindowRect(hDlg, &rcDlg);
// Retrieve coordinates for default area window.
GetWindowRect(hWndDefArea, &rcDefArea);
hWndChild = GetFirstChild(hDlg);
for (; hWndChild != NULL; hWndChild = GetNextSibling(hWndChild)) {
// Calculate rectangle occupied by child window in sreen coordinates
GetWindowRect(hWndChild, &rc);
// Enable/Disable child if its:
// right edge is >= the right edge of hWndDefArea.
// bottom edge is >= the bottom edge of hWndDefArea.
if ((rc.right >= rcDefArea.right) || (rc.bottom >= rcDefArea.bottom))
EnableWindow(hWndChild, !fShowDefAreaOnly);
}
if (fShowDefAreaOnly) {
wsprintf(szDlgDims, TEXT("%05u %05u"), rcDlg.right - rcDlg.left, rcDlg.bottom - rcDlg.top);
SetStyleOff(hWndDefArea, SS_BLACKRECT);
SetStyleOn(hWndDefArea, SS_LEFT);
SetWindowText(hWndDefArea, szDlgDims);
// Resize dialog box to fit only default area.
SetWindowPos(hDlg, NULL, 0, 0, rcDefArea.right - rcDlg.left,
rcDefArea.bottom - rcDlg.top, SWP_NOZORDER | SWP_NOMOVE);
// Make sure that the Default area box is hidden.
ShowWindow(hWndDefArea, SW_HIDE);
} else {
GetWindowText(hWndDefArea, szDlgDims, sizeof(szDlgDims));
WideCharToMultiByte( CP_ACP, 0, szDlgDims, -1, szaDlgDims, sizeof(szDlgDims), NULL, NULL );
// Restore dialog box to its original size.
SetWindowPos(hDlg, NULL, 0, 0, atoi(szaDlgDims), atoi(szaDlgDims + 6),
SWP_NOZORDER | SWP_NOMOVE);
}
} // ShowArea
/*+-------------------------------------------------------------------------+
| UserFileGet()
|
+-------------------------------------------------------------------------+*/
DWORD UserFileGet(HWND hwnd, LPTSTR FilePath) {
OPENFILENAME ofn;
TCHAR szDirName[MAX_PATH + 1];
TCHAR szFile[MAX_PATH + 1], szFileTitle[MAX_PATH + 1];
UINT i, cbString;
TCHAR chReplace;
TCHAR szFilter[256];
BOOL Found = FALSE;
LPTSTR szExt;
szExt = Lids(IDS_S_37);
lstrcpy(szDirName, ProgPath);
lstrcpy(szFile, TEXT(""));
if ((cbString = LoadString(hInst, IDS_USERFILTERSTRING, szFilter, sizeof(szFilter))) == 0) {
// Error occured
return 1L;
}
chReplace = szFilter[cbString - 1]; // Retrieve wild character
for (i = 0; szFilter[i] != TEXT('\0'); i++) {
if (szFilter[i] == chReplace)
szFilter[i] = TEXT('\0');
}
// Set all structure members to zero
memset(&ofn, 0, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = szFilter;
ofn.nFilterIndex = 1;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFileTitle = szFileTitle;
ofn.nMaxFileTitle = sizeof(szFileTitle);
ofn.lpstrInitialDir = szDirName;
ofn.lpstrDefExt = szExt;
ofn.Flags = OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST;
if (GetOpenFileName(&ofn)) {
// Don't really need to open it yet - just copy the data
// If no path then append .
i = 0;
while (!Found && (ofn.lpstrFile[i] != TEXT('\0'))) {
if ((ofn.lpstrFile[i] == TEXT(':')) || (ofn.lpstrFile[i] == TEXT('\\')))
Found = TRUE;
i++;
}
lstrcpy(FilePath, TEXT(""));
if (!Found)
lstrcpy(FilePath, TEXT(".\\"));
lstrcat(FilePath, ofn.lpstrFile);
return 0L;
} else {
// Couldn't open the dang file
return 1L;
}
} // UserFileGet
/*+-------------------------------------------------------------------------+
| DlgUsers_TrustedSetup()
|
+-------------------------------------------------------------------------+*/
void DlgUsers_TrustedSetup(HWND hDlg) {
HWND hCtrl;
ULONG i;
static TRUSTED_DOMAIN_LIST *TList = NULL;
NTTrustedDomainsEnum(DestServ, &TList);
if (TList != NULL) {
hCtrl = GetDlgItem(hDlg, IDC_TRUSTED);
for (i = 0; i < TList->Count; i++)
SendMessage(hCtrl, CB_ADDSTRING, (WPARAM) 0, (LPARAM) TList->Name[i]);
}
EnableWindow(GetDlgItem(hDlg, IDC_ADVANCED), FALSE);
ShowArea(FALSE, hDlg, GetDlgItem(hDlg, IDC_DEFAULTBOX));
// Toggle the advanced controls based on the main user toggle
hCtrl = GetDlgItem(hDlg, IDC_CHKUSERS);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1) {
hCtrl = GetDlgItem(hDlg, IDC_CHKTRUSTED);
EnableWindow(hCtrl, TRUE);
hCtrl = GetDlgItem(hDlg, IDC_TRUSTED);
EnableWindow(hCtrl, TRUE);
SetFocus(GetDlgItem(hDlg, IDC_CHKTRUSTED));
} else {
hCtrl = GetDlgItem(hDlg, IDC_CHKTRUSTED);
EnableWindow(hCtrl, FALSE);
hCtrl = GetDlgItem(hDlg, IDC_TRUSTED);
EnableWindow(hCtrl, FALSE);
SetFocus(GetDlgItem(hDlg, IDHELP));
}
if ((TList == NULL) || (TList->Count = 0)) {
EnableWindow(GetDlgItem(hDlg, IDC_CHKTRUSTED), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_TRUSTED), FALSE);
SetFocus(GetDlgItem(hDlg, IDHELP));
} else {
// Select the trusted domain (or first one if none currently selected)
if (CurrentConvertOptions->TrustedDomain != NULL)
SendMessage(GetDlgItem(hDlg, IDC_TRUSTED), CB_SELECTSTRING, (WPARAM) -1, (LPARAM) CurrentConvertOptions->TrustedDomain->Name);
else
SendMessage(GetDlgItem(hDlg, IDC_TRUSTED), CB_SETCURSEL, 0, 0);
// if the checkbox is set then enable the edit field
if (!CurrentConvertOptions->UseTrustedDomain)
EnableWindow(GetDlgItem(hDlg, IDC_TRUSTED), FALSE);
}
// Free up the list as we don't need it anymore (it is in the combo-box)
if (TList) {
FreeMemory(TList);
TList = NULL;
}
} // DlgUsers_TrustedSetup
/*+-------------------------------------------------------------------------+
| MappingFileEdit()
|
+-------------------------------------------------------------------------+*/
BOOL MappingFileEdit(HWND hDlg) {
HWND hCtrl;
static TCHAR MappingFile[MAX_PATH + 1];
static char FileNameA[MAX_PATH + 1];
static char CmdLine[MAX_PATH + 1 + 12]; // Editor + file
TCHAR drive[MAX_DRIVE + 1];
TCHAR dir[MAX_PATH + 1];
TCHAR fname[MAX_PATH + 1];
TCHAR ext[_MAX_EXT + 1];
HANDLE hFile;
UINT uReturn;
BOOL ret = TRUE;
BOOL Browse = FALSE;
do {
// First check filename
hCtrl = GetDlgItem(hDlg, IDC_MAPPINGFILE);
* (WORD *)MappingFile = sizeof(MappingFile);
SendMessage(hCtrl, EM_GETLINE, 0, (LPARAM) MappingFile);
lsplitpath(MappingFile, drive, dir, fname, ext);
// Make sure a file name is specified
if (Browse || (lstrlen(fname) == 0)) {
// No name was specified, so let the user browse for a file
if (!UserFileGet(hDlg, MappingFile)) {
hCtrl = GetDlgItem(hDlg, IDC_MAPPINGFILE);
SendMessage(hCtrl, WM_SETTEXT, 0, (LPARAM) MappingFile);
SetFocus(hCtrl);
lsplitpath(MappingFile, drive, dir, fname, ext);
} else
return FALSE;
}
Browse = FALSE;
// remake path so it is fully qualified
if ((drive[0] == TEXT('\0')) && (dir[0] == TEXT('\0')))
lstrcpy(dir, ProgPath);
if (ext[0] == TEXT('\0'))
lstrcpy(ext, Lids(IDS_S_36));
lmakepath(MappingFile, drive, dir, fname, ext);
// Now make sure the file exists and is accessible
WideCharToMultiByte(CP_ACP, 0, MappingFile, -1, FileNameA, sizeof(FileNameA), NULL, NULL);
hFile = CreateFileA( FileNameA, GENERIC_READ, 0,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
if (hFile == INVALID_HANDLE_VALUE) {
// Couldn't open the file, report to user
if (MessageBox(hDlg, Lids(IDS_NOEDITMAP), Lids(IDS_TXTWARNING), MB_YESNO | MB_ICONQUESTION) == IDYES)
Browse = TRUE;
else {
// get out of loop as nothing more to do
hCtrl = GetDlgItem(hDlg, IDC_MAPPINGFILE);
SetFocus(hCtrl);
ret = FALSE;
}
} else {
// Could create a new file so make the mapping file...
CloseHandle(hFile);
CursorHourGlass();
wsprintfA(CmdLine, "Notepad %s", FileNameA);
uReturn = WinExec(CmdLine, SW_SHOW);
CursorNormal();
}
} while (Browse);
// Check mapping file check-box, if it's not check'd then do so
if (ret) {
hCtrl = GetDlgItem(hDlg, IDC_CHKMAPPING);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) != 1)
SendMessage(hCtrl, BM_SETCHECK, 1, 0);
}
return ret;
} // MappingFileEdit
/*+-------------------------------------------------------------------------+
| DlgUsers()
|
+-------------------------------------------------------------------------+*/
LRESULT CALLBACK DlgUsers(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
HWND hCtrl;
int wmId, wmEvent;
static short UserNameTab, GroupNameTab, PasswordsTab, DefaultsTab;
static BOOL TrustedEnabled;
TCHAR TrustedDomain[MAX_PATH + 1];
static TCHAR MappingFile[MAX_PATH + 1];
DWORD_PTR dwIndex;
switch (message) {
case WM_INITDIALOG:
// Center the dialog over the application window
CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));
// Setup for Advanced >> button
ShowArea(TRUE, hDlg, GetDlgItem(hDlg, IDC_DEFAULTBOX));
TrustedEnabled = FALSE;
// Need to set the check and radio buttons to correct state...
UserDialogSetup(hDlg);
hCtrl = GetDlgItem( hDlg, IDC_TABUSERS );
PasswordsTab = BookTab_AddItem( hCtrl, Lids(IDS_S_38) );
BookTab_SetItemData( hCtrl, PasswordsTab, 1001 );
UserNameTab = BookTab_AddItem( hCtrl, Lids(IDS_S_39) );
BookTab_SetItemData( hCtrl, UserNameTab, 1002 );
GroupNameTab = BookTab_AddItem( hCtrl, Lids(IDS_S_40) );
BookTab_SetItemData( hCtrl, GroupNameTab, 1003 );
DefaultsTab = BookTab_AddItem( hCtrl, Lids(IDS_S_41) );
BookTab_SetItemData( hCtrl, DefaultsTab, 1004 );
BookTab_SetCurSel(hCtrl, PasswordsTab);
// now need to reset the Advanced button to the correct state and also the
// Advanced display area...
if (CurrentConvertOptions->UseTrustedDomain) {
TrustedEnabled = TRUE;
DlgUsers_TrustedSetup(hDlg);
}
// Weirdness to initially enable controls on the tab control -
// looks like a bug in the tab control.
SetFocus(hCtrl);
hCtrl = GetDlgItem( hDlg, IDOK );
SetFocus(hCtrl);
PostMessage(hDlg, BTN_SELCHANGE, 0, 0);
return (TRUE);
case BTN_SELCHANGE:
hCtrl = GetDlgItem( hDlg, IDC_TABUSERS );
TabSelection = BookTab_GetCurSel(hCtrl);
if (TabSelection == UserNameTab) {
Passwords_Toggle(hDlg, FALSE);
Defaults_Toggle(hDlg, FALSE);
DuplicateGroups_Toggle(hDlg, FALSE);
DuplicateUsers_Toggle(hDlg, TRUE);
}
if (TabSelection == GroupNameTab) {
Passwords_Toggle(hDlg, FALSE);
Defaults_Toggle(hDlg, FALSE);
DuplicateUsers_Toggle(hDlg, FALSE);
DuplicateGroups_Toggle(hDlg, TRUE);
}
if (TabSelection == PasswordsTab) {
DuplicateUsers_Toggle(hDlg, FALSE);
Defaults_Toggle(hDlg, FALSE);
DuplicateGroups_Toggle(hDlg, FALSE);
Passwords_Toggle(hDlg, TRUE);
}
if (TabSelection == DefaultsTab) {
Passwords_Toggle(hDlg, FALSE);
DuplicateUsers_Toggle(hDlg, FALSE);
DuplicateGroups_Toggle(hDlg, FALSE);
Defaults_Toggle(hDlg, TRUE);
}
return (TRUE);
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId) {
case IDOK:
if (UserDialogVerify(hDlg)) {
UserDialogSave(hDlg);
EndDialog(hDlg, 0);
}
return (TRUE);
break;
case IDCANCEL:
EndDialog(hDlg, 0);
return (TRUE);
break;
case IDHELP:
if (TrustedEnabled)
WinHelp(hDlg, HELP_FILE, HELP_CONTEXT, (DWORD) IDC_HELP_USERADV);
else
WinHelp(hDlg, HELP_FILE, HELP_CONTEXT, (DWORD) IDC_HELP_USER);
return (TRUE);
break;
case IDC_ADVANCED:
TrustedEnabled = TRUE;
DlgUsers_TrustedSetup(hDlg);
return (TRUE);
break;
case IDC_CHKUSERS:
hCtrl = GetDlgItem(hDlg, IDC_CHKUSERS);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
UserDialogToggle(hDlg, TRUE);
else
UserDialogToggle(hDlg, FALSE);
PostMessage(hDlg, BTN_SELCHANGE, 0, 0);
return (TRUE);
break;
case IDC_CHKMAPPING:
hCtrl = GetDlgItem(hDlg, IDC_CHKMAPPING);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1)
Mapping_Toggle(hDlg, FALSE);
else
Mapping_Toggle(hDlg, TRUE);
return (TRUE);
break;
case IDC_CHKTRUSTED:
hCtrl = GetDlgItem(hDlg, IDC_CHKTRUSTED);
if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == 1) {
hCtrl = GetDlgItem(hDlg, IDC_TRUSTED);
EnableWindow(hCtrl, TRUE);
// Get trusted domain
dwIndex = SendMessage(hCtrl, CB_GETCURSEL, 0, 0);
if (dwIndex != CB_ERR) {
// Get the domain name and then try to add it to our lists
SendMessage(hCtrl, CB_GETLBTEXT, (WPARAM) dwIndex, (LPARAM) TrustedDomain);
CurrentConvertOptions->TrustedDomain = NTTrustedDomainSet(hDlg, DestServ, TrustedDomain);
CurrentConvertOptions->UseTrustedDomain = TRUE;
} else
CurrentConvertOptions->UseTrustedDomain = FALSE;
} else {
hCtrl = GetDlgItem(hDlg, IDC_TRUSTED);
EnableWindow(hCtrl, FALSE);
CurrentConvertOptions->UseTrustedDomain = FALSE;
}
// Toggled trust relationship so setup FPNW info accordingly
FPNWChk = IsFPNW(UserServerNameGet(DServ, CurrentConvertOptions));
if (TabSelection == DefaultsTab)
Defaults_Toggle(hDlg, TRUE);
return (TRUE);
break;
case IDC_TRUSTED:
if (wmEvent == CBN_SELCHANGE) {
// A new trusted domain was selected, update FPNW flag
hCtrl = GetDlgItem(hDlg, IDC_TRUSTED);
EnableWindow(hCtrl, TRUE);
// Get trusted domain
dwIndex = SendMessage(hCtrl, CB_GETCURSEL, 0, 0);
if (dwIndex != CB_ERR) {
// Get the domain name and then try to add it to our lists
SendMessage(hCtrl, CB_GETLBTEXT, (WPARAM) dwIndex, (LPARAM) TrustedDomain);
CurrentConvertOptions->TrustedDomain = NTTrustedDomainSet(hDlg, DestServ, TrustedDomain);
CurrentConvertOptions->UseTrustedDomain = TRUE;
} else
CurrentConvertOptions->UseTrustedDomain = FALSE;
FPNWChk = IsFPNW(UserServerNameGet(DServ, CurrentConvertOptions));
CurrentConvertOptions->NetWareInfo = FPNWChk;
if (TabSelection == DefaultsTab)
Defaults_Toggle(hDlg, TRUE);
}
break;
case IDC_BTNMAPPINGFILE:
// Get anything in the text box
hCtrl = GetDlgItem(hDlg, IDC_MAPPINGFILE);
* (WORD *)MappingFile = sizeof(MappingFile);
SendMessage(hCtrl, EM_GETLINE, 0, (LPARAM) MappingFile);
// invoke the creation routine
MapFileCreate(hDlg, MappingFile, SourceServ);
// reset edit-box to whatever the returned filename is
SendMessage(hCtrl, WM_SETTEXT, 0, (LPARAM) MappingFile);
if (SendMessage(hCtrl, EM_LINELENGTH, 0, 0)) {
hCtrl = GetDlgItem(hDlg, IDC_CHKMAPPING);
SendMessage(hCtrl, BM_SETCHECK, 1, 0);
} else {
hCtrl = GetDlgItem(hDlg, IDC_CHKMAPPING);
SendMessage(hCtrl, BM_SETCHECK, 0, 0);
}
return (TRUE);
break;
case IDC_BTNMAPPINGEDIT:
MappingFileEdit(hDlg);
return (TRUE);
break;
case IDC_PWCONST:
if (wmEvent == EN_CHANGE)
CheckRadioButton(hDlg, IDC_RADIO1, IDC_RADIO3, IDC_RADIO3);
break;
case IDC_USERCONST:
if (wmEvent == EN_CHANGE)
CheckRadioButton(hDlg, IDC_RADIO4, IDC_RADIO7, IDC_RADIO7);
break;
case IDC_GROUPCONST:
if (wmEvent == EN_CHANGE)
CheckRadioButton(hDlg, IDC_RADIO8, IDC_RADIO10, IDC_RADIO10);
break;
}
break;
}
return (FALSE); // Didn't process the message
lParam;
} // DlgUsers
/*+-------------------------------------------------------------------------+
| UserOptions_Do()
|
+-------------------------------------------------------------------------+*/
void UserOptions_Do(HWND hDlg, void *ConvOptions, SOURCE_SERVER_BUFFER *SourceServer, DEST_SERVER_BUFFER *DestServer) {
DLGPROC lpfnDlg;
SServ = SourceServer;
DServ = DestServer;
SourceServ = SourceServer->Name;
DestServ = DestServer->Name;
FPNWChk = DServ->IsFPNW;
CurrentConvertOptions = (CONVERT_OPTIONS *) ConvOptions;
lpfnDlg = MakeProcInstance((DLGPROC)DlgUsers, hInst);
DialogBox(hInst, TEXT("DlgNewUsers"), hDlg, lpfnDlg) ;
FreeProcInstance(lpfnDlg);
} // UserOptions_Do