windows-nt/Source/XPSP1/NT/printscan/fax/config/wrapper/faxcfgst.c
2020-09-26 16:20:57 +08:00

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;
}