378 lines
8.5 KiB
C++
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;
|
|
}
|