windows-nt/Source/XPSP1/NT/printscan/fax/setup/wizdll/dlgsec.c
2020-09-26 16:20:57 +08:00

252 lines
8.9 KiB
C

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
dlgsec.c
Abstract:
This file implements the dialog proc for the
security page. This page captures the account
name that the fax service runs under.
Environment:
WIN32 User Mode
Author:
Wesley Witt (wesw) 17-Feb-1996
--*/
#include "wizard.h"
#pragma hdrstop
#define MY_SET_FOCUS (WM_USER+1000)
LRESULT
RouteSecurityDlgProc(
HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM lParam
)
{
switch( msg ) {
case WM_INITDIALOG:
SendDlgItemMessage( hwnd, IDC_ACCOUNT_NAME, EM_SETLIMITTEXT, LT_ACCOUNT_NAME, 0 );
SendDlgItemMessage( hwnd, IDC_PASSWORD, EM_SETLIMITTEXT, LT_PASSWORD, 0 );
SendDlgItemMessage( hwnd, IDC_PASSWORD2, EM_SETLIMITTEXT, LT_PASSWORD, 0 );
{
HANDLE hProcess, hAccessToken;
BYTE InfoBuffer[1000];
TCHAR szAccountName[200], szDomainName[200];
PTOKEN_USER pTokenUser = (PTOKEN_USER)InfoBuffer;
DWORD dwInfoBufferSize,dwAccountSize = 200, dwDomainSize = 200;
SID_NAME_USE snu;
hProcess = GetCurrentProcess();
OpenProcessToken(
hProcess,
TOKEN_READ,
&hAccessToken
);
GetTokenInformation(
hAccessToken,
TokenUser,
InfoBuffer,
1000,
&dwInfoBufferSize
);
LookupAccountSid(
NULL,
pTokenUser->User.Sid,
szAccountName,
&dwAccountSize,
szDomainName,
&dwDomainSize,
&snu
);
_stprintf( (LPTSTR)InfoBuffer, TEXT("%s\\%s"), szDomainName, szAccountName );
SetDlgItemText( hwnd, IDC_ACCOUNT_NAME, (LPTSTR)InfoBuffer );
}
PostMessage( hwnd, MY_SET_FOCUS, 0, (LPARAM) GetDlgItem( hwnd, IDC_PASSWORD ) );
return FALSE;
case MY_SET_FOCUS:
SetFocus( (HWND) lParam );
SendMessage( (HWND) lParam, EM_SETSEL, 0, MAKELPARAM( 0, -1 ) );
return FALSE;
case WM_NOTIFY:
switch( ((LPNMHDR)lParam)->code ) {
case PSN_SETACTIVE:
if (Unattended) {
if (!UnAttendGetAnswer(
UAA_ACCOUNT_NAME,
(LPBYTE) WizData.AccountName,
sizeof(WizData.AccountName)/sizeof(WCHAR)))
{
WizData.UseLocalSystem = TRUE;
} else {
if (!UnAttendGetAnswer(
UAA_PASSWORD,
(LPBYTE) WizData.Password,
sizeof(WizData.Password)/sizeof(WCHAR)))
{
WizData.UseLocalSystem = TRUE;
}
}
SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
return TRUE;
}
if (InstallMode != INSTALL_NEW) {
SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
return TRUE;
}
break;
case PSN_WIZNEXT:
{
TCHAR ConfirmPassword[64];
SendDlgItemMessage(
hwnd,
IDC_ACCOUNT_NAME,
WM_GETTEXT,
sizeof(WizData.AccountName),
(LPARAM) WizData.AccountName
);
SendDlgItemMessage(
hwnd,
IDC_PASSWORD,
WM_GETTEXT,
sizeof(WizData.Password),
(LPARAM) WizData.Password
);
if (!WizData.AccountName[0]) {
PopUpMsg( hwnd, IDS_ACCOUNTNAME, TRUE, 0 );
SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
return TRUE;
}
SendDlgItemMessage(
hwnd,
IDC_PASSWORD2,
WM_GETTEXT,
sizeof(ConfirmPassword),
(LPARAM) ConfirmPassword
);
if (_tcscmp( ConfirmPassword, WizData.Password ) != 0) {
PopUpMsg( hwnd, IDS_PASSWORD, TRUE, 0 );
SetWindowLong( hwnd, DWL_MSGRESULT, -1 );
PostMessage( hwnd, MY_SET_FOCUS, 0, (LPARAM) GetDlgItem( hwnd, IDC_PASSWORD ) );
return TRUE;
}
if (!_tcschr( WizData.AccountName, TEXT('\\'))) {
TCHAR ComputerName[128];
DWORD Size = sizeof(ComputerName);
if (GetComputerName( ComputerName, &Size )) {
_tcscat( ComputerName, TEXT("\\") );
_tcscat( ComputerName, WizData.AccountName );
_tcscpy( WizData.AccountName, ComputerName );
SetDlgItemText( hwnd, IDC_ACCOUNT_NAME, WizData.AccountName );
}
}
}
break;
}
break;
}
return FALSE;
}
LRESULT
SecurityErrorDlgProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam
)
{
static PSECURITY_INFO SecurityInfo;
switch( message ) {
case WM_INITDIALOG:
SendDlgItemMessage( hwnd, IDC_ACCOUNT_NAME, EM_SETLIMITTEXT, LT_ACCOUNT_NAME, 0 );
SendDlgItemMessage( hwnd, IDC_PASSWORD, EM_SETLIMITTEXT, LT_PASSWORD, 0 );
SendDlgItemMessage( hwnd, IDC_PASSWORD2, EM_SETLIMITTEXT, LT_PASSWORD, 0 );
SecurityInfo = (PSECURITY_INFO) lParam;
SetDlgItemText( hwnd, IDC_ACCOUNT_NAME, (LPTSTR) SecurityInfo->AccountName );
SetDlgItemText( hwnd, IDC_PASSWORD, (LPTSTR) SecurityInfo->Password );
SetDlgItemText( hwnd, IDC_PASSWORD2, (LPTSTR) SecurityInfo->Password );
break;
case WM_COMMAND:
switch( wParam ) {
case IDCANCEL:
EndDialog( hwnd, 0 );
return TRUE;
case IDOK:
{
TCHAR ConfirmPassword[64];
SendDlgItemMessage(
hwnd,
IDC_ACCOUNT_NAME,
WM_GETTEXT,
sizeof(SecurityInfo->AccountName),
(LPARAM) SecurityInfo->AccountName
);
SendDlgItemMessage(
hwnd,
IDC_PASSWORD,
WM_GETTEXT,
sizeof(SecurityInfo->Password),
(LPARAM) SecurityInfo->Password
);
if (!SecurityInfo->AccountName[0]) {
PopUpMsg( hwnd, IDS_ACCOUNTNAME, TRUE, 0 );
return TRUE;
}
SendDlgItemMessage(
hwnd,
IDC_PASSWORD2,
WM_GETTEXT,
sizeof(ConfirmPassword),
(LPARAM) ConfirmPassword
);
if (_tcscmp( ConfirmPassword, SecurityInfo->Password ) != 0) {
PopUpMsg( hwnd, IDS_PASSWORD, TRUE, 0 );
return TRUE;
}
if (!_tcschr( SecurityInfo->AccountName, TEXT('\\'))) {
TCHAR ComputerName[128];
DWORD Size = sizeof(ComputerName);
if (GetComputerName( ComputerName, &Size )) {
_tcscat( ComputerName, TEXT("\\") );
_tcscat( ComputerName, SecurityInfo->AccountName );
_tcscpy( SecurityInfo->AccountName, ComputerName );
}
}
}
EndDialog( hwnd, 1 );
return TRUE;
}
break;
}
return FALSE;
}