Windows-Server-2003/termsrv/newclient/clshell/rdrwrndlg.cpp

236 lines
6.0 KiB
C++

//
// rdrwrndlg.cpp Device redirection security warning dialog
//
#include "stdafx.h"
#define TRC_GROUP TRC_GROUP_UI
#define TRC_FILE "rdrwrndlg"
#include <atrcapi.h>
#include "rdrwrndlg.h"
#include "autreg.h"
CRedirectPromptDlg* CRedirectPromptDlg::_pRedirectPromptDlgInstance = NULL;
CRedirectPromptDlg::CRedirectPromptDlg( HWND hwndOwner, HINSTANCE hInst,
DWORD dwRedirectionsSpecified) :
CDlgBase( hwndOwner, hInst, UI_IDD_RDC_SECURITY_WARN),
_dwRedirectionsSpecified(dwRedirectionsSpecified)
{
DC_BEGIN_FN("CRedirectPromptDlg");
TRC_ASSERT((NULL == CRedirectPromptDlg::_pRedirectPromptDlgInstance),
(TB,_T("Clobbering existing dlg instance pointer\n")));
TRC_ASSERT(_dwRedirectionsSpecified,(TB,
_T("Redirection security dialog called with no redirs enabled")));
CRedirectPromptDlg::_pRedirectPromptDlgInstance = this;
_fNeverPromptMeAgain = FALSE;
DC_END_FN();
}
CRedirectPromptDlg::~CRedirectPromptDlg()
{
CRedirectPromptDlg::_pRedirectPromptDlgInstance = NULL;
}
DCINT CRedirectPromptDlg::DoModal()
{
DCINT retVal = 0;
DC_BEGIN_FN("DoModal");
retVal = DialogBox(_hInstance, MAKEINTRESOURCE(_dlgResId),
_hwndOwner, StaticDialogBoxProc);
TRC_ASSERT((retVal != 0 && retVal != -1), (TB, _T("DialogBoxParam failed\n")));
DC_END_FN();
return retVal;
}
INT_PTR CALLBACK CRedirectPromptDlg::StaticDialogBoxProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
//
// Delegate to appropriate instance (only works for single instance dialogs)
//
DC_BEGIN_FN("StaticDialogBoxProc");
DCINT retVal = 0;
TRC_ASSERT(_pRedirectPromptDlgInstance,
(TB, _T("Redirect warn dialog has NULL static instance ptr\n")));
if(_pRedirectPromptDlgInstance)
{
retVal = _pRedirectPromptDlgInstance->DialogBoxProc(hwndDlg,
uMsg,
wParam,
lParam);
}
DC_END_FN();
return retVal;
}
//
// Name: DialogBoxProc
//
// Purpose: Handles CRedirectPromptDlg dialog box
//
// Returns: TRUE if message dealt with
// FALSE otherwise
//
// Params: See window documentation
//
//
INT_PTR CALLBACK CRedirectPromptDlg::DialogBoxProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
INT_PTR rc = FALSE;
DC_BEGIN_FN("DialogBoxProc");
switch (uMsg)
{
case WM_INITDIALOG:
{
_hwndDlg = hwndDlg;
//Center the redirectprompt dialog on the screen
CenterWindow(NULL);
SetDialogAppIcon(hwndDlg);
TCHAR szRedirectList[MAX_PATH];
//
// Get a string representing the redirection options
//
if (GetRedirectListString( szRedirectList, MAX_PATH - 1))
{
szRedirectList[MAX_PATH-1] = 0;
SetDlgItemText(hwndDlg,
UI_IDC_STATIC_DEVICES,
szRedirectList);
}
rc = TRUE;
}
break;
case WM_COMMAND:
{
switch (DC_GET_WM_COMMAND_ID(wParam))
{
case IDOK:
{
_fNeverPromptMeAgain = IsDlgButtonChecked(hwndDlg,
UI_IDC_CHECK_NOPROMPT);
EndDialog(hwndDlg, IDOK);
}
break;
case IDCANCEL:
{
EndDialog(hwndDlg, IDCANCEL);
}
break;
}
}
break;
default:
{
rc = CDlgBase::DialogBoxProc(hwndDlg,
uMsg,
wParam,
lParam);
}
break;
}
DC_END_FN();
return(rc);
} /* CRedirectPromptDlg::DialogBoxProc */
BOOL CRedirectPromptDlg::GetRedirectListString(LPTSTR szBuf, UINT len)
{
TCHAR szTemp[SH_DISPLAY_STRING_MAX_LENGTH];
BOOL fResult = FALSE;
INT lenRemain = (INT)len;
DC_BEGIN_FN("GetRedirectListString");
memset(szBuf, 0, len);
if (_dwRedirectionsSpecified & REDIRSEC_DRIVES)
{
memset(szTemp, 0, sizeof(szTemp));
if (LoadString(_hInstance,
UI_IDS_REDIRPROMPT_DRIVES,
szTemp,
SIZECHAR(szTemp) - 1))
{
_tcsncat(szBuf, szTemp, lenRemain);
lenRemain -= (_tcslen(szTemp) + 2);
if (lenRemain > 2)
{
_tcscat(szBuf, _T("\n"));
lenRemain -= 2;
}
else
{
fResult = FALSE;
DC_QUIT;
}
}
else
{
fResult = FALSE;
DC_QUIT;
}
}
if (_dwRedirectionsSpecified & REDIRSEC_PORTS)
{
memset(szTemp, 0, sizeof(szTemp));
if (LoadString(_hInstance,
UI_IDS_REDIRPROMPT_PORTS,
szTemp,
SIZECHAR(szTemp) - 1))
{
_tcsncat(szBuf, szTemp, lenRemain);
lenRemain -= (_tcslen(szTemp) + 2);
if (lenRemain > 2)
{
_tcscat(szBuf, _T("\n"));
lenRemain -= 2;
}
else
{
fResult = FALSE;
DC_QUIT;
}
}
else
{
fResult = FALSE;
DC_QUIT;
}
}
fResult = TRUE;
DC_EXIT_POINT:
DC_END_FN();
return fResult;
}