windows-nt/Source/XPSP1/NT/admin/pchealth/helpctr/rc/cpl/rcoptions.cpp
2020-09-26 16:20:57 +08:00

378 lines
8.5 KiB
C++

// RCOptions.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include <afx.h>
#include <CPL.H>
#include <windows.h>
#include "resource.h"
#include <stdio.h>
#include <RACPLSettings.h>
CRegKey g_cRegKey;
static HINSTANCE g_hInstance;
HMODULE g_hRASettings = NULL;
pfnOpenRACPLSettings g_pfnOpen = NULL;
pfnCloseRACPLSettings g_pfnClose = NULL;
pfnGetRACPLSettings g_pfnGet = NULL;
pfnSetRACPLSettings g_pfnSet = NULL;
RACPLSETTINGS g_RACPLSettings;
#define REG_VALUE_DATA_COLLECTION _T("RDC")
#define REG_VALUE_PWD_ENCRYPT _T("PasswdEncryt")
#define REG_BINARY_VALUE_NOTSET_RC 0
//
// Globals
//
TCHAR szMaxTimeOut[MAX_PATH];
DWORD dwDataCollection = 0;
DWORD dwEnableRC = REG_DWORD_RA_DISABLED;
DWORD dwUnSolicited = 0;
DWORD dwMaxTicket = 0;
DWORD dwTrue = 1;
DWORD dwFalse = 0;
DWORD dwPasswdEncrypt = 0;
DWORD InitDialog( HWND hwndDlg )
{
DWORD dwRetVal = S_OK;
TCHAR szError[128];
g_hRASettings = LoadLibrary( _T("RACPLSettings.dll") );
if(NULL == g_hRASettings)
{
//
// Error
//
_stprintf(szError, L"Error: %ld", GetLastError());
MessageBox( GetFocus(), szError, _T("LoadLibrary failed"), 0);
ExitThread(0);
}
g_pfnOpen = (pfnOpenRACPLSettings)GetProcAddress( g_hRASettings, "OpenRACPLSettings" );
if(NULL == g_pfnOpen)
{
//
// Error
//
_stprintf(szError, L"Error: %ld", GetLastError());
MessageBox( GetFocus(), szError, _T("Failed to GetProcAddress of OpenRACPLSettings") , 0);
ExitThread(0);
}
g_pfnClose = (pfnCloseRACPLSettings)GetProcAddress( g_hRASettings, "CloseRACPLSettings" );
if(NULL == g_pfnClose)
{
//
// Error
//
_stprintf(szError, L"Error: %ld", GetLastError());
MessageBox( GetFocus(), szError, _T("Failed to GetProcAddress of CloseRACPLSettings") , 0);
ExitThread(0);
}
g_pfnGet = (pfnGetRACPLSettings)GetProcAddress( g_hRASettings, "GetRACPLSettings" );
if(NULL == g_pfnGet)
{
//
// Error
//
_stprintf(szError, L"Error: %ld", GetLastError());
MessageBox( GetFocus(), szError, _T("Failed to GetProcAddress of GetRACPLSettings"), 0);
ExitThread(0);
}
g_pfnSet = (pfnSetRACPLSettings)GetProcAddress( g_hRASettings, "SetRACPLSettings" );
if(NULL == g_pfnSet )
{
//
// Error
//
_stprintf(szError, L"Error: %ld", GetLastError());
MessageBox( GetFocus(),szError, _T("Failed to GetProcAddress of SetRACPLSettings"), 0);
ExitThread(0);
}
//
// Open the RACPLSettings
//
g_pfnOpen();
//
// Load the settings
//
dwRetVal = g_pfnGet(&g_RACPLSettings);
if(S_OK != dwRetVal)
{
//
// Error
//
_stprintf(szError, L"Error: %ld", GetLastError());
MessageBox( GetFocus(), szError, _T("GetRACPLSettings failed"), 0);
ExitThread(0);
}
//
// Remote Assistance Mode
//
switch(g_RACPLSettings.dwMode)
{
case REG_DWORD_RA_DISABLED:
CheckDlgButton(hwndDlg ,IDC_DISABLE_RC,BST_CHECKED);
break;
case REG_DWORD_RA_ENABLED:
CheckDlgButton(hwndDlg ,IDC_ENABLE_RC,BST_CHECKED);
break;
case REG_DWORD_RA_SHADOWONLY:
CheckDlgButton(hwndDlg ,IDC_SHADOW_ONLY,BST_CHECKED);
break;
default:
_stprintf(szError, L"Unknown Remote Assitance Mode in registry", GetLastError());
MessageBox( GetFocus(), szError, _T("Remote Assistance Mode"), 0);
break;
}
//
// Allow Unsolicited Remote Assistance
//
if (g_RACPLSettings.dwUnsolicited == REG_DWORD_RA_ALLOW)
{
CheckDlgButton(hwndDlg ,IDC_UNATTENDED,BST_CHECKED);
}
else if (g_RACPLSettings.dwUnsolicited == REG_DWORD_RA_DISALLOW)
{
CheckDlgButton(hwndDlg ,IDC_UNATTENDED,BST_UNCHECKED);
}
else
{
_stprintf(szError, L"Unknown Allow unsolicited RA value in registry", GetLastError());
MessageBox( GetFocus(), szError, _T("Remote Assistance Mode"), 0);
}
//
// Maximum Ticket Timeout
//
_stprintf(szMaxTimeOut, L"%d", g_RACPLSettings.dwMaxTimeout);
SetWindowText(GetDlgItem(hwndDlg ,IDC_MAXIMUM_TICKET_TIMEOUT), szMaxTimeOut);
return dwRetVal;
}
DWORD CommitChanges( HWND hwndDlg )
{
DWORD dwRetVal = S_OK;
DWORD dwTimeout = 0;
//
// Remote Assistance Mode
//
if (IsDlgButtonChecked(hwndDlg, IDC_ENABLE_RC) == BST_CHECKED)
{
g_RACPLSettings.dwMode = REG_DWORD_RA_ENABLED;
}
else if (IsDlgButtonChecked(hwndDlg, IDC_DISABLE_RC) == BST_CHECKED)
{
g_RACPLSettings.dwMode = REG_DWORD_RA_DISABLED;
}
else
{
g_RACPLSettings.dwMode = REG_DWORD_RA_SHADOWONLY;
}
//
// Allow Unsolicited Remote Assistance
//
if (IsDlgButtonChecked(hwndDlg, IDC_UNATTENDED) == BST_CHECKED)
{
g_RACPLSettings.dwUnsolicited = REG_DWORD_RA_ALLOW;
}
else
{
g_RACPLSettings.dwUnsolicited = REG_DWORD_RA_DISALLOW;
}
//
// Ticket Timeout
//
GetWindowText(GetDlgItem(hwndDlg ,IDC_MAXIMUM_TICKET_TIMEOUT), szMaxTimeOut, MAX_PATH);
_stscanf( szMaxTimeOut, _T("%d"), &dwTimeout );
g_RACPLSettings.dwMaxTimeout = dwTimeout;
//
// Write the settings to registry
//
if( S_OK != g_pfnSet( &g_RACPLSettings ))
{
//
// Error
//
MessageBox( GetFocus(), _T("SetRACPLSettings failed"), _T("Error"), 0);
}
return dwRetVal;
}
// **************************************************************************
INT_PTR CALLBACK DialogBoxCallBack(HWND hwndDlg, UINT uMsg, WPARAM wParam,
LPARAM lParam)
{
WORD wRes = 0;
DWORD dwRetVal = S_OK;
TCHAR szError[128];
switch(uMsg)
{
case WM_COMMAND:
wRes = LOWORD(wParam);
switch(LOWORD(wParam))
{
case IDACCEPT:
CommitChanges( hwndDlg );
EnableWindow(GetDlgItem(hwndDlg ,IDACCEPT),false);
break;
case IDOK:
CommitChanges( hwndDlg );
//
// Close down RACPLSettings API
//
g_pfnClose();
EndDialog(hwndDlg, wRes);
break;
case IDC_UNATTENDED:
EnableWindow(GetDlgItem(hwndDlg ,IDACCEPT),true);
break;
case IDCANCEL:
EndDialog(hwndDlg, wRes);
break;
case IDC_ENABLE_RC:
dwEnableRC = REG_DWORD_RA_ENABLED;
EnableWindow(GetDlgItem(hwndDlg ,IDACCEPT),true);
break;
case IDC_DISABLE_RC:
dwEnableRC = REG_DWORD_RA_DISABLED;
EnableWindow(GetDlgItem(hwndDlg ,IDACCEPT),true);
break;
case IDC_SHADOW_ONLY:
dwEnableRC = REG_DWORD_RA_SHADOWONLY;
EnableWindow(GetDlgItem(hwndDlg ,IDACCEPT),true);
break;
case IDC_MAXIMUM_TICKET_TIMEOUT:
GetWindowText(GetDlgItem(hwndDlg ,IDC_MAXIMUM_TICKET_TIMEOUT), szMaxTimeOut,MAX_PATH);
EnableWindow(GetDlgItem(hwndDlg ,IDACCEPT),true);
break;
default:
break;
}
break;
case WM_INITDIALOG:
InitDialog( hwndDlg );
break;
}
return FALSE;
}
extern "C"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
g_hInstance = hInstance;
return TRUE;
}
LONG CPlApplet(
HWND hwndCPl,
UINT uMsg,
LONG lParam1,
LONG lParam2
)
{
INT_PTR nResDlg = NULL;
LPCPLINFO lpCPlInfo;
switch (uMsg)
{
case ( CPL_INIT ) :
{
return true;
}
case ( CPL_EXIT ) :
{
break;
}
case ( CPL_STOP ) :
{
break;
}
case ( CPL_GETCOUNT ) :
{
return 1;
}
case ( CPL_INQUIRE ) :
{
lpCPlInfo = (LPCPLINFO)lParam2;
lpCPlInfo->idIcon = ID_ICON;
lpCPlInfo->idName = IDS_NAME;
lpCPlInfo->idInfo = IDS_INFO;
return true;
}
case ( CPL_NEWINQUIRE ) :
{
return true;
}
case ( CPL_DBLCLK ) :
case ( CPL_STARTWPARMS ) :
{
nResDlg = DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_SETOPTIONS), NULL,
(int (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long))DialogBoxCallBack);
return true;
}
}
return true;
}