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

1751 lines
41 KiB
C

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
registry.c
Abstract:
This file provides access to the registry.
Environment:
WIN32 User Mode
Author:
Wesley Witt (wesw) 17-Feb-1996
--*/
#include "wizard.h"
#pragma hdrstop
BOOL
CreateDeviceProvider(
HKEY hKey,
LPTSTR ProviderKey,
LPTSTR FriendlyName,
LPTSTR ImageName,
LPTSTR ProviderName
)
{
hKey = OpenRegistryKey( hKey, ProviderKey, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
DebugPrint(( TEXT("could not create/open registry key (test)") ));
return FALSE;
}
if (!SetRegistryString( hKey, REGVAL_FRIENDLY_NAME, FriendlyName )) {
DebugPrint(( TEXT("could not add friendly name value") ));
return FALSE;
}
if (!SetRegistryStringExpand( hKey, REGVAL_IMAGE_NAME, ImageName )) {
DebugPrint(( TEXT("could not add image name value") ));
return FALSE;
}
if (!SetRegistryString( hKey, REGVAL_PROVIDER_NAME, ProviderName )) {
DebugPrint(( TEXT("could not add provider name value") ));
return FALSE;
}
RegCloseKey( hKey );
return TRUE;
}
BOOL
CreateRoutingMethod(
HKEY hKey,
LPTSTR MethodName,
LPTSTR FunctionName,
LPTSTR FriendlyName,
LPTSTR Guid
)
{
hKey = OpenRegistryKey( hKey, MethodName, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
DebugPrint(( TEXT("could not create/open registry key for routing method") ));
return FALSE;
}
if (!SetRegistryString( hKey, REGVAL_FUNCTION_NAME, FunctionName )) {
DebugPrint(( TEXT("could not add function name value") ));
return FALSE;
}
if (!SetRegistryString( hKey, REGVAL_FRIENDLY_NAME, FriendlyName )) {
DebugPrint(( TEXT("could not add friendly name value") ));
return FALSE;
}
if (!SetRegistryString( hKey, REGVAL_GUID, Guid )) {
DebugPrint(( TEXT("could not add function name value") ));
return FALSE;
}
RegCloseKey( hKey );
return TRUE;
}
BOOL
CreateMicrosoftRoutingExtension(
HKEY hKey,
LPTSTR RoutingKey,
LPTSTR FriendlyName,
LPTSTR ImageName
)
{
HKEY hKeyMethods;
hKey = OpenRegistryKey( hKey, RoutingKey, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("could not create/open registry key for routing extension") ));
return FALSE;
}
if (!SetRegistryString( hKey, REGVAL_FRIENDLY_NAME, FriendlyName )) {
Assert(( ! TEXT("could not add friendly name value") ));
return FALSE;
}
if (!SetRegistryStringExpand( hKey, REGVAL_IMAGE_NAME, ImageName )) {
Assert(( ! TEXT("could not add image name value") ));
return FALSE;
}
hKeyMethods = OpenRegistryKey( hKey, REGKEY_ROUTING_METHODS, TRUE, KEY_ALL_ACCESS );
if (!hKeyMethods) {
Assert(( ! TEXT("could not create/open registry key for routing methods") ));
return FALSE;
}
CreateRoutingMethod( hKeyMethods, REGKEY_ROUTING_METHOD_EMAIL, REGVAL_RM_EMAIL_FUNCTION, REGVAL_RM_EMAIL_FRIENDLY, REGVAL_RM_EMAIL_GUID );
CreateRoutingMethod( hKeyMethods, REGKEY_ROUTING_METHOD_FOLDER, REGVAL_RM_FOLDER_FUNCTION, REGVAL_RM_FOLDER_FRIENDLY, REGVAL_RM_FOLDER_GUID );
CreateRoutingMethod( hKeyMethods, REGKEY_ROUTING_METHOD_INBOX, REGVAL_RM_INBOX_FUNCTION, REGVAL_RM_INBOX_FRIENDLY, REGVAL_RM_INBOX_GUID );
CreateRoutingMethod( hKeyMethods, REGKEY_ROUTING_METHOD_PRINTING, REGVAL_RM_PRINTING_FUNCTION, REGVAL_RM_PRINTING_FRIENDLY, REGVAL_RM_PRINTING_GUID );
RegCloseKey( hKeyMethods );
RegCloseKey( hKey );
return TRUE;
}
VOID
RegCreateFaxDevice(
HKEY hKeyDev,
DWORD PermanentLineID,
DWORD Rings,
DWORD Priority,
DWORD Flags,
LPTSTR DeviceName,
LPTSTR ProviderName,
LPTSTR Csid,
LPTSTR Tsid,
DWORD RoutingMask,
LPTSTR RoutePrinterName,
LPTSTR RouteDir,
LPTSTR RouteProfile
)
{
HKEY hKey;
HKEY hKeyRouting;
TCHAR PortName[32];
_stprintf( PortName, TEXT("%08d"), PermanentLineID );
hKey = OpenRegistryKey( hKeyDev, PortName, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open device registry key") ));
return;
}
if (!SetRegistryDword( hKey, REGVAL_PERMANENT_LINEID, PermanentLineID )) {
Assert(( ! TEXT("Could not set device id registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_FLAGS, Flags )) {
Assert(( ! TEXT("Could not set device flags registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_RINGS, Rings )) {
Assert(( ! TEXT("Could not set device rings registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_PRIORITY, Priority )) {
Assert(( ! TEXT("Could not set device rings registry value") ));
}
if (!SetRegistryString( hKey, REGVAL_DEVICE_NAME, DeviceName )) {
Assert(( ! TEXT("Could not set device name registry value") ));
}
if (!SetRegistryString( hKey, REGVAL_PROVIDER, ProviderName )) {
Assert(( ! TEXT("Could not set provider name registry value") ));
}
if (!SetRegistryString( hKey, REGVAL_ROUTING_CSID, Csid )) {
Assert(( ! TEXT("Could not set csid registry value") ));
}
if (!SetRegistryString( hKey, REGVAL_ROUTING_TSID, Tsid )) {
Assert(( ! TEXT("Could not set csid registry value") ));
}
hKeyRouting = OpenRegistryKey( hKey, REGKEY_ROUTING, TRUE, KEY_ALL_ACCESS );
if (!hKeyRouting) {
Assert(( ! TEXT("Could not open routing registry key") ));
return;
}
if (!SetRegistryString( hKeyRouting, REGVAL_ROUTING_PRINTER, RoutePrinterName )) {
Assert(( ! TEXT("Could not set printer name registry value") ));
}
if (!SetRegistryString( hKeyRouting, REGVAL_ROUTING_DIR, RouteDir )) {
Assert(( ! TEXT("Could not set routing dir registry value") ));
}
if (!SetRegistryString( hKeyRouting, REGVAL_ROUTING_PROFILE, RouteProfile )) {
Assert(( ! TEXT("Could not set routing profile name registry value") ));
}
if (!SetRegistryDword( hKeyRouting, REGVAL_ROUTING_MASK, RoutingMask )) {
Assert(( ! TEXT("Could not set routing mask registry value") ));
}
RegCloseKey( hKeyRouting );
RegCloseKey( hKey );
}
BOOL
SetServerRegistryData(
VOID
)
{
HKEY hKey;
LONG rVal;
DWORD i;
HKEY hKeyDev;
HANDLE hNull;
STARTUPINFO si;
PROCESS_INFORMATION pi;
TCHAR CmdLine[128];
DWORD RoutingMask;
LPTSTR LodCmdLine;
//
// set top level defaults
//
hKey = OpenRegistryKey( HKEY_LOCAL_MACHINE, REGKEY_SOFTWARE, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open software registry key") ));
return FALSE;
}
if (InstallMode & INSTALL_NEW) {
if (!SetRegistryDword( hKey, REGVAL_RETRIES, DEFAULT_REGVAL_RETRIES )) {
Assert(( ! TEXT("Could not set retries registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_RETRYDELAY, DEFAULT_REGVAL_RETRYDELAY )) {
Assert(( ! TEXT("Could not set retry delay registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_DIRTYDAYS, DEFAULT_REGVAL_DIRTYDAYS )) {
Assert(( ! TEXT("Could not set dirty days registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_QUEUE_PAUSED, DEFAULT_REGVAL_QUEUE_PAUSED )) {
Assert(( ! TEXT("Could not set queue paused registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_JOB_NUMBER, DEFAULT_REGVAL_JOB_NUMBER )) {
Assert(( ! TEXT("Could not net job number registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_BRANDING, DEFAULT_REGVAL_BRANDING )) {
Assert(( ! TEXT("Could not set branding registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_USE_DEVICE_TSID, DEFAULT_REGVAL_USEDEVICETSID )) {
Assert(( ! TEXT("Could not set usedevicetsid registry value") ));
}
if (!SetRegistryString( hKey, REGVAL_INBOUND_PROFILE, EMPTY_STRING )) {
Assert(( ! TEXT("Could not set inbound profile registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_SERVERCP, DEFAULT_REGVAL_SERVERCP )) {
Assert(( ! TEXT("Could not set servercp registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_STARTCHEAP, DEFAULT_REGVAL_STARTCHEAP )) {
Assert(( ! TEXT("Could not set startcheap registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_STOPCHEAP, DEFAULT_REGVAL_STOPCHEAP )) {
Assert(( ! TEXT("Could not set stopcheap registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_ARCHIVEFLAG, DEFAULT_REGVAL_ARCHIVEFLAG )) {
Assert(( ! TEXT("Could not set archiveflag registry value") ));
}
if (!SetRegistryString( hKey, REGVAL_ARCHIVEDIR, DEFAULT_REGVAL_ARCHIVEDIR )) {
Assert(( ! TEXT("Could not set archive dir registry value") ));
}
RegCloseKey( hKey );
}
if (InstallMode & INSTALL_NEW) {
hKeyDev = OpenRegistryKey( HKEY_LOCAL_MACHINE, REGKEY_FAX_DEVICES, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open devices registry key") ));
return FALSE;
}
//
// set the routing mask
//
RoutingMask = 0;
if (WizData.RoutePrint) {
RoutingMask |= LR_PRINT;
}
if (WizData.RouteStore) {
RoutingMask |= LR_STORE;
}
if (WizData.RouteMail) {
RoutingMask |= LR_INBOX;
}
if (WizData.UseDefaultPrinter || WizData.RoutePrinterName[0]) {
RoutingMask |= LR_PRINT;
}
//
// enumerate the devices and create the registry data
//
for (i=0; i<FaxDevices; i++) {
if ((InstallType & FAX_INSTALL_WORKSTATION) && (!LineInfo[i].Selected)) {
continue;
}
RegCreateFaxDevice(
hKeyDev,
LineInfo[i].PermanentLineID,
LineInfo[i].Rings,
i+1,
LineInfo[i].Flags,
LineInfo[i].DeviceName,
LineInfo[i].ProviderName,
WizData.Csid,
WizData.Tsid,
RoutingMask,
WizData.RoutePrinterName,
WizData.RouteDir,
WizData.RouteProfile
);
}
RegCloseKey( hKeyDev );
}
//
// create the device providers
//
hKeyDev = OpenRegistryKey( HKEY_LOCAL_MACHINE, REGKEY_DEVICE_PROVIDER_KEY, TRUE, KEY_ALL_ACCESS );
if (!hKeyDev) {
Assert(( ! TEXT("Could not open device provider registry key") ));
return FALSE;
}
CreateDeviceProvider(
hKeyDev,
REGKEY_MODEM_PROVIDER,
REGVAL_MODEM_FRIENDLY_NAME_TEXT,
REGVAL_MODEM_IMAGE_NAME_TEXT,
REGVAL_MODEM_PROVIDER_NAME_TEXT
);
RegCloseKey( hKeyDev );
//
// create the routing extensions
//
hKeyDev = OpenRegistryKey( HKEY_LOCAL_MACHINE, REGKEY_ROUTING_EXTENSION_KEY, TRUE, KEY_ALL_ACCESS );
if (!hKeyDev) {
Assert(( ! TEXT("Could not open routing extension registry key") ));
return FALSE;
}
CreateMicrosoftRoutingExtension(
hKeyDev,
REGKEY_ROUTING_EXTENSION,
REGVAL_ROUTE_FRIENDLY_NAME,
REGVAL_ROUTE_IMAGE_NAME
);
RegCloseKey( hKeyDev );
//
// set the user's preferences
//
if (InstallMode & INSTALL_NEW) {
hKey = OpenRegistryKey( HKEY_CURRENT_USER, REGKEY_FAX_SETUP, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open fax setup registry key") ));
return FALSE;
}
if (!SetRegistryStringExpand( hKey, REGVAL_CP_LOCATION, DEFAULT_COVERPAGE_DIR )) {
Assert(( ! TEXT("Could not set coverpage dir registry value") ));
}
if (!SetRegistryString( hKey, REGVAL_CP_EDITOR, COVERPAGE_EDITOR )) {
Assert(( ! TEXT("Could not set coverpage editor registry value") ));
}
if (!SetRegistryString(
hKey,
REGVAL_FAX_PROFILE,
WizData.MapiProfile[0] ? WizData.MapiProfile : DEFAULT_FAX_PROFILE ))
{
Assert(( ! TEXT("Could not set fax profile name registry value") ));
}
RegCloseKey( hKey );
}
//
// create the perfmon registry data
//
hKey = OpenRegistryKey( HKEY_LOCAL_MACHINE, REGKEY_FAXPERF, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open fax perfmon registry key") ));
return FALSE;
}
if (!SetRegistryStringExpand( hKey, REGVAL_OPEN, REGVAL_OPEN_DATA )) {
Assert(( ! TEXT("Could not set perfmon registry value") ));
}
if (!SetRegistryStringExpand( hKey, REGVAL_CLOSE, REGVAL_CLOSE_DATA )) {
Assert(( ! TEXT("Could not set perfmon registry value") ));
}
if (!SetRegistryStringExpand( hKey, REGVAL_COLLECT, REGVAL_COLLECT_DATA )) {
Assert(( ! TEXT("Could not set perfmon registry value") ));
}
if (!SetRegistryStringExpand( hKey, REGVAL_LIBRARY, REGVAL_LIBRARY_DATA )) {
Assert(( ! TEXT("Could not set perfmon registry value") ));
}
RegCloseKey( hKey );
//
// load the performance counters
//
hNull = CreateFile(
TEXT("nul"),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);
if (hNull == INVALID_HANDLE_VALUE) {
rVal = GetLastError();
return FALSE;
}
GetStartupInfo( &si );
si.hStdInput = hNull;
si.hStdOutput = hNull;
si.hStdError = hNull;
si.dwFlags = STARTF_USESTDHANDLES;
_tcscpy( CmdLine, TEXT("unlodctr fax") );
rVal = CreateProcess(
NULL,
CmdLine,
NULL,
NULL,
TRUE,
DETACHED_PROCESS,
NULL,
NULL,
&si,
&pi
);
if (!rVal) {
rVal = GetLastError();
return FALSE;
}
WaitForSingleObject( pi.hProcess, INFINITE );
if (NtGuiMode) {
LodCmdLine = ExpandEnvironmentString( TEXT("lodctr %windir%\\system32\\faxperf.ini") );
if (!LodCmdLine) {
return FALSE;
}
} else {
LodCmdLine = TEXT("lodctr faxperf.ini");
}
_tcscpy( CmdLine, LodCmdLine );
rVal = CreateProcess(
NULL,
CmdLine,
NULL,
NULL,
TRUE,
DETACHED_PROCESS,
NULL,
NtGuiMode ? NULL : SourceDirectory,
&si,
&pi
);
if (!rVal) {
rVal = GetLastError();
return FALSE;
}
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( hNull );
CreateFileAssociation(
COVERPAGE_EXTENSION,
COVERPAGE_ASSOC_NAME,
COVERPAGE_ASSOC_DESC,
COVERPAGE_OPEN_COMMAND,
NULL,
NULL,
NULL,
0
);
return TRUE;
}
BOOL
SetClientRegistryData(
VOID
)
{
TCHAR FaxNumber[LT_USER_NAME+LT_AREA_CODE+1];
HKEY hKey;
if (InstallMode & INSTALL_NEW) {
hKey = OpenRegistryKey( HKEY_CURRENT_USER, REGKEY_USERINFO, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open fax user info registry key") ));
return FALSE;
}
if (!SetRegistryString( hKey, REGVAL_FULLNAME, WizData.UserName )) {
Assert(( ! TEXT("Could not set user name registry value") ));
}
if (WizData.AreaCode[0]) {
_stprintf( FaxNumber, TEXT("(%s) %s"), WizData.AreaCode, WizData.PhoneNumber );
} else {
_tcscpy( FaxNumber, WizData.PhoneNumber );
}
if (!SetRegistryString( hKey, REGVAL_FAX_NUMBER, FaxNumber )) {
Assert(( ! TEXT("Could not set fax phone number registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_LAST_COUNTRYID, CurrentCountryId )) {
Assert(( ! TEXT("Could not set last country id registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_DIAL_AS_ENTERED, 0 )) {
Assert(( ! TEXT("Could not set dial as entered registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_ALWAYS_ON_TOP, BST_UNCHECKED )) {
Assert(( ! TEXT("Could not set always on top registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_SOUND_NOTIFICATION, BST_UNCHECKED )) {
Assert(( ! TEXT("Could not set sound notification registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_ENABLE_MANUAL_ANSWER, BST_UNCHECKED )) {
Assert(( ! TEXT("Could not set enable manual answer registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_TASKBAR, BST_CHECKED )) {
Assert(( ! TEXT("Could not set enable manual answer registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_VISUAL_NOTIFICATION, BST_CHECKED )) {
Assert(( ! TEXT("Could not set visual notification registry value") ));
}
if (!SetRegistryString( hKey, REGVAL_LAST_RECAREACODE, CurrentAreaCode )) {
Assert(( ! TEXT("Could not set area code registry value") ));
}
RegCloseKey( hKey );
hKey = OpenRegistryKey( HKEY_CURRENT_USER, REGKEY_FAX_SETUP, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open fax setup registry key") ));
return FALSE;
}
if (!SetRegistryDword( hKey, REGVAL_FAXINSTALLED, TRUE )) {
Assert(( ! TEXT("Could not set installed registry value") ));
}
if (!SetRegistryDword( hKey, REGVAL_FAXINSTALL_TYPE, FAX_INSTALL_NETWORK_CLIENT )) {
Assert(( ! TEXT("Could not set install type registry value") ));
}
if (!SetRegistryStringExpand( hKey, REGVAL_CP_LOCATION, DEFAULT_COVERPAGE_DIR )) {
Assert(( ! TEXT("Could not set coverpage dir registry value") ));
}
if (!SetRegistryStringExpand( hKey, REGVAL_CP_EDITOR, COVERPAGE_EDITOR )) {
Assert(( ! TEXT("Could not set coverpage editor registry value") ));
}
if (!SetRegistryString(
hKey,
REGVAL_FAX_PROFILE,
WizData.MapiProfile[0] ? WizData.MapiProfile : DEFAULT_FAX_PROFILE ))
{
Assert(( ! TEXT("Could not set profile name registry value") ));
}
RegCloseKey( hKey );
}
#ifdef MSFT_FAXVIEW
hKey = OpenRegistryKey( HKEY_CURRENT_USER, REGKEY_FAXVIEW, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open fax viewer registry key") ));
return FALSE;
}
if (!SetRegistryString( hKey, REGVAL_LAST_DIR, WizData.RouteDir )) {
Assert(( ! TEXT("Could not set coverpage editor registry value") ));
}
RegCloseKey( hKey );
#endif
CreateFileAssociation(
COVERPAGE_EXTENSION,
COVERPAGE_ASSOC_NAME,
COVERPAGE_ASSOC_DESC,
COVERPAGE_OPEN_COMMAND,
NULL,
NULL,
NULL,
0
);
#ifdef MSFT_FAXVIEW
CreateFileAssociation(
FAXVIEW_EXTENSION,
FAXVIEW_ASSOC_NAME,
FAXVIEW_ASSOC_DESC,
FAXVIEW_OPEN_COMMAND,
FAXVIEW_PRINT_COMMAND,
FAXVIEW_PRINTTO_COMMAND,
FAXVIEW_FILE_NAME,
FAXVIEW_ICON_INDEX
);
CreateFileAssociation(
FAXVIEW_EXTENSION2,
FAXVIEW_ASSOC_NAME,
FAXVIEW_ASSOC_DESC,
FAXVIEW_OPEN_COMMAND,
FAXVIEW_PRINT_COMMAND,
FAXVIEW_PRINTTO_COMMAND,
FAXVIEW_FILE_NAME,
FAXVIEW_ICON_INDEX
);
#endif
#ifdef USE_WORDPAD
if (IsWordpadInstalled()) {
ChangeTxtFileAssociation();
} else if (InstallWordpad()) {
ChangeTxtFileAssociation();
}
#endif
return TRUE;
}
BOOL
SetSoundRegistryData()
{
HKEY hKey;
hKey = OpenRegistryKey( HKEY_CURRENT_USER, REGKEY_EVENT_LABEL, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open event label registry key") ));
return FALSE;
}
if (!SetRegistryString( hKey, NULL, TEXT("Incoming Fax") )) {
Assert(( ! TEXT("Could not set event label registry value") ));
}
RegCloseKey( hKey );
hKey = OpenRegistryKey( HKEY_CURRENT_USER, REGKEY_FAXSTAT, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open faxstat registry key") ));
return FALSE;
}
if (!SetRegistryString( hKey, NULL, TEXT("Fax Monitor") )) {
Assert(( ! TEXT("Could not set faxstat registry value") ));
}
RegCloseKey( hKey );
hKey = OpenRegistryKey( HKEY_CURRENT_USER, REGKEY_SCHEMES_DEFAULT, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open default sound registry key") ));
return FALSE;
}
if (!SetRegistryString( hKey, NULL, TEXT("ringin.wav") )) {
Assert(( ! TEXT("Could not set default sound registry value") ));
}
RegCloseKey( hKey );
hKey = OpenRegistryKey( HKEY_CURRENT_USER, REGKEY_SCHEMES_CURRENT, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open current sound registry key") ));
return FALSE;
}
if (!SetRegistryString( hKey, NULL, TEXT("ringin.wav") )) {
Assert(( ! TEXT("Could not set current sound registry value") ));
}
RegCloseKey( hKey );
}
BOOL
GetUserInformation(
LPTSTR *UserName,
LPTSTR *FaxNumber,
LPTSTR *AreaCode
)
{
HKEY hKey;
hKey = OpenRegistryKey( HKEY_CURRENT_USER, REGKEY_USERINFO, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open fax user info registry key") ));
return FALSE;
}
*UserName = GetRegistryString( hKey, REGVAL_FULLNAME, EMPTY_STRING );
if (!*UserName) {
Assert(( ! TEXT("Could not query user name registry value") ));
}
*FaxNumber = GetRegistryString( hKey, REGVAL_FAX_NUMBER, EMPTY_STRING );
if (!*FaxNumber) {
Assert(( ! TEXT("Could not query fax number registry value") ));
}
*AreaCode = MemAlloc( (LT_AREA_CODE+1) * sizeof(TCHAR) );
if (*AreaCode && (*FaxNumber)[0] == TEXT('(')) {
LPTSTR p = _tcschr( *FaxNumber, TEXT('-') );
if (p) {
*p = 0;
_tcscpy( *AreaCode, &(*FaxNumber)[1] );
*p = TEXT('-');
}
}
RegCloseKey( hKey );
return TRUE;
}
BOOL
GetInstallationInfo(
LPDWORD Installed,
LPDWORD InstallType,
LPDWORD InstalledPlatforms,
LPDWORD Enabled
)
{
HKEY hKey;
LONG rVal;
if (Installed) {
*Installed = 0;
}
if (InstallType) {
*InstallType = 0;
}
if (InstalledPlatforms) {
*InstalledPlatforms = 0;
}
rVal = RegOpenKey(
HKEY_LOCAL_MACHINE,
REGKEY_FAX_SETUP,
&hKey
);
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("Could not open setup registry key, ec=0x%08x"), rVal ));
return FALSE;
}
if (Installed) {
*Installed = GetRegistryDword( hKey, REGVAL_FAXINSTALLED );
}
if (InstallType) {
*InstallType = GetRegistryDword( hKey, REGVAL_FAXINSTALL_TYPE );
}
if (InstalledPlatforms) {
*InstalledPlatforms = GetRegistryDword( hKey, REGVAL_FAXINSTALLED_PLATFORMS );
}
RegCloseKey( hKey );
return TRUE;
}
BOOL
SetInstalledFlag(
BOOL Installed
)
{
HKEY hKey;
HKEY hKeySetup;
DWORD RoutingMask;
//
// set the routing mask
//
RoutingMask = 0;
if (WizData.RoutePrint) {
RoutingMask |= LR_PRINT;
}
if (WizData.RouteStore) {
RoutingMask |= LR_STORE;
}
if (WizData.RouteMail) {
RoutingMask |= LR_INBOX;
}
if (WizData.UseDefaultPrinter || WizData.RoutePrinterName[0]) {
RoutingMask |= LR_PRINT;
}
hKey = OpenRegistryKey( HKEY_LOCAL_MACHINE, REGKEY_FAX_SETUP, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open setup registry key") ));
return FALSE;
}
if (!SetRegistryDword( hKey, REGVAL_FAXINSTALLED, Installed )) {
Assert(( ! TEXT("Could not set installed registry value") ));
}
hKeySetup = OpenRegistryKey( hKey, REGKEY_FAX_SETUP_ORIG, TRUE, KEY_ALL_ACCESS );
if (!hKeySetup) {
Assert(( ! TEXT("Could not open fax setup registry key") ));
return FALSE;
}
if (!SetRegistryString( hKeySetup, REGVAL_ROUTING_PRINTER, WizData.RoutePrinterName )) {
Assert(( ! TEXT("Could not set printer name registry value") ));
}
if (!SetRegistryString( hKeySetup, REGVAL_ROUTING_DIR, WizData.RouteDir )) {
Assert(( ! TEXT("Could not set routing dir registry value") ));
}
if (!SetRegistryString( hKeySetup, REGVAL_ROUTING_PROFILE, WizData.RouteProfile )) {
Assert(( ! TEXT("Could not set routing profile name registry value") ));
}
if (!SetRegistryString( hKeySetup, REGVAL_ROUTING_CSID, WizData.Csid )) {
Assert(( ! TEXT("Could not set routing csid registry value") ));
}
if (!SetRegistryString( hKeySetup, REGVAL_ROUTING_TSID, WizData.Tsid )) {
Assert(( ! TEXT("Could not set routing tsid registry value") ));
}
if (!SetRegistryDword( hKeySetup, REGVAL_ROUTING_MASK, RoutingMask )) {
Assert(( ! TEXT("Could not set routing mask registry value") ));
}
if (!SetRegistryDword( hKeySetup, REGVAL_RINGS, 2 )) {
Assert(( ! TEXT("Could not set rings registry value") ));
}
RegCloseKey( hKeySetup );
RegCloseKey( hKey );
return TRUE;
}
BOOL
SetInstallType(
DWORD InstallType
)
{
HKEY hKey;
hKey = OpenRegistryKey( HKEY_LOCAL_MACHINE, REGKEY_FAX_SETUP, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open setup registry key") ));
return FALSE;
}
InstallType |= GetRegistryDword( hKey, REGVAL_FAXINSTALL_TYPE );
if (!SetRegistryDword( hKey, REGVAL_FAXINSTALL_TYPE, InstallType )) {
Assert(( ! TEXT("Could not set install type registry value") ));
}
RegCloseKey( hKey );
return TRUE;
}
BOOL
SetInstalledPlatforms(
DWORD PlatformsMask
)
{
HKEY hKey;
hKey = OpenRegistryKey( HKEY_LOCAL_MACHINE, REGKEY_FAX_SETUP, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open setup registry key") ));
return FALSE;
}
PlatformsMask |= GetRegistryDword( hKey, REGVAL_FAXINSTALLED_PLATFORMS );
if (!SetRegistryDword( hKey, REGVAL_FAXINSTALLED_PLATFORMS, PlatformsMask )) {
Assert(( ! TEXT("Could not set install type registry value") ));
}
RegCloseKey( hKey );
return TRUE;
}
BOOL
DeleteRegistryTree(
HKEY hKey,
LPTSTR SubKey
)
{
LONG Rval;
HKEY hKeyCur;
TCHAR KeyName[256];
DWORD KeyNameSize;
FILETIME FileTime;
DWORD KeyCount;
Rval = RegOpenKeyEx( hKey, SubKey, 0, KEY_ALL_ACCESS, &hKeyCur );
if (Rval != ERROR_SUCCESS) {
return FALSE;
}
KeyCount = GetSubKeyCount( hKeyCur );
if (KeyCount == 0) {
RegCloseKey( hKeyCur );
RegDeleteKey( hKey, SubKey );
return TRUE;
}
while( TRUE ) {
KeyNameSize = sizeof(KeyName);
Rval = RegEnumKeyEx( hKeyCur, 0, KeyName, &KeyNameSize, 0, NULL, NULL, &FileTime );
if (Rval == ERROR_NO_MORE_ITEMS) {
break;
} else if (Rval != ERROR_SUCCESS) {
RegCloseKey( hKeyCur );
return FALSE;
}
if (!DeleteRegistryTree( hKeyCur, KeyName )) {
RegCloseKey( hKeyCur );
return FALSE;
}
}
RegCloseKey( hKeyCur );
RegDeleteKey( hKey, SubKey );
return TRUE;
}
BOOL
DeleteFaxRegistryData(
VOID
)
{
LONG Rval;
HKEY hKeyCur;
STARTUPINFO si;
PROCESS_INFORMATION pi;
HANDLE hNull;
TCHAR CmdLine[128];
DeleteRegistryTree( HKEY_LOCAL_MACHINE, REGKEY_FAXSERVER );
DeleteRegistryTree( HKEY_CURRENT_USER, REGKEY_FAXSERVER );
DeleteRegistryTree( HKEY_LOCAL_MACHINE, REGKEY_SETUP_UNINSTALL );
DeleteRegistryTree( HKEY_CURRENT_USER, REGKEY_EVENT_LABEL );
DeleteRegistryTree( HKEY_CURRENT_USER, REGKEY_FAXSTAT );
#ifdef MSFT_FAXVIEW
DeleteRegistryTree( HKEY_CLASSES_ROOT, FAXVIEW_ASSOC_NAME );
#endif
Rval = RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
TEXT( "Software\\Microsoft\\Exchange\\Client\\Extensions" ),
0,
KEY_ALL_ACCESS,
&hKeyCur
);
if (Rval == ERROR_SUCCESS) {
RegDeleteValue( hKeyCur, TEXT( EXCHANGE_CLIENT_EXT_NAME ) );
RegCloseKey( hKeyCur );
}
#ifdef MSFT_FAXVIEW
ResetFileAssociation( FAXVIEW_EXTENSION, WANGIMAGE_ASSOC_NAME );
ResetFileAssociation( FAXVIEW_EXTENSION2, WANGIMAGE_ASSOC_NAME );
#endif
//
// unload the performance counters
//
hNull = CreateFile(
TEXT("nul"),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);
if (hNull != INVALID_HANDLE_VALUE) {
GetStartupInfo( &si );
si.hStdInput = hNull;
si.hStdOutput = hNull;
si.hStdError = hNull;
si.dwFlags = STARTF_USESTDHANDLES;
_tcscpy( CmdLine, TEXT("unlodctr fax") );
if (CreateProcess(
NULL,
CmdLine,
NULL,
NULL,
TRUE,
DETACHED_PROCESS,
NULL,
NULL,
&si,
&pi
))
{
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hThread );
CloseHandle( pi.hProcess );
}
CloseHandle( hNull );
}
return TRUE;
}
VOID
DeleteModemRegistryKey(
VOID
)
{
HKEY hKeyDev;
INT rVal;
DWORD MaxSubKeyLen;
LPTSTR KeyNameBuf;
DWORD i;
DWORD SubKeyLen;
DWORD KeyNameLen;
rVal = RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
REGKEY_FAX_DEVICES,
0,
KEY_ALL_ACCESS,
&hKeyDev
);
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("Could not open devices registry key, ec=0x%08x"), rVal ));
return;
}
MaxSubKeyLen = GetMaxSubKeyLen( hKeyDev );
if (!MaxSubKeyLen) {
return;
}
KeyNameLen =
MaxSubKeyLen +
sizeof(TCHAR) +
_tcslen( REGKEY_MODEM ) +
sizeof(TCHAR) +
32;
KeyNameBuf = MemAlloc( KeyNameLen );
if (KeyNameBuf == NULL) {
DebugPrint(( TEXT("DeleteModemRegistryKey: MemAlloc failed" ) ));
return;
}
rVal = ERROR_SUCCESS;
i = 0;
while (TRUE) {
SubKeyLen = MaxSubKeyLen + sizeof(TCHAR);
rVal = RegEnumKeyEx(
hKeyDev,
i++,
KeyNameBuf,
&SubKeyLen,
NULL,
NULL,
NULL,
NULL
);
if (rVal != ERROR_SUCCESS) {
break;
}
_stprintf( &KeyNameBuf[SubKeyLen], TEXT( "\\%s") , REGKEY_MODEM );
DeleteRegistryTree( hKeyDev, KeyNameBuf );
};
RegCloseKey( hKeyDev );
}
BOOL
SetUnInstallInfo(
VOID
)
{
HKEY hKey;
TCHAR UninstallString[MAX_PATH*2];
hKey = OpenRegistryKey( HKEY_LOCAL_MACHINE, REGKEY_SETUP_UNINSTALL, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open setup uninstall registry key") ));
return FALSE;
}
if (!SetRegistryString( hKey, REGVAL_DISPLAY_NAME, GetProductName() )) {
Assert(( ! TEXT("Could not set display name registry value") ));
}
ExpandEnvironmentStrings( UNINSTALL_STRING, UninstallString, sizeof(UninstallString) );
if (!SetRegistryString( hKey, REGVAL_UNINSTALL_STRING, UninstallString )) {
Assert(( ! TEXT("Could not set display name registry value") ));
}
RegCloseKey( hKey );
return TRUE;
}
BOOL
DeleteUnInstallInfo(
VOID
)
{
RegDeleteKey( HKEY_LOCAL_MACHINE, REGKEY_SETUP_UNINSTALL );
return TRUE;
}
BOOL
ResetFileAssociation(
LPWSTR FileExtension,
LPWSTR FileAssociationName
)
{
HKEY hKey;
hKey = OpenRegistryKey( HKEY_CLASSES_ROOT, FileExtension, TRUE, KEY_ALL_ACCESS );
if (!hKey) {
Assert(( ! TEXT("Could not open file extension registry key") ));
return FALSE;
}
if (!SetRegistryString( hKey, NULL, FileAssociationName )) {
Assert(( ! TEXT("Could not set file association name registry value") ));
}
RegCloseKey( hKey );
return TRUE;
}
BOOL
CreateFileAssociation(
LPWSTR FileExtension,
LPWSTR FileAssociationName,
LPWSTR FileAssociationDescription,
LPWSTR OpenCommand,
LPWSTR PrintCommand,
LPWSTR PrintToCommand,
LPWSTR FileName,
DWORD IconIndex
)
{
LONG rVal = 0;
HKEY hKey = NULL;
HKEY hKeyOpen = NULL;
HKEY hKeyPrint = NULL;
HKEY hKeyPrintTo = NULL;
HKEY hKeyIcon = NULL;
DWORD Disposition = 0;
WCHAR Buffer[MAX_PATH*2];
rVal = RegCreateKeyEx(
HKEY_CLASSES_ROOT,
FileExtension,
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&hKey,
&Disposition
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
rVal = RegSetValueEx(
hKey,
NULL,
0,
REG_SZ,
(LPBYTE) FileAssociationName,
StringSize( FileAssociationName )
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
RegCloseKey( hKey );
rVal = RegCreateKeyEx(
HKEY_CLASSES_ROOT,
FileAssociationName,
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&hKey,
&Disposition
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
rVal = RegSetValueEx(
hKey,
NULL,
0,
REG_SZ,
(LPBYTE) FileAssociationDescription,
StringSize( FileAssociationDescription )
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
rVal = RegCreateKeyEx(
hKey,
L"Shell\\Open\\Command",
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&hKeyOpen,
&Disposition
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
rVal = RegSetValueEx(
hKeyOpen,
NULL,
0,
REG_EXPAND_SZ,
(LPBYTE) OpenCommand,
StringSize( OpenCommand )
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
if (PrintCommand) {
rVal = RegCreateKeyEx(
hKey,
L"Shell\\Print\\Command",
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&hKeyPrint,
&Disposition
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
rVal = RegSetValueEx(
hKeyPrint,
NULL,
0,
REG_EXPAND_SZ,
(LPBYTE) PrintCommand,
StringSize( PrintCommand )
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
}
if (PrintToCommand) {
rVal = RegCreateKeyEx(
hKey,
L"Shell\\Printto\\Command",
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&hKeyPrintTo,
&Disposition
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
rVal = RegSetValueEx(
hKeyPrintTo,
NULL,
0,
REG_EXPAND_SZ,
(LPBYTE) PrintToCommand,
StringSize( PrintToCommand )
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
}
if (FileName) {
rVal = RegCreateKeyEx(
hKey,
L"DefaultIcon",
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&hKeyIcon,
&Disposition
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
wsprintf( Buffer, L"%s,%d", FileName, IconIndex );
rVal = RegSetValueEx(
hKeyIcon,
NULL,
0,
REG_EXPAND_SZ,
(LPBYTE) Buffer,
StringSize( Buffer )
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
}
exit:
RegCloseKey( hKey );
RegCloseKey( hKeyOpen );
RegCloseKey( hKeyPrint );
RegCloseKey( hKeyPrintTo );
RegCloseKey( hKeyIcon );
return rVal == ERROR_SUCCESS;
}
BOOL
IsWordpadInstalled(
VOID
)
{
HKEY hKey;
LONG rVal;
DWORD RegType;
DWORD RegSize;
TCHAR Data[16];
rVal = RegOpenKey(
HKEY_LOCAL_MACHINE,
REGKEY_WORDPAD,
&hKey
);
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("Could not open wordpad registry key, ec=0x%08x"), rVal ));
return FALSE;
}
RegSize = sizeof(Data);
rVal = RegQueryValueEx(
hKey,
REGVAL_WP_INSTALLED,
0,
&RegType,
(LPBYTE) Data,
&RegSize
);
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("Could not query wordpad installed registry value, ec=0x%08x"), rVal ));
Data[0] = 0;
}
RegCloseKey( hKey );
if (_tcscmp( Data, TEXT("1") ) == 0) {
return TRUE;
}
return FALSE;
}
BOOL
InstallWordpad(
VOID
)
{
HKEY hKey;
LONG rVal;
DWORD RegType;
DWORD RegSize;
TCHAR InfName[32];
TCHAR SectionName[32];
TCHAR Command[256];
STARTUPINFO si;
PROCESS_INFORMATION pi;
DWORD ExitCode;
rVal = RegOpenKey(
HKEY_LOCAL_MACHINE,
REGKEY_WORDPAD,
&hKey
);
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("Could not open wordpad registry key, ec=0x%08x"), rVal ));
return FALSE;
}
RegSize = sizeof(InfName);
rVal = RegQueryValueEx(
hKey,
REGVAL_WP_INF,
0,
&RegType,
(LPBYTE) InfName,
&RegSize
);
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("Could not query wordpad inf name registry value, ec=0x%08x"), rVal ));
InfName[0] = 0;
}
RegSize = sizeof(SectionName);
rVal = RegQueryValueEx(
hKey,
REGVAL_WP_SECTION,
0,
&RegType,
(LPBYTE) SectionName,
&RegSize
);
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("Could not query wordpad inf name registry value, ec=0x%08x"), rVal ));
SectionName[0] = 0;
}
RegCloseKey( hKey );
if (InfName[0] == 0 || SectionName[0] == 0) {
return FALSE;
}
_stprintf( Command, RUNDLL32_INF_INSTALL_CMD, SectionName, InfName );
GetStartupInfo( &si );
rVal = CreateProcess(
NULL,
Command,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi
);
if (rVal) {
WaitForSingleObject( pi.hProcess, INFINITE );
if (GetExitCodeProcess( pi.hProcess, &ExitCode ) && ExitCode == 0) {
return TRUE;
}
}
return FALSE;
}
BOOL
ChangeTxtFileAssociation(
VOID
)
{
LONG rVal = 0;
HKEY hKey = NULL;
HKEY hKeyCmd = NULL;
DWORD Disposition = 0;
DeleteRegistryTree( HKEY_CLASSES_ROOT, TEXT("txtfile\\shell") );
rVal = RegOpenKey(
HKEY_CLASSES_ROOT,
TEXT("txtfile"),
&hKey
);
if (rVal != ERROR_SUCCESS) {
DebugPrint(( TEXT("Could not open wordpad registry key, ec=0x%08x"), rVal ));
return FALSE;
}
rVal = RegCreateKeyEx(
hKey,
TEXT("shell\\open\\command"),
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&hKeyCmd,
&Disposition
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
rVal = RegSetValueEx(
hKeyCmd,
NULL,
0,
REG_EXPAND_SZ,
(LPBYTE) WORDPAD_OPEN_CMD,
StringSize( WORDPAD_OPEN_CMD )
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
RegCloseKey( hKeyCmd );
rVal = RegCreateKeyEx(
hKey,
TEXT("shell\\print\\command"),
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&hKeyCmd,
&Disposition
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
rVal = RegSetValueEx(
hKeyCmd,
NULL,
0,
REG_EXPAND_SZ,
(LPBYTE) WORDPAD_PRINT_CMD,
StringSize( WORDPAD_PRINT_CMD )
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
RegCloseKey( hKeyCmd );
rVal = RegCreateKeyEx(
hKey,
TEXT("shell\\printto\\command"),
0,
NULL,
0,
KEY_ALL_ACCESS,
NULL,
&hKeyCmd,
&Disposition
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
rVal = RegSetValueEx(
hKeyCmd,
NULL,
0,
REG_EXPAND_SZ,
(LPBYTE) WORDPAD_PRINTTO_CMD,
StringSize( WORDPAD_PRINTTO_CMD )
);
if (rVal != ERROR_SUCCESS) {
goto exit;
}
RegCloseKey( hKeyCmd );
exit:
RegCloseKey( hKey );
return TRUE;
}