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