194 lines
3.5 KiB
C
194 lines
3.5 KiB
C
#include <windows.h>
|
|
#include <stdio.h>
|
|
#include <tchar.h>
|
|
|
|
#include "faxutil.h"
|
|
#include "faxreg.h"
|
|
#include "resource.h"
|
|
|
|
|
|
BOOL
|
|
IsUserAdmin(
|
|
VOID
|
|
);
|
|
|
|
|
|
|
|
BOOL
|
|
GetInstallationInfo(
|
|
LPDWORD Installed,
|
|
LPDWORD InstallType,
|
|
LPDWORD InstalledPlatforms
|
|
)
|
|
{
|
|
HKEY hKey;
|
|
LONG rVal;
|
|
DWORD RegType;
|
|
DWORD RegSize;
|
|
|
|
|
|
if (Installed == NULL || InstallType == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
RegSize = sizeof(DWORD);
|
|
|
|
rVal = RegQueryValueEx(
|
|
hKey,
|
|
REGVAL_FAXINSTALLED,
|
|
0,
|
|
&RegType,
|
|
(LPBYTE) Installed,
|
|
&RegSize
|
|
);
|
|
if (rVal != ERROR_SUCCESS) {
|
|
DebugPrint(( TEXT("Could not query installed registry value, ec=0x%08x"), rVal ));
|
|
*Installed = 0;
|
|
}
|
|
|
|
rVal = RegQueryValueEx(
|
|
hKey,
|
|
REGVAL_FAXINSTALL_TYPE,
|
|
0,
|
|
&RegType,
|
|
(LPBYTE) InstallType,
|
|
&RegSize
|
|
);
|
|
if (rVal != ERROR_SUCCESS) {
|
|
DebugPrint(( TEXT("Could not query install type registry value, ec=0x%08x"), rVal ));
|
|
*InstallType = 0;
|
|
}
|
|
|
|
rVal = RegQueryValueEx(
|
|
hKey,
|
|
REGVAL_FAXINSTALLED_PLATFORMS,
|
|
0,
|
|
&RegType,
|
|
(LPBYTE) InstalledPlatforms,
|
|
&RegSize
|
|
);
|
|
if (rVal != ERROR_SUCCESS) {
|
|
DebugPrint(( TEXT("Could not query install platforms mask registry value, ec=0x%08x"), rVal ));
|
|
*InstalledPlatforms = 0;
|
|
}
|
|
|
|
RegCloseKey( hKey );
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
INT
|
|
wWinMain(
|
|
HINSTANCE hInstance,
|
|
HINSTANCE hPrevInstance,
|
|
LPTSTR lpCmdLine,
|
|
INT nCmdShow
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Application entry point
|
|
|
|
Arguments:
|
|
|
|
hInstance - Identifies the current instance of the application
|
|
hPrevInstance - Identifies the previous instance of the application
|
|
lpCmdLine - Specifies the command line for the application.
|
|
nCmdShow - Specifies how the window is to be shown
|
|
|
|
Return Value:
|
|
|
|
0
|
|
|
|
--*/
|
|
|
|
{
|
|
DWORD Installed;
|
|
DWORD InstallType;
|
|
DWORD InstalledPlatforms;
|
|
WCHAR Str[64];
|
|
WCHAR Cmd[128];
|
|
STARTUPINFO si;
|
|
PROCESS_INFORMATION pi;
|
|
|
|
|
|
|
|
if (!GetInstallationInfo( &Installed, &InstallType, &InstalledPlatforms )) {
|
|
goto error_exit;
|
|
}
|
|
|
|
if (!Installed) {
|
|
goto error_exit;
|
|
}
|
|
|
|
Str[0] = 0;
|
|
|
|
if (InstallType & FAX_INSTALL_SERVER) {
|
|
|
|
if (IsUserAdmin()) {
|
|
LoadString( hInstance, IDS_FAX_SERVER, Str, sizeof(Str) );
|
|
} else {
|
|
LoadString( hInstance, IDS_FAX_CLIENT, Str, sizeof(Str) );
|
|
}
|
|
|
|
} else if (InstallType & FAX_INSTALL_WORKSTATION) {
|
|
|
|
LoadString( hInstance, IDS_FAX_WORKSTATION, Str, sizeof(Str) );
|
|
|
|
} else if (InstallType & FAX_INSTALL_NETWORK_CLIENT) {
|
|
|
|
LoadString( hInstance, IDS_FAX_WORKSTATION, Str, sizeof(Str) );
|
|
|
|
} else {
|
|
|
|
goto error_exit;
|
|
|
|
}
|
|
|
|
if (!Str[0]) {
|
|
goto error_exit;
|
|
}
|
|
|
|
swprintf( Cmd, L"rundll32 shell32.dll,Control_RunDLL faxcfg.cpl,%s", Str );
|
|
|
|
GetStartupInfo( &si );
|
|
|
|
if (!CreateProcess(
|
|
NULL,
|
|
Cmd,
|
|
NULL,
|
|
NULL,
|
|
FALSE,
|
|
0,
|
|
NULL,
|
|
NULL,
|
|
&si,
|
|
&pi
|
|
))
|
|
{
|
|
goto error_exit;
|
|
}
|
|
|
|
return 0;
|
|
|
|
error_exit:
|
|
MessageBeep( MB_ICONEXCLAMATION );
|
|
Sleep( 3000 );
|
|
|
|
return 0;
|
|
}
|