967 lines
32 KiB
C
967 lines
32 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1996 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
wizard.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This file implements the setup wizard code for the
|
||
|
FAX server setup.
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
WIN32 User Mode
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Wesley Witt (wesw) 17-Feb-1996
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "wizard.h"
|
||
|
#pragma hdrstop
|
||
|
|
||
|
// ------------------------------------------------------------
|
||
|
// Internal prototypes
|
||
|
BOOL Win9xUpg(); // t-briand: added for Win9x upgrade process.
|
||
|
|
||
|
|
||
|
|
||
|
WIZPAGE SetupWizardPages[WizPageMaximum] = {
|
||
|
|
||
|
//
|
||
|
// Device Status Page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_NEXT, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPageDeviceStatus, // page id
|
||
|
DeviceStatusDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_DEVICE_INIT_PAGE), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}},
|
||
|
|
||
|
//
|
||
|
// Device Selection Page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_NEXT, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPageDeviceSelection, // page id
|
||
|
DeviceSelectionDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_WORKSTATION_DEVICE_SELECT), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}},
|
||
|
|
||
|
//
|
||
|
// Server name page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_NEXT, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPageServerName, // page id
|
||
|
ServerNameDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_SERVER_NAME_PAGE), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}},
|
||
|
|
||
|
//
|
||
|
// Exchange page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_NEXT | PSWIZB_BACK, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPageExchange, // page id
|
||
|
ExchangeDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_EXCHANGE_PAGE), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}},
|
||
|
|
||
|
//
|
||
|
// File copy page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_NEXT | PSWIZB_BACK, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPageFileCopy, // page id
|
||
|
FileCopyDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_FILE_COPY_PAGE), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}},
|
||
|
|
||
|
//
|
||
|
// Station Id page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_NEXT | PSWIZB_BACK, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPageStationId, // page id
|
||
|
StationIdDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_STATIONID_PAGE), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}},
|
||
|
|
||
|
//
|
||
|
// Routing Printer Name Page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_NEXT | PSWIZB_BACK, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPageRoutePrint, // page id
|
||
|
RoutePrintDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_ROUTE_PRINT_PAGE), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}},
|
||
|
|
||
|
//
|
||
|
// Routing Store Page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_NEXT | PSWIZB_BACK, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPageRouteStoreDir, // page id
|
||
|
RouteStoreDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_ROUTE_STOREDIR_PAGE), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}},
|
||
|
|
||
|
//
|
||
|
// Routing Inbox Page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_NEXT | PSWIZB_BACK, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPageRouteInbox, // page id
|
||
|
RouteMailDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_ROUTE_INBOX_PAGE), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}},
|
||
|
|
||
|
//
|
||
|
// Routing Security Page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_NEXT | PSWIZB_BACK, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPageRouteSecurity, // page id
|
||
|
RouteSecurityDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_ROUTE_USERPASS_PAGE), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}},
|
||
|
|
||
|
//
|
||
|
// Platforms Page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_NEXT, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPagePlatforms, // page id
|
||
|
PlatformsDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_SERVER_PLATFORMS_PAGE), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}},
|
||
|
|
||
|
//
|
||
|
// Last server page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_FINISH, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPageLast, // page id
|
||
|
LastPageDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_LAST_WIZARD_PAGE), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}},
|
||
|
|
||
|
//
|
||
|
// Last uninstall page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_FINISH, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPageLastUninstall, // page id
|
||
|
LastPageUninstallDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_LAST_UNINSTALL_PAGE), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}},
|
||
|
|
||
|
//
|
||
|
// Client's fax server name page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_NEXT, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPageClientServerName, // page id
|
||
|
ClientServerNameDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_CLIENT_SERVER_NAME_PAGE), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}},
|
||
|
|
||
|
//
|
||
|
// Client's user info page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_NEXT | PSWIZB_BACK, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPageClientUserInfo, // page id
|
||
|
ClientUserInfoDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_CLIENT_USER_INFO_PAGE), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}},
|
||
|
|
||
|
//
|
||
|
// Client file copy page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_NEXT | PSWIZB_BACK, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPageClientFileCopy, // page id
|
||
|
ClientFileCopyDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_FILE_COPY_PAGE), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}},
|
||
|
|
||
|
//
|
||
|
// Last client page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_FINISH, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPageClientLast, // page id
|
||
|
LastClientPageDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_CLIENT_LAST_PAGE), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}},
|
||
|
|
||
|
//
|
||
|
// Remote admin file copy page
|
||
|
//
|
||
|
{
|
||
|
PSWIZB_NEXT, // valid buttons
|
||
|
0, // help id
|
||
|
NULL, // title
|
||
|
WizPageRemoteAdminCopy, // page id
|
||
|
RemoteAdminFileCopyDlgProc, // dlg proc
|
||
|
{ 0, // size of struct
|
||
|
0, // flags
|
||
|
NULL, // hinst (filled in at run time)
|
||
|
MAKEINTRESOURCE(IDD_FILE_COPY_PAGE), // dlg template
|
||
|
NULL, // icon
|
||
|
NULL, // title
|
||
|
CommonDlgProc, // dlg proc
|
||
|
0, // lparam
|
||
|
NULL, // callback
|
||
|
NULL // ref count
|
||
|
}}
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
DWORD ServerWizardPages[] =
|
||
|
{
|
||
|
|
||
|
WizPageDeviceStatus,
|
||
|
WizPageServerName,
|
||
|
WizPagePlatforms,
|
||
|
WizPageStationId,
|
||
|
WizPageExchange,
|
||
|
WizPageRouteStoreDir,
|
||
|
WizPageRoutePrint,
|
||
|
WizPageRouteInbox,
|
||
|
WizPageRouteSecurity,
|
||
|
WizPageFileCopy,
|
||
|
WizPageLast,
|
||
|
WizPageLastUninstall,
|
||
|
(DWORD)-1
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
DWORD WorkstationWizardPages[] =
|
||
|
{
|
||
|
|
||
|
WizPageDeviceStatus,
|
||
|
WizPageDeviceSelection,
|
||
|
WizPageServerName,
|
||
|
WizPageStationId,
|
||
|
WizPageExchange,
|
||
|
WizPageRouteStoreDir,
|
||
|
WizPageRoutePrint,
|
||
|
WizPageRouteInbox,
|
||
|
WizPageRouteSecurity,
|
||
|
WizPageFileCopy,
|
||
|
WizPageLast,
|
||
|
WizPageLastUninstall,
|
||
|
(DWORD)-1
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
DWORD ClientWizardPages[] =
|
||
|
{
|
||
|
|
||
|
WizPageClientServerName,
|
||
|
WizPageClientUserInfo,
|
||
|
WizPageExchange,
|
||
|
WizPageClientFileCopy,
|
||
|
WizPageClientLast,
|
||
|
WizPageLastUninstall,
|
||
|
(DWORD)-1
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
DWORD PointPrintWizardPages[] =
|
||
|
{
|
||
|
|
||
|
WizPageClientUserInfo,
|
||
|
WizPageClientFileCopy,
|
||
|
(DWORD)-1
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
DWORD RemoteAdminPages[] =
|
||
|
{
|
||
|
|
||
|
WizPageRemoteAdminCopy,
|
||
|
WizPageLast,
|
||
|
WizPageLastUninstall,
|
||
|
(DWORD)-1
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
HINSTANCE FaxWizModuleHandle;
|
||
|
TCHAR SourceDirectory[4096];
|
||
|
TCHAR ClientSetupServerName[128];
|
||
|
BOOL MapiAvail;
|
||
|
BOOL Unattended;
|
||
|
BOOL SuppressReboot = FALSE;
|
||
|
BOOL NtGuiMode;
|
||
|
WIZ_DATA WizData;
|
||
|
BOOL OkToCancel;
|
||
|
|
||
|
BOOL PointPrintSetup;
|
||
|
DWORD RequestedSetupType;
|
||
|
DWORD InstallMode;
|
||
|
DWORD Installed;
|
||
|
DWORD InstallType;
|
||
|
DWORD InstalledPlatforms;
|
||
|
DWORD Enabled;
|
||
|
DWORD InstallThreadError;
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
FaxWizardDllInit(
|
||
|
HINSTANCE hInstance,
|
||
|
DWORD Reason,
|
||
|
LPVOID Context
|
||
|
)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
DLL initialization function.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
hInstance - Instance handle
|
||
|
Reason - Reason for the entrypoint being called
|
||
|
Context - Context record
|
||
|
|
||
|
Return Value:
|
||
|
|
||
|
TRUE - Initialization succeeded
|
||
|
FALSE - Initialization failed
|
||
|
|
||
|
--*/
|
||
|
|
||
|
{
|
||
|
if (Reason == DLL_PROCESS_ATTACH) {
|
||
|
FaxWizModuleHandle = hInstance;
|
||
|
DisableThreadLibraryCalls( hInstance );
|
||
|
HeapInitialize( NULL, NULL, NULL, 0 );
|
||
|
}
|
||
|
|
||
|
if (Reason == DLL_PROCESS_DETACH) {
|
||
|
HeapCleanup();
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
FaxWizInit(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
InitializeStringTable();
|
||
|
|
||
|
if (!NtGuiMode) {
|
||
|
InitializeMapi();
|
||
|
}
|
||
|
|
||
|
GetInstallationInfo( &Installed, &InstallType, &InstalledPlatforms, &Enabled );
|
||
|
|
||
|
//
|
||
|
// Sequentially enumerate platforms.
|
||
|
//
|
||
|
|
||
|
EnumPlatforms[PROCESSOR_ARCHITECTURE_INTEL] = 0;
|
||
|
EnumPlatforms[PROCESSOR_ARCHITECTURE_MIPS] = WRONG_PLATFORM;
|
||
|
EnumPlatforms[PROCESSOR_ARCHITECTURE_ALPHA] = 1;
|
||
|
EnumPlatforms[PROCESSOR_ARCHITECTURE_PPC] = WRONG_PLATFORM;
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
FaxWizGetError(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
return InstallThreadError;
|
||
|
}
|
||
|
|
||
|
|
||
|
VOID
|
||
|
WINAPI
|
||
|
FaxWizSetInstallMode(
|
||
|
DWORD RequestedInstallMode,
|
||
|
DWORD RequestedInstallType,
|
||
|
LPWSTR AnswerFile
|
||
|
)
|
||
|
{
|
||
|
InstallMode = RequestedInstallMode;
|
||
|
InstallType = RequestedInstallType;
|
||
|
|
||
|
if (InstallMode == (INSTALL_REMOVE | INSTALL_UNATTENDED) ) {
|
||
|
|
||
|
InstallMode = INSTALL_REMOVE;
|
||
|
Unattended = TRUE;
|
||
|
|
||
|
}
|
||
|
|
||
|
if (InstallMode == INSTALL_UNATTENDED) {
|
||
|
|
||
|
//
|
||
|
// initialize the answers
|
||
|
//
|
||
|
|
||
|
UnAttendInitialize( AnswerFile );
|
||
|
|
||
|
//
|
||
|
// set the install mode
|
||
|
//
|
||
|
|
||
|
if (_wcsicmp( UnattendAnswerTable[UAA_MODE].Answer.String, MODE_NEW ) == 0) {
|
||
|
InstallMode = INSTALL_NEW;
|
||
|
} else if (_wcsicmp( UnattendAnswerTable[UAA_MODE].Answer.String, MODE_UPGRADE ) == 0) {
|
||
|
InstallMode = INSTALL_UPGRADE;
|
||
|
} else if (_wcsicmp( UnattendAnswerTable[UAA_MODE].Answer.String, MODE_REMOVE ) == 0) {
|
||
|
InstallMode = INSTALL_REMOVE;
|
||
|
} else if (_wcsicmp( UnattendAnswerTable[UAA_MODE].Answer.String, MODE_DRIVERS ) == 0) {
|
||
|
InstallMode = INSTALL_DRIVERS;
|
||
|
} else {
|
||
|
InstallMode = INSTALL_NEW;
|
||
|
}
|
||
|
|
||
|
if (InstallMode == INSTALL_UPGRADE && Installed == FALSE) {
|
||
|
InstallMode = INSTALL_NEW;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// remember that faxsetup is doing an unattended setup
|
||
|
// this is the flag that all other code checks
|
||
|
//
|
||
|
|
||
|
Unattended = TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
BOOL
|
||
|
WINAPI
|
||
|
FaxWizPointPrint(
|
||
|
LPTSTR DirectoryName,
|
||
|
LPTSTR PrinterName
|
||
|
)
|
||
|
{
|
||
|
DWORD len;
|
||
|
LPTSTR p;
|
||
|
|
||
|
len = _tcslen(DirectoryName);
|
||
|
_tcscpy( SourceDirectory, DirectoryName );
|
||
|
|
||
|
p = _tcschr( SourceDirectory, TEXT('\\') );
|
||
|
if (p) {
|
||
|
*p = 0;
|
||
|
_tcscpy( ClientSetupServerName, &SourceDirectory[2] );
|
||
|
*p = TEXT('\\');
|
||
|
}
|
||
|
|
||
|
if (SourceDirectory[len-1] != TEXT('\\')) {
|
||
|
SourceDirectory[len] = TEXT('\\');
|
||
|
SourceDirectory[len+1] = 0;
|
||
|
}
|
||
|
|
||
|
if (PrinterName[0] == TEXT('\\') && PrinterName[1] == TEXT('\\')) {
|
||
|
_tcscpy( WizData.PrinterName, PrinterName );
|
||
|
} else {
|
||
|
WizData.PrinterName[0] = TEXT('\\');
|
||
|
WizData.PrinterName[1] = TEXT('\\');
|
||
|
WizData.PrinterName[2] = 0;
|
||
|
_tcscat( WizData.PrinterName, PrinterName );
|
||
|
}
|
||
|
|
||
|
InstallMode = INSTALL_NEW;
|
||
|
PointPrintSetup = TRUE;
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
VOID
|
||
|
SetThisPlatform(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
SYSTEM_INFO SystemInfo;
|
||
|
GetSystemInfo( &SystemInfo );
|
||
|
if ((SystemInfo.wProcessorArchitecture > 3) || (EnumPlatforms[SystemInfo.wProcessorArchitecture] == WRONG_PLATFORM)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
Platforms[EnumPlatforms[SystemInfo.wProcessorArchitecture]].Selected = TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
LPHPROPSHEETPAGE
|
||
|
WINAPI
|
||
|
FaxWizGetServerPages(
|
||
|
LPDWORD PageCount
|
||
|
)
|
||
|
{
|
||
|
SetThisPlatform();
|
||
|
RequestedSetupType = SETUP_TYPE_SERVER;
|
||
|
SetTitlesInStringTable();
|
||
|
return CreateWizardPages( FaxWizModuleHandle, SetupWizardPages, ServerWizardPages, PageCount );
|
||
|
}
|
||
|
|
||
|
|
||
|
LPHPROPSHEETPAGE
|
||
|
WINAPI
|
||
|
FaxWizGetWorkstationPages(
|
||
|
LPDWORD PageCount
|
||
|
)
|
||
|
{
|
||
|
SetThisPlatform();
|
||
|
RequestedSetupType = SETUP_TYPE_WORKSTATION;
|
||
|
SetTitlesInStringTable();
|
||
|
return CreateWizardPages( FaxWizModuleHandle, SetupWizardPages, WorkstationWizardPages, PageCount );
|
||
|
}
|
||
|
|
||
|
|
||
|
LPHPROPSHEETPAGE
|
||
|
WINAPI
|
||
|
FaxWizGetClientPages(
|
||
|
LPDWORD PageCount
|
||
|
)
|
||
|
{
|
||
|
SetThisPlatform();
|
||
|
RequestedSetupType = SETUP_TYPE_CLIENT;
|
||
|
SetTitlesInStringTable();
|
||
|
return CreateWizardPages( FaxWizModuleHandle, SetupWizardPages, ClientWizardPages, PageCount );
|
||
|
}
|
||
|
|
||
|
|
||
|
LPHPROPSHEETPAGE
|
||
|
WINAPI
|
||
|
FaxWizGetPointPrintPages(
|
||
|
LPDWORD PageCount
|
||
|
)
|
||
|
{
|
||
|
SetThisPlatform();
|
||
|
RequestedSetupType = SETUP_TYPE_POINT_PRINT;
|
||
|
SetTitlesInStringTable();
|
||
|
return CreateWizardPages( FaxWizModuleHandle, SetupWizardPages, PointPrintWizardPages, PageCount );
|
||
|
}
|
||
|
|
||
|
LPHPROPSHEETPAGE
|
||
|
WINAPI
|
||
|
FaxWizRemoteAdminPages(
|
||
|
LPDWORD PageCount
|
||
|
)
|
||
|
{
|
||
|
SetThisPlatform();
|
||
|
RequestedSetupType = SETUP_TYPE_REMOTE_ADMIN;
|
||
|
SetTitlesInStringTable();
|
||
|
return CreateWizardPages( FaxWizModuleHandle, SetupWizardPages, RemoteAdminPages, PageCount );
|
||
|
}
|
||
|
|
||
|
|
||
|
PFNPROPSHEETCALLBACK WINAPI
|
||
|
FaxWizGetPropertySheetCallback(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
return WizardCallback;
|
||
|
}
|
||
|
|
||
|
DWORD
|
||
|
DllRegisterServer(
|
||
|
VOID
|
||
|
)
|
||
|
{
|
||
|
OSVERSIONINFO OsVersion;
|
||
|
DWORD ProductType;
|
||
|
PROPSHEETHEADER psh;
|
||
|
LPHPROPSHEETPAGE WizardPageHandles;
|
||
|
DWORD PageCount;
|
||
|
DWORD Size;
|
||
|
LPTSTR EnvVar;
|
||
|
BOOL UseDefaults = TRUE;
|
||
|
SYSTEM_INFO SystemInfo;
|
||
|
BOOL NtGuiModeUpgrade = FALSE;
|
||
|
|
||
|
|
||
|
NtGuiMode = TRUE;
|
||
|
|
||
|
if (!FaxWizInit()) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
ZeroMemory( &OsVersion, sizeof(OSVERSIONINFO) );
|
||
|
OsVersion.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
|
||
|
GetVersionEx( &OsVersion );
|
||
|
|
||
|
ProductType = GetProductType();
|
||
|
if (ProductType == 0) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
GetSystemInfo( &SystemInfo );
|
||
|
|
||
|
SetThisPlatform();
|
||
|
|
||
|
if (ProductType == PRODUCT_TYPE_WINNT) {
|
||
|
RequestedSetupType = SETUP_TYPE_WORKSTATION;
|
||
|
} else {
|
||
|
RequestedSetupType = SETUP_TYPE_SERVER;
|
||
|
}
|
||
|
|
||
|
InstallMode = INSTALL_NEW;
|
||
|
Unattended = TRUE;
|
||
|
|
||
|
EnvVar = GetEnvVariable( TEXT("Upgrade") );
|
||
|
if (EnvVar) {
|
||
|
if (_wcsicmp( EnvVar, L"True" ) == 0) {
|
||
|
InstallMode = INSTALL_UPGRADE;
|
||
|
NtGuiModeUpgrade = TRUE;
|
||
|
}
|
||
|
MemFree( EnvVar );
|
||
|
}
|
||
|
|
||
|
if (InstallMode == INSTALL_UPGRADE && Installed == FALSE) {
|
||
|
InstallMode = INSTALL_NEW;
|
||
|
}
|
||
|
|
||
|
EnvVar = GetEnvVariable( TEXT("UnattendFile") );
|
||
|
if (EnvVar) {
|
||
|
if (UnAttendInitialize( EnvVar )) {
|
||
|
UseDefaults = FALSE;
|
||
|
}
|
||
|
MemFree( EnvVar );
|
||
|
} else if(Win9xUpg()) {
|
||
|
// t-briand: If we're upgrading from win9x, then we don't want to use the defaults.
|
||
|
// The unattend answer table will be set as a side effect of the call to Win9xUpg().
|
||
|
UseDefaults = FALSE;
|
||
|
}
|
||
|
|
||
|
if (UseDefaults) {
|
||
|
|
||
|
UnattendAnswerTable[0].Answer.String = GetString( IDS_UAA_MODE );
|
||
|
UnattendAnswerTable[1].Answer.String = GetString( IDS_UAA_PRINTER_NAME );
|
||
|
UnattendAnswerTable[2].Answer.String = GetString( IDS_UAA_FAX_PHONE );
|
||
|
UnattendAnswerTable[3].Answer.Bool = FALSE;
|
||
|
UnattendAnswerTable[4].Answer.String = GetString( IDS_UAA_DEST_PROFILENAME );
|
||
|
UnattendAnswerTable[5].Answer.Bool = FALSE;
|
||
|
UnattendAnswerTable[6].Answer.String = GetString( IDS_UAA_ROUTE_PROFILENAME );
|
||
|
UnattendAnswerTable[8].Answer.Bool = FALSE;
|
||
|
UnattendAnswerTable[9].Answer.String = GetString( IDS_UAA_DEST_PRINTERLIST );
|
||
|
UnattendAnswerTable[12].Answer.String = GetString( IDS_UAA_FAX_PHONE );
|
||
|
UnattendAnswerTable[14].Answer.Bool = TRUE;
|
||
|
UnattendAnswerTable[15].Answer.String = GetString( IDS_UAA_SERVER_NAME );
|
||
|
UnattendAnswerTable[16].Answer.String = GetString( IDS_UAA_SENDER_NAME );
|
||
|
UnattendAnswerTable[17].Answer.String = GetString( IDS_UAA_SENDER_FAX_AREA_CODE );
|
||
|
UnattendAnswerTable[18].Answer.String = GetString( IDS_UAA_SENDER_FAX_NUMBER );
|
||
|
|
||
|
UnattendAnswerTable[7].Answer.String =
|
||
|
StringDup( Platforms[EnumPlatforms[SystemInfo.wProcessorArchitecture]].OsPlatform );
|
||
|
|
||
|
UnattendAnswerTable[13].Answer.String = ExpandEnvironmentString( GetString( IDS_UAA_DEST_DIRPATH ) );
|
||
|
if (UnattendAnswerTable[13].Answer.String == NULL) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
} else {
|
||
|
|
||
|
if (UnattendAnswerTable[10].Answer.String) {
|
||
|
MemFree( UnattendAnswerTable[10].Answer.String );
|
||
|
}
|
||
|
|
||
|
if (UnattendAnswerTable[11].Answer.String) {
|
||
|
MemFree( UnattendAnswerTable[11].Answer.String );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
UnattendAnswerTable[10].Answer.String = NULL;
|
||
|
UnattendAnswerTable[11].Answer.String = NULL;
|
||
|
|
||
|
SetTitlesInStringTable();
|
||
|
|
||
|
//
|
||
|
// setup the wizard pages & property sheet
|
||
|
//
|
||
|
|
||
|
if (RequestedSetupType == SETUP_TYPE_WORKSTATION) {
|
||
|
WizardPageHandles = CreateWizardPages( FaxWizModuleHandle, SetupWizardPages, WorkstationWizardPages, &PageCount );
|
||
|
} else {
|
||
|
WizardPageHandles = CreateWizardPages( FaxWizModuleHandle, SetupWizardPages, ServerWizardPages, &PageCount );
|
||
|
}
|
||
|
|
||
|
if (WizardPageHandles == NULL || PageCount == 0) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
psh.dwSize = sizeof(PROPSHEETHEADER);
|
||
|
psh.dwFlags = PSH_WIZARD;
|
||
|
psh.hwndParent = NULL;
|
||
|
psh.hInstance = FaxWizModuleHandle;
|
||
|
psh.pszIcon = NULL;
|
||
|
psh.pszCaption = EMPTY_STRING;
|
||
|
psh.nPages = PageCount;
|
||
|
psh.nStartPage = 0;
|
||
|
psh.phpage = WizardPageHandles;
|
||
|
psh.pfnCallback = NULL;
|
||
|
|
||
|
__try {
|
||
|
|
||
|
PropertySheet( &psh );
|
||
|
|
||
|
} __except (EXCEPTION_EXECUTE_HANDLER) {
|
||
|
|
||
|
Size = GetExceptionCode();
|
||
|
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
// Win9xUpg
|
||
|
//
|
||
|
// This routine is the hook for the Windows 9x upgrade process. It looks for
|
||
|
// the fax95upg.inf file in the %SystemRoot% directory. If it's there, it
|
||
|
// uses it to prime the unattend answers. If not, we're not upgrading from
|
||
|
// win9x and it does nothing.
|
||
|
//
|
||
|
// As I write this, I'm wondering why the separate INF file was necessary instead
|
||
|
// of the unattend file used by the rest of the migration process. Ah well.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// None.
|
||
|
//
|
||
|
// Returns:
|
||
|
// TRUE if we're doing a Win9x upgrade; this implies that the unattend
|
||
|
// answers are properly set at the end of the function. Returns FALSE
|
||
|
// if not upgrading.
|
||
|
//
|
||
|
// Author:
|
||
|
// Brian Dewey (t-briand) 1997-8-15
|
||
|
BOOL
|
||
|
Win9xUpg()
|
||
|
{
|
||
|
TCHAR szFaxInfPath[MAX_PATH]; // Holds the full path to the INF file.
|
||
|
TCHAR szFaxInfPathRes[MAX_PATH]; // Path template from resource file.
|
||
|
BOOL bReturn;
|
||
|
|
||
|
if(!LoadString(FaxWizModuleHandle,
|
||
|
IDS_W95_INF_NAME,
|
||
|
szFaxInfPathRes,
|
||
|
sizeof(szFaxInfPathRes))) {
|
||
|
// Unable to load resource. Use default name.
|
||
|
_tcscpy(szFaxInfPathRes, TEXT("%SystemRoot\\fax95upg.inf"));
|
||
|
}
|
||
|
ExpandEnvironmentStrings(szFaxInfPathRes,
|
||
|
szFaxInfPath,
|
||
|
sizeof(szFaxInfPath));
|
||
|
// Assume success. The failure will be caught in UnAttendInitialize when I
|
||
|
// give it a bogus filename.
|
||
|
bReturn = UnAttendInitialize(szFaxInfPath);
|
||
|
return bReturn;
|
||
|
}
|
||
|
|