You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1665 lines
60 KiB
1665 lines
60 KiB
#include "precomp.h"
|
|
|
|
#include "rsopsec.h"
|
|
|
|
static INT_PTR CALLBACK importSecZonesRSoPProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
INT_PTR CALLBACK PrivacyDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
|
|
INT_PTR CALLBACK SecurityCustomSettingsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam);
|
|
INT_PTR CALLBACK SecurityAddSitesIntranetDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam);
|
|
INT_PTR CALLBACK SecurityAddSitesDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam);
|
|
|
|
INT_PTR CALLBACK PicsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam);
|
|
INT_PTR CALLBACK ApprovedSitesDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
INT_PTR CALLBACK GeneralDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
INT_PTR CALLBACK AdvancedDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
|
|
#define WIDETEXT(x) L ## x
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
void InitSecZonesDlgInRSoPMode(HWND hDlg, CDlgRSoPData *pDRD)
|
|
{
|
|
__try
|
|
{
|
|
BOOL bImportZones = FALSE;
|
|
BOOL bImportRatings = FALSE;
|
|
_bstr_t bstrClass = L"RSOP_IEAKPolicySetting";
|
|
HRESULT hr = pDRD->GetArrayOfPSObjects(bstrClass);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
CPSObjData **paPSObj = pDRD->GetPSObjArray();
|
|
long nPSObjects = pDRD->GetPSObjCount();
|
|
|
|
BOOL bZonesHandled = FALSE;
|
|
BOOL bRatingsHandled = FALSE;
|
|
for (long nObj = 0; nObj < nPSObjects; nObj++)
|
|
{
|
|
// importSecurityZoneSettings field
|
|
_variant_t vtValue;
|
|
if (!bZonesHandled)
|
|
{
|
|
hr = paPSObj[nObj]->pObj->Get(L"importSecurityZoneSettings", 0, &vtValue, NULL, NULL);
|
|
if (SUCCEEDED(hr) && !IsVariantNull(vtValue))
|
|
{
|
|
bImportZones = (bool)vtValue ? TRUE : FALSE;
|
|
CheckRadioButton(hDlg, IDC_NOZONES, IDC_IMPORTZONES,
|
|
(bool)vtValue ? IDC_IMPORTZONES : IDC_NOZONES);
|
|
|
|
bZonesHandled = TRUE;
|
|
|
|
DWORD dwCurGPOPrec = GetGPOPrecedence(paPSObj[nObj]->pObj);
|
|
pDRD->SetImportedSecZonesPrec(dwCurGPOPrec);
|
|
|
|
// importedZoneCount field
|
|
_variant_t vtValue;
|
|
hr = paPSObj[nObj]->pObj->Get(L"importedZoneCount", 0, &vtValue, NULL, NULL);
|
|
if (SUCCEEDED(hr) && !IsVariantNull(vtValue))
|
|
{
|
|
pDRD->SetImportedSecZoneCount((long)vtValue);
|
|
}
|
|
|
|
if(!pDRD->IsPlanningMode() && IsVariantNull(vtValue))
|
|
{
|
|
bZonesHandled = FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
// importContentRatingsSettings field
|
|
vtValue;
|
|
if (!bRatingsHandled)
|
|
{
|
|
hr = paPSObj[nObj]->pObj->Get(L"importContentRatingsSettings", 0, &vtValue, NULL, NULL);
|
|
if (SUCCEEDED(hr) && !IsVariantNull(vtValue))
|
|
{
|
|
bImportRatings = (bool)vtValue ? TRUE : FALSE;
|
|
CheckRadioButton(hDlg, IDC_NORAT, IDC_IMPORTRAT,
|
|
(bool)vtValue ? IDC_IMPORTRAT : IDC_NORAT);
|
|
|
|
DWORD dwCurGPOPrec = GetGPOPrecedence(paPSObj[nObj]->pObj);
|
|
pDRD->SetImportedSecRatingsPrec(dwCurGPOPrec);
|
|
bRatingsHandled = TRUE;
|
|
}
|
|
}
|
|
|
|
// no need to process other GPOs since enabled properties have been found
|
|
if (bZonesHandled && bRatingsHandled)
|
|
break;
|
|
}
|
|
}
|
|
|
|
EnableDlgItem2(hDlg, IDC_NOZONES, FALSE);
|
|
EnableDlgItem2(hDlg, IDC_IMPORTZONES, FALSE);
|
|
EnableDlgItem2(hDlg, IDC_MODIFYZONES, bImportZones);
|
|
|
|
EnableDlgItem2(hDlg, IDC_NORAT, FALSE);
|
|
EnableDlgItem2(hDlg, IDC_IMPORTRAT, FALSE);
|
|
EnableDlgItem2(hDlg, IDC_MODIFYRAT, bImportRatings);
|
|
}
|
|
__except(TRUE)
|
|
{
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
HRESULT InitSecZonesPrecPage(CDlgRSoPData *pDRD, HWND hwndList)
|
|
{
|
|
HRESULT hr = NOERROR;
|
|
__try
|
|
{
|
|
_bstr_t bstrClass = L"RSOP_IEAKPolicySetting";
|
|
hr = pDRD->GetArrayOfPSObjects(bstrClass);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
CPSObjData **paPSObj = pDRD->GetPSObjArray();
|
|
long nPSObjects = pDRD->GetPSObjCount();
|
|
for (long nObj = 0; nObj < nPSObjects; nObj++)
|
|
{
|
|
_bstr_t bstrGPOName = pDRD->GetGPONameFromPS(paPSObj[nObj]->pObj);
|
|
|
|
// importSecurityZoneSettings field
|
|
BOOL bImport = FALSE;
|
|
_variant_t vtValue;
|
|
hr = paPSObj[nObj]->pObj->Get(L"importSecurityZoneSettings", 0, &vtValue, NULL, NULL);
|
|
if (SUCCEEDED(hr) && !IsVariantNull(vtValue))
|
|
bImport = (bool)vtValue ? TRUE : FALSE;
|
|
|
|
_bstr_t bstrSetting;
|
|
if (bImport)
|
|
{
|
|
TCHAR szTemp[MAX_PATH];
|
|
LoadString(g_hInstance, IDS_IMPORTZONES_SETTING, szTemp, countof(szTemp));
|
|
bstrSetting = szTemp;
|
|
}
|
|
else
|
|
bstrSetting = GetDisabledString();
|
|
|
|
InsertPrecedenceListItem(hwndList, nObj, bstrGPOName, bstrSetting);
|
|
}
|
|
}
|
|
}
|
|
__except(TRUE)
|
|
{
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
HRESULT InitContentRatPrecPage(CDlgRSoPData *pDRD, HWND hwndList)
|
|
{
|
|
HRESULT hr = NOERROR;
|
|
__try
|
|
{
|
|
_bstr_t bstrClass = L"RSOP_IEAKPolicySetting";
|
|
hr = pDRD->GetArrayOfPSObjects(bstrClass);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
CPSObjData **paPSObj = pDRD->GetPSObjArray();
|
|
long nPSObjects = pDRD->GetPSObjCount();
|
|
for (long nObj = 0; nObj < nPSObjects; nObj++)
|
|
{
|
|
_bstr_t bstrGPOName = pDRD->GetGPONameFromPS(paPSObj[nObj]->pObj);
|
|
|
|
// importContentRatingsSettings field
|
|
BOOL bImport = FALSE;
|
|
_variant_t vtValue;
|
|
hr = paPSObj[nObj]->pObj->Get(L"importContentRatingsSettings", 0, &vtValue, NULL, NULL);
|
|
if (SUCCEEDED(hr) && !IsVariantNull(vtValue))
|
|
bImport = (bool)vtValue ? TRUE : FALSE;
|
|
|
|
_bstr_t bstrSetting;
|
|
if (bImport)
|
|
{
|
|
TCHAR szTemp[MAX_PATH];
|
|
LoadString(g_hInstance, IDS_IMPORTRATINGS_SETTING, szTemp, countof(szTemp));
|
|
bstrSetting = szTemp;
|
|
}
|
|
else
|
|
bstrSetting = GetDisabledString();
|
|
|
|
InsertPrecedenceListItem(hwndList, nObj, bstrGPOName, bstrSetting);
|
|
}
|
|
}
|
|
}
|
|
__except(TRUE)
|
|
{
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
HPROPSHEETPAGE AddContentRatingPropPage(UINT nID, DLGPROC dlgProc, PRSD *pPRSD)
|
|
{
|
|
HPROPSHEETPAGE hPage = NULL;
|
|
__try
|
|
{
|
|
PROPSHEETPAGE page;
|
|
|
|
page.dwSize = sizeof(PROPSHEETPAGE);
|
|
page.dwFlags = 0;
|
|
page.hInstance = g_hInstance;
|
|
page.pszTemplate = MAKEINTRESOURCE(nID);
|
|
page.pfnDlgProc = dlgProc;
|
|
page.pfnCallback = NULL;
|
|
page.lParam = (LPARAM)pPRSD;
|
|
|
|
hPage = CreatePropertySheetPage(&page);
|
|
}
|
|
__except(TRUE)
|
|
{
|
|
}
|
|
return hPage;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
int CreateContentRatingsUI(HWND hDlg, CDlgRSoPData *pDRD)
|
|
{
|
|
int iRet = 0;
|
|
__try
|
|
{
|
|
PRSD *pPRSD = new PRSD;
|
|
if (NULL != pPRSD)
|
|
{
|
|
pPRSD->hInst = g_hInstance;
|
|
pPRSD->pDRD = pDRD;
|
|
pPRSD->hwndBitmapCategory = NULL;
|
|
pPRSD->hwndBitmapLabel = NULL;
|
|
pPRSD->fNewProviders = FALSE;
|
|
|
|
HPROPSHEETPAGE apsPage[4];
|
|
apsPage[0] = AddContentRatingPropPage(IDD_RATINGS, PicsDlgProc, pPRSD);
|
|
apsPage[1] = AddContentRatingPropPage(IDD_APPROVEDSITES, ApprovedSitesDlgProc, pPRSD);
|
|
apsPage[2] = AddContentRatingPropPage(IDD_GENERAL, GeneralDlgProc, pPRSD);
|
|
apsPage[3] = AddContentRatingPropPage(IDD_ADVANCED, AdvancedDlgProc, pPRSD);
|
|
|
|
PROPSHEETHEADER psHeader;
|
|
memset(&psHeader,0,sizeof(psHeader));
|
|
|
|
psHeader.dwSize = sizeof(psHeader);
|
|
psHeader.dwFlags = PSH_PROPTITLE;
|
|
psHeader.hwndParent = hDlg;
|
|
psHeader.hInstance = g_hInstance;
|
|
psHeader.nPages = 4;
|
|
psHeader.nStartPage = 0;
|
|
psHeader.phpage = apsPage;
|
|
psHeader.pszCaption = MAKEINTRESOURCE(IDS_GENERIC);
|
|
|
|
iRet = (int)PropertySheet(&psHeader);
|
|
|
|
delete pPRSD;
|
|
}
|
|
}
|
|
__except(TRUE)
|
|
{
|
|
}
|
|
return iRet;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
int CreateINetCplSecurityLookALikePages(HWND hwndParent, LPARAM lParam)
|
|
{
|
|
int iRet = 0;
|
|
__try
|
|
{
|
|
PROPSHEETPAGE pageSec, pagePriv;
|
|
|
|
// create the security property page
|
|
pageSec.dwSize = sizeof(PROPSHEETPAGE);
|
|
pageSec.dwFlags = 0;
|
|
pageSec.hInstance = g_hInstance;
|
|
pageSec.pszTemplate = MAKEINTRESOURCE(IDD_IMPORTEDSECZONES);
|
|
pageSec.pfnDlgProc = importSecZonesRSoPProc;
|
|
pageSec.pfnCallback = NULL;
|
|
pageSec.lParam = lParam;
|
|
|
|
HPROPSHEETPAGE ahpage[2];
|
|
ahpage[0] = CreatePropertySheetPage(&pageSec);
|
|
|
|
// setup privacy property page
|
|
pagePriv.dwSize = sizeof(PROPSHEETPAGE);
|
|
pagePriv.dwFlags = 0;
|
|
pagePriv.hInstance = g_hInstance;
|
|
pagePriv.pszTemplate = MAKEINTRESOURCE(IDD_PRIVACY);
|
|
pagePriv.pfnDlgProc = PrivacyDlgProc;
|
|
|
|
pagePriv.pfnCallback = NULL;
|
|
pagePriv.lParam = lParam;
|
|
|
|
ahpage[1] = CreatePropertySheetPage(&pagePriv);
|
|
|
|
// add pages to the sheet
|
|
PROPSHEETHEADER psHeader;
|
|
memset(&psHeader,0,sizeof(psHeader));
|
|
|
|
psHeader.dwSize = sizeof(psHeader);
|
|
psHeader.dwFlags = PSH_PROPTITLE;
|
|
psHeader.hwndParent = hwndParent;
|
|
psHeader.hInstance = g_hInstance;
|
|
psHeader.nPages = 2;
|
|
psHeader.nStartPage = 0;
|
|
psHeader.phpage = ahpage;
|
|
psHeader.pszCaption = MAKEINTRESOURCE(IDS_INTERNET_LOC);
|
|
|
|
iRet = (int)PropertySheet(&psHeader);
|
|
}
|
|
__except(TRUE)
|
|
{
|
|
}
|
|
return iRet;
|
|
}
|
|
|
|
INT_PTR CALLBACK EnhancedSecurityWarningDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
UNREFERENCED_PARAMETER(lParam);
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
TCHAR szBuffer[MAX_PATH * 3];
|
|
UINT uID1, uID2, uID3, uID4;
|
|
|
|
if(IEHardened())
|
|
{
|
|
uID1 = IDS_IESC_HARDENDESC1;
|
|
uID2 = IDS_IESC_HARDENDESC2;
|
|
uID3 = IDS_IESC_HARDENDESC3;
|
|
uID4 = IDS_IESC_HARDENDESC4;
|
|
}
|
|
else
|
|
{
|
|
uID1 = IDS_IESC_SOFTENESC1;
|
|
uID2 = IDS_IESC_SOFTENESC2;
|
|
uID3 = IDS_IESC_SOFTENESC3;
|
|
uID4 = IDS_IESC_SOFTENESC4;
|
|
}
|
|
|
|
LoadString(g_hInstance, uID1, szBuffer, ARRAYSIZE(szBuffer));
|
|
SetDlgItemText(hDlg, IDC_STATIC1, szBuffer);
|
|
LoadString(g_hInstance, uID2, szBuffer, ARRAYSIZE(szBuffer));
|
|
SetDlgItemText(hDlg, IDC_STATIC2, szBuffer);
|
|
LoadString(g_hInstance, uID3, szBuffer, ARRAYSIZE(szBuffer));
|
|
SetDlgItemText(hDlg, IDC_STATIC3, szBuffer);
|
|
LoadString(g_hInstance, uID4, szBuffer, ARRAYSIZE(szBuffer));
|
|
SetDlgItemText(hDlg, IDC_STATIC4, szBuffer);
|
|
break;
|
|
}
|
|
|
|
case WM_COMMAND:
|
|
switch(LOWORD(wParam))
|
|
{
|
|
case IDCANCEL:
|
|
EndDialog(hDlg, IDCANCEL);
|
|
break;
|
|
case IDOK:
|
|
EndDialog(hDlg, IDOK);
|
|
break;
|
|
}
|
|
|
|
break;
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
INT_PTR ShowIEHardenWarning(HWND hParent)
|
|
{
|
|
return DialogBoxParam(g_hInstance, MAKEINTRESOURCE(IDD_IEESCDLG),
|
|
hParent, EnhancedSecurityWarningDlgProc, NULL);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
INT_PTR CALLBACK SecurityZonesDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
// Retrieve Property Sheet Page info for each call into dlg proc.
|
|
LPPROPSHEETCOOKIE psCookie = (LPPROPSHEETCOOKIE)GetWindowLongPtr(hDlg, DWLP_USER);
|
|
|
|
TCHAR szWorkDir[MAX_PATH],
|
|
szInf[MAX_PATH];
|
|
BOOL fImport;
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_SETFONT:
|
|
//a change to mmc requires us to do this logic for all our property pages that use common controls
|
|
INITCOMMONCONTROLSEX iccx;
|
|
iccx.dwSize = sizeof(INITCOMMONCONTROLSEX);
|
|
iccx.dwICC = ICC_ANIMATE_CLASS | ICC_BAR_CLASSES | ICC_LISTVIEW_CLASSES |ICC_TREEVIEW_CLASSES;
|
|
InitCommonControlsEx(&iccx);
|
|
break;
|
|
|
|
case WM_INITDIALOG:
|
|
SetPropSheetCookie(hDlg, lParam);
|
|
|
|
// find out if this dlg is in RSoP mode
|
|
psCookie = (LPPROPSHEETCOOKIE)GetWindowLongPtr(hDlg, DWLP_USER);
|
|
if (psCookie->pCS->IsRSoP())
|
|
{
|
|
CheckRadioButton(hDlg, IDC_NOZONES, IDC_IMPORTZONES, IDC_NOZONES);
|
|
CheckRadioButton(hDlg, IDC_NORAT, IDC_IMPORTRAT, IDC_NORAT);
|
|
|
|
TCHAR szViewSettings[128];
|
|
LoadString(g_hInstance, IDS_VIEW_SETTINGS, szViewSettings, countof(szViewSettings));
|
|
SetDlgItemText(hDlg, IDC_MODIFYZONES, szViewSettings);
|
|
SetDlgItemText(hDlg, IDC_MODIFYRAT, szViewSettings);
|
|
|
|
CDlgRSoPData *pDRD = GetDlgRSoPData(hDlg, psCookie->pCS);
|
|
if (pDRD)
|
|
{
|
|
pDRD->SetPlanningMode(psCookie->pCS->GetCompData()->IsPlanningMode());
|
|
InitSecZonesDlgInRSoPMode(hDlg, pDRD);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
if (psCookie->pCS->IsRSoP())
|
|
DestroyDlgRSoPData(hDlg);
|
|
break;
|
|
|
|
case WM_TIMER:
|
|
{
|
|
KillTimer(hDlg, 1);
|
|
if(IDCANCEL == ShowIEHardenWarning(hDlg))
|
|
{
|
|
CheckRadioButton(hDlg, IDC_NOZONES, IDC_IMPORTZONES, IDC_NOZONES);
|
|
SetFocus(GetDlgItem(hDlg, IDC_NOZONES));
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_NOTIFY:
|
|
switch (((LPNMHDR)lParam)->code)
|
|
{
|
|
case PSN_SETACTIVE:
|
|
// don't do any of this stuff in RSoP mode
|
|
if (!psCookie->pCS->IsRSoP())
|
|
{
|
|
// zones
|
|
fImport = InsGetBool(SECURITY_IMPORTS, TEXT("ImportSecZones"), FALSE, GetInsFile(hDlg));
|
|
if(fImport)
|
|
{
|
|
SetTimer(hDlg, 1, 300, NULL);
|
|
}
|
|
CheckRadioButton(hDlg, IDC_NOZONES, IDC_IMPORTZONES, fImport ? IDC_IMPORTZONES : IDC_NOZONES);
|
|
EnableDlgItem2(hDlg, IDC_MODIFYZONES, fImport);
|
|
|
|
// ratings
|
|
fImport = InsGetBool(SECURITY_IMPORTS, TEXT("ImportRatings"), FALSE, GetInsFile(hDlg));
|
|
CheckRadioButton(hDlg, IDC_NORAT, IDC_IMPORTRAT, fImport ? IDC_IMPORTRAT : IDC_NORAT);
|
|
EnableDlgItem2(hDlg, IDC_MODIFYRAT, fImport);
|
|
}
|
|
break;
|
|
|
|
case PSN_APPLY:
|
|
if (psCookie->pCS->IsRSoP())
|
|
return FALSE;
|
|
else
|
|
{
|
|
if (!AcquireWriteCriticalSection(hDlg))
|
|
{
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, PSNRET_INVALID_NOCHANGEPAGE);
|
|
break;
|
|
}
|
|
|
|
// process zones
|
|
CreateWorkDir(GetInsFile(hDlg), IEAK_GPE_BRANDING_SUBDIR TEXT("\\ZONES"), szWorkDir);
|
|
PathCombine(szInf, szWorkDir, TEXT("seczones.inf"));
|
|
|
|
ImportZones(GetInsFile(hDlg), NULL, szInf, IsDlgButtonChecked(hDlg, IDC_IMPORTZONES) == BST_CHECKED);
|
|
|
|
if (PathIsDirectoryEmpty(szWorkDir))
|
|
PathRemovePath(szWorkDir);
|
|
|
|
// process ratings
|
|
CreateWorkDir(GetInsFile(hDlg), IEAK_GPE_BRANDING_SUBDIR TEXT("\\RATINGS"), szWorkDir);
|
|
PathCombine(szInf, szWorkDir, TEXT("ratings.inf"));
|
|
|
|
ImportRatings(GetInsFile(hDlg), NULL, szInf, IsDlgButtonChecked(hDlg, IDC_IMPORTRAT) == BST_CHECKED);
|
|
|
|
if (PathIsDirectoryEmpty(szWorkDir))
|
|
PathRemovePath(szWorkDir);
|
|
|
|
SignalPolicyChanged(hDlg, FALSE, TRUE, &g_guidClientExt, &g_guidSnapinExt);
|
|
}
|
|
break;
|
|
|
|
case PSN_HELP:
|
|
ShowHelpTopic(hDlg);
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
if (GET_WM_COMMAND_CMD(wParam, lParam) != BN_CLICKED)
|
|
return FALSE;
|
|
|
|
switch (GET_WM_COMMAND_ID(wParam, lParam))
|
|
{
|
|
case IDC_NOZONES:
|
|
DisableDlgItem(hDlg, IDC_MODIFYZONES);
|
|
break;
|
|
|
|
case IDC_IMPORTZONES:
|
|
{
|
|
INT_PTR uRet = ShowIEHardenWarning(hDlg);
|
|
if(uRet == IDCANCEL)
|
|
{
|
|
CheckRadioButton(hDlg, IDC_NOZONES, IDC_IMPORTZONES, IDC_NOZONES);
|
|
SetFocus(GetDlgItem(hDlg, IDC_NOZONES));
|
|
break;
|
|
}
|
|
|
|
EnableDlgItem(hDlg, IDC_MODIFYZONES);
|
|
}
|
|
break;
|
|
|
|
case IDC_MODIFYZONES:
|
|
if (psCookie->pCS->IsRSoP())
|
|
{
|
|
CDlgRSoPData *pDRD = GetDlgRSoPData(hDlg, psCookie->pCS);
|
|
if (NULL != pDRD)
|
|
CreateINetCplSecurityLookALikePages(hDlg, (LPARAM)pDRD);
|
|
}
|
|
else
|
|
ModifyZones(hDlg);
|
|
break;
|
|
|
|
case IDC_NORAT:
|
|
DisableDlgItem(hDlg, IDC_MODIFYRAT);
|
|
break;
|
|
|
|
case IDC_IMPORTRAT:
|
|
EnableDlgItem(hDlg, IDC_MODIFYRAT);
|
|
break;
|
|
|
|
case IDC_MODIFYRAT:
|
|
if (psCookie->pCS->IsRSoP())
|
|
{
|
|
CDlgRSoPData *pDRD = GetDlgRSoPData(hDlg, psCookie->pCS);
|
|
if (NULL != pDRD)
|
|
CreateContentRatingsUI(hDlg, pDRD);
|
|
}
|
|
else
|
|
ModifyRatings(hDlg);
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
case WM_HELP:
|
|
ShowHelpTopic(hDlg);
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//*******************************************************************
|
|
// CODE FROM INETCPL
|
|
//*******************************************************************
|
|
|
|
TCHAR g_szLevel[3][64];
|
|
TCHAR LEVEL_DESCRIPTION0[300];
|
|
TCHAR LEVEL_DESCRIPTION1[300];
|
|
TCHAR LEVEL_DESCRIPTION2[300];
|
|
TCHAR LEVEL_DESCRIPTION3[300];
|
|
LPTSTR LEVEL_DESCRIPTION[NUM_TEMPLATE_LEVELS] = {
|
|
LEVEL_DESCRIPTION0,
|
|
LEVEL_DESCRIPTION1,
|
|
LEVEL_DESCRIPTION2,
|
|
LEVEL_DESCRIPTION3
|
|
};
|
|
TCHAR CUSTOM_DESCRIPTION[300];
|
|
|
|
TCHAR LEVEL_NAME0[30];
|
|
TCHAR LEVEL_NAME1[30];
|
|
TCHAR LEVEL_NAME2[30];
|
|
TCHAR LEVEL_NAME3[30];
|
|
LPTSTR LEVEL_NAME[NUM_TEMPLATE_LEVELS] = {
|
|
LEVEL_NAME0,
|
|
LEVEL_NAME1,
|
|
LEVEL_NAME2,
|
|
LEVEL_NAME3
|
|
};
|
|
TCHAR CUSTOM_NAME[30];
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
// Initialize the global variables (to be destroyed at WM_DESTROY)
|
|
// pSec, Urlmon, pSec->pInternetZoneManager, pSec->hIml
|
|
// and set up the proper relationships among them
|
|
/////////////////////////////////////////////////////////////////////
|
|
BOOL SecurityInitGlobals(LPSECURITYPAGE *ppSec, HWND hDlg, CDlgRSoPData *pDRD,
|
|
DWORD dwZoneCount)
|
|
{
|
|
BOOL bRet = TRUE;
|
|
__try
|
|
{
|
|
DWORD cxIcon;
|
|
DWORD cyIcon;
|
|
|
|
LPSECURITYPAGE pSec = (LPSECURITYPAGE)LocalAlloc(LPTR, sizeof(SECURITYPAGE));
|
|
*ppSec = pSec;
|
|
if (!pSec)
|
|
bRet = FALSE; // no memory?
|
|
|
|
if (bRet)
|
|
{
|
|
pSec->dwZoneCount = dwZoneCount;
|
|
pSec->pDRD = pDRD; // for rsop functionality
|
|
|
|
pSec->hinstUrlmon = NULL; // don't need any of its functions
|
|
|
|
// get our zones hwnd
|
|
pSec->hwndZones = GetDlgItem(hDlg, IDC_LIST_ZONE);
|
|
if(! pSec->hwndZones)
|
|
{
|
|
ASSERT(FALSE);
|
|
bRet = FALSE; // no list box?
|
|
}
|
|
}
|
|
|
|
if (bRet)
|
|
{
|
|
// tell dialog where to get info
|
|
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)pSec);
|
|
|
|
// save the handle to the page
|
|
pSec->hDlg = hDlg;
|
|
pSec->fPendingChange = FALSE;
|
|
|
|
// create an imagelist for the ListBox
|
|
cxIcon = GetSystemMetrics(SM_CXICON);
|
|
cyIcon = GetSystemMetrics(SM_CYICON);
|
|
#ifndef UNIX
|
|
UINT flags = ILC_COLOR32|ILC_MASK;
|
|
|
|
// TODO: commented out for RSOP; should it be uncommented?
|
|
// if(IS_WINDOW_RTL_MIRRORED(hDlg))
|
|
// flags |= ILC_MIRROR;
|
|
pSec->himl = ImageList_Create(cxIcon, cyIcon, flags, pSec->dwZoneCount, 0);
|
|
#else
|
|
pSec->himl = ImageList_Create(cxIcon, cyIcon, ILC_COLOR|ILC_MASK, pSec->dwZoneCount, 0);
|
|
#endif
|
|
if(! pSec->himl)
|
|
bRet = FALSE; // Image list not created
|
|
}
|
|
|
|
if (bRet)
|
|
SendMessage(pSec->hwndZones, LVM_SETIMAGELIST, (WPARAM)LVSIL_NORMAL, (LPARAM)pSec->himl);
|
|
}
|
|
__except(TRUE)
|
|
{
|
|
}
|
|
return bRet;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
int ZoneIndexToGuiIndex(DWORD dwZoneIndex)
|
|
// Product testing asked for the zones in a specific order in the list box;
|
|
// This function returns the desired gui position for a given zone
|
|
// Unrecognized zones are added to the front
|
|
{
|
|
int iGuiIndex = -1;
|
|
switch(dwZoneIndex)
|
|
{
|
|
// Intranet: 2nd spot
|
|
case 1:
|
|
iGuiIndex = 1;
|
|
break;
|
|
|
|
// Internet: 1st spot
|
|
case 3:
|
|
iGuiIndex = 0;
|
|
break;
|
|
|
|
// Trusted Sites: 3rd Spot
|
|
case 2:
|
|
iGuiIndex = 2;
|
|
break;
|
|
|
|
// Restricted Sites: 4th Spot
|
|
case 4:
|
|
iGuiIndex = 3;
|
|
break;
|
|
|
|
// unknown zone
|
|
default:
|
|
iGuiIndex = -1;
|
|
break;
|
|
}
|
|
|
|
|
|
return iGuiIndex;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
// Fill a zone with information from WMI and add it to the
|
|
// ordered list going to the listbox
|
|
// Return values:
|
|
// S_OK indicates success
|
|
// S_FALSE indicates a good state, but the zone was not added (example: flag ZAFLAGS_NO_UI)
|
|
// E_OUTOFMEMORY
|
|
// E_FAIL - other failure
|
|
/////////////////////////////////////////////////////////////////////
|
|
HRESULT SecurityInitZone(DWORD dwIndex, DWORD dwZoneCount, BSTR bstrObjPath,
|
|
ComPtr<IWbemClassObject> pSZObj, LPSECURITYPAGE pSec,
|
|
LV_ITEM *plviZones, BOOL *pfSpotTaken)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
__try
|
|
{
|
|
// create a structure for zone settings
|
|
LPSECURITYZONESETTINGS pszs = (LPSECURITYZONESETTINGS)LocalAlloc(LPTR, sizeof(*pszs));
|
|
if (pszs)
|
|
{
|
|
// store settings for later use
|
|
StrCpyW(pszs->wszObjPath, bstrObjPath);
|
|
|
|
// flags field
|
|
_variant_t vtValue;
|
|
hr = pSZObj->Get(L"flags", 0, &vtValue, NULL, NULL);
|
|
if (SUCCEEDED(hr) && !IsVariantNull(vtValue))
|
|
pszs->dwFlags = (long)vtValue;
|
|
|
|
// zoneIndex field
|
|
hr = pSZObj->Get(L"zoneIndex", 0, &vtValue, NULL, NULL);
|
|
if (SUCCEEDED(hr) && !IsVariantNull(vtValue))
|
|
pszs->dwZoneIndex = (long)vtValue;
|
|
|
|
// currentTemplateLevel field
|
|
hr = pSZObj->Get(L"currentTemplateLevel", 0, &vtValue, NULL, NULL);
|
|
if (SUCCEEDED(hr) && !IsVariantNull(vtValue))
|
|
pszs->dwSecLevel = (long)vtValue;
|
|
|
|
// minimumTemplateLevel field
|
|
hr = pSZObj->Get(L"minimumTemplateLevel", 0, &vtValue, NULL, NULL);
|
|
if (SUCCEEDED(hr) && !IsVariantNull(vtValue))
|
|
pszs->dwMinSecLevel = (long)vtValue;
|
|
|
|
// recommendedTemplateLevel field
|
|
hr = pSZObj->Get(L"recommendedTemplateLevel", 0, &vtValue, NULL, NULL);
|
|
if (SUCCEEDED(hr) && !IsVariantNull(vtValue))
|
|
pszs->dwRecSecLevel = (long)vtValue;
|
|
|
|
// displayName field
|
|
_bstr_t bstrValue;
|
|
hr = pSZObj->Get(L"displayName", 0, &vtValue, NULL, NULL);
|
|
if (SUCCEEDED(hr) && !IsVariantNull(vtValue))
|
|
{
|
|
bstrValue = vtValue;
|
|
StrCpyN(pszs->szDisplayName, (LPCTSTR)bstrValue, ARRAYSIZE(pszs->szDisplayName));
|
|
}
|
|
|
|
// description field
|
|
hr = pSZObj->Get(L"description", 0, &vtValue, NULL, NULL);
|
|
if (SUCCEEDED(hr) && !IsVariantNull(vtValue))
|
|
{
|
|
bstrValue = vtValue;
|
|
StrCpyN(pszs->szDescription, (LPCTSTR)bstrValue, ARRAYSIZE(pszs->szDescription));
|
|
}
|
|
|
|
// iconPath field
|
|
HICON hiconSmall = NULL;
|
|
HICON hiconLarge = NULL;
|
|
hr = pSZObj->Get(L"iconPath", 0, &vtValue, NULL, NULL);
|
|
if (SUCCEEDED(hr) && !IsVariantNull(vtValue))
|
|
{
|
|
bstrValue = vtValue;
|
|
|
|
TCHAR szIconPath[MAX_PATH];
|
|
|
|
// load the icon
|
|
LPWSTR psz = (LPWSTR)bstrValue;
|
|
if (*psz)
|
|
{
|
|
// search for the '#'
|
|
while ((psz[0] != WIDETEXT('#')) && (psz[0] != WIDETEXT('\0')))
|
|
psz++;
|
|
|
|
// if we found it, then we have the foo.dll#00001200 format
|
|
WORD iIcon = 0;
|
|
if (psz[0] == WIDETEXT('#'))
|
|
{
|
|
psz[0] = WIDETEXT('\0');
|
|
StrCpyN(szIconPath, (LPCTSTR)bstrValue, ARRAYSIZE(szIconPath));
|
|
iIcon = (WORD)StrToIntW(psz+1);
|
|
CHAR szPath[MAX_PATH];
|
|
SHUnicodeToAnsi(szIconPath, szPath, ARRAYSIZE(szPath));
|
|
ExtractIconExA(szPath,(UINT)(-1*iIcon), &hiconLarge, &hiconSmall, 1);
|
|
}
|
|
else
|
|
{
|
|
hiconLarge = (HICON)ExtractAssociatedIcon(g_hInstance, szIconPath, (LPWORD)&iIcon);
|
|
}
|
|
}
|
|
|
|
// no icons?! well, just use the generic icon
|
|
if (!hiconSmall && !hiconLarge)
|
|
{
|
|
hiconLarge = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_ZONE));
|
|
if(!hiconLarge)
|
|
{
|
|
LocalFree((HLOCAL)pszs);
|
|
hr = S_FALSE; // no icon found for this zone, not even the generic one
|
|
}
|
|
}
|
|
|
|
if (S_OK == hr)
|
|
{
|
|
// we want to save the Large icon if possible for use in the subdialogs
|
|
pszs->hicon = hiconLarge ? hiconLarge : hiconSmall;
|
|
}
|
|
}
|
|
|
|
// zoneMappings field
|
|
hr = pSZObj->Get(L"zoneMappings", 0, &vtValue, NULL, NULL);
|
|
if (SUCCEEDED(hr) && !IsVariantNull(vtValue))
|
|
{
|
|
SAFEARRAY *psa = vtValue.parray;
|
|
|
|
LONG lLBound, lUBound;
|
|
hr = SafeArrayGetLBound(psa, 1, &lLBound);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = SafeArrayGetUBound(psa, 1, &lUBound);
|
|
if (SUCCEEDED(hr))
|
|
pszs->nMappings = lUBound - lLBound + 1;
|
|
}
|
|
}
|
|
|
|
hr = S_OK;
|
|
|
|
// Find the proper index for the zone in the listbox (there is a user-preferred order)
|
|
int iSpot = ZoneIndexToGuiIndex(dwIndex);
|
|
if(iSpot == -1)
|
|
{
|
|
// if not a recognized zone, add it to the end of the list
|
|
iSpot = dwZoneCount - 1;
|
|
}
|
|
// Make sure there are no collisisons
|
|
while(iSpot >= 0 && pfSpotTaken[iSpot] == TRUE)
|
|
{
|
|
iSpot--;
|
|
}
|
|
// Don't go past beginning of array
|
|
if(iSpot < 0)
|
|
{
|
|
// It can be proven that it is impossible to get here, unless there is
|
|
// something wrong with the function ZoneIndexToGuiIndex
|
|
ASSERT(FALSE);
|
|
LocalFree((HLOCAL)pszs);
|
|
if(hiconSmall)
|
|
DestroyIcon(hiconSmall);
|
|
if(hiconLarge)
|
|
DestroyIcon(hiconLarge);
|
|
hr = E_FAIL;
|
|
}
|
|
|
|
LV_ITEM *plvItem = NULL;
|
|
if (S_OK == hr)
|
|
{
|
|
plvItem = &(plviZones[iSpot]);
|
|
pfSpotTaken[iSpot] = TRUE;
|
|
|
|
|
|
// init the List Box item and save it for later addition
|
|
plvItem->mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
|
|
plvItem->iItem = iSpot;
|
|
plvItem->iSubItem = 0;
|
|
// large icons prefered for the icon view (if switch back to report view, prefer small icons)
|
|
plvItem->iImage = ImageList_AddIcon(pSec->himl, hiconLarge ? hiconLarge : hiconSmall);
|
|
|
|
plvItem->pszText = new TCHAR[MAX_PATH];
|
|
if(!plvItem->pszText)
|
|
{
|
|
LocalFree((HLOCAL)pszs);
|
|
if(hiconSmall)
|
|
DestroyIcon(hiconSmall);
|
|
if(hiconLarge)
|
|
DestroyIcon(hiconLarge);
|
|
hr = E_OUTOFMEMORY;
|
|
}
|
|
}
|
|
|
|
if (S_OK == hr)
|
|
{
|
|
StrCpy(plvItem->pszText, pszs->szDisplayName);
|
|
plvItem->lParam = (LPARAM)pszs; // save the zone settings here
|
|
|
|
// if we created a small icon, destroy it, since the system does not save the handle
|
|
// when it is added to the imagelist (see ImageList_AddIcon in VC help)
|
|
// Keep it around if we had to use it in place of the large icon
|
|
if (hiconSmall && hiconLarge)
|
|
DestroyIcon(hiconSmall);
|
|
}
|
|
}
|
|
else
|
|
hr = E_OUTOFMEMORY;
|
|
}
|
|
__except(TRUE)
|
|
{
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
// To make the slider control accessbile we have to subclass it and over-ride
|
|
// the accessiblity object
|
|
/////////////////////////////////////////////////////////////////////
|
|
void SecurityInitSlider(LPSECURITYPAGE pSec)
|
|
{
|
|
// Initialize the slider control (set number of levels, and frequency one tick per level)
|
|
SendDlgItemMessage(pSec->hDlg, IDC_SLIDER, TBM_SETRANGE, (WPARAM) (BOOL) FALSE, (LPARAM) MAKELONG(0, NUM_TEMPLATE_LEVELS - 1));
|
|
SendDlgItemMessage(pSec->hDlg, IDC_SLIDER, TBM_SETTICFREQ, (WPARAM) 1, (LPARAM) 0);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
void SecurityInitControls(LPSECURITYPAGE pSec)
|
|
{
|
|
// select the 0 position zone
|
|
LV_ITEM lvItem;
|
|
lvItem.mask = LVIF_STATE;
|
|
lvItem.stateMask = LVIS_SELECTED;
|
|
lvItem.state = LVIS_SELECTED;
|
|
SendMessage(pSec->hwndZones, LVM_SETITEMSTATE, 0, (LPARAM)&lvItem);
|
|
|
|
// get the zone settings for the selected item
|
|
lvItem.mask = LVIF_PARAM;
|
|
lvItem.iItem = pSec->iZoneSel;
|
|
lvItem.iSubItem = 0;
|
|
SendMessage(pSec->hwndZones, LVM_GETITEM, (WPARAM)0, (LPARAM)&lvItem);
|
|
pSec->pszs = (LPSECURITYZONESETTINGS)lvItem.lParam;
|
|
|
|
// Initialize the local strings to carry the Level Descriptions
|
|
LoadString(g_hInstance, IDS_TEMPLATE_DESC_HI, LEVEL_DESCRIPTION0, ARRAYSIZE(LEVEL_DESCRIPTION0));
|
|
LoadString(g_hInstance, IDS_TEMPLATE_DESC_MED, LEVEL_DESCRIPTION1, ARRAYSIZE(LEVEL_DESCRIPTION1));
|
|
LoadString(g_hInstance, IDS_TEMPLATE_DESC_MEDLOW, LEVEL_DESCRIPTION2, ARRAYSIZE(LEVEL_DESCRIPTION2));
|
|
LoadString(g_hInstance, IDS_TEMPLATE_DESC_LOW, LEVEL_DESCRIPTION3, ARRAYSIZE(LEVEL_DESCRIPTION3));
|
|
LoadString(g_hInstance, IDS_TEMPLATE_DESC_CUSTOM, CUSTOM_DESCRIPTION, ARRAYSIZE(CUSTOM_DESCRIPTION));
|
|
|
|
LoadString(g_hInstance, IDS_TEMPLATE_NAME_HI, LEVEL_NAME0, ARRAYSIZE(LEVEL_NAME0));
|
|
LoadString(g_hInstance, IDS_TEMPLATE_NAME_MED, LEVEL_NAME1, ARRAYSIZE(LEVEL_NAME1));
|
|
LoadString(g_hInstance, IDS_TEMPLATE_NAME_MEDLOW, LEVEL_NAME2, ARRAYSIZE(LEVEL_NAME2));
|
|
LoadString(g_hInstance, IDS_TEMPLATE_NAME_LOW, LEVEL_NAME3, ARRAYSIZE(LEVEL_NAME3));
|
|
LoadString(g_hInstance, IDS_TEMPLATE_NAME_CUSTOM, CUSTOM_NAME, ARRAYSIZE(CUSTOM_NAME));
|
|
|
|
// Initialize text boxes and icons for the current zone
|
|
SetDlgItemText(pSec->hDlg, IDC_ZONE_DESCRIPTION, pSec->pszs->szDescription);
|
|
SetDlgItemText(pSec->hDlg, IDC_ZONELABEL, pSec->pszs->szDisplayName);
|
|
SendDlgItemMessage(pSec->hDlg, IDC_ZONE_ICON, STM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)pSec->pszs->hicon);
|
|
|
|
// Initialize the slider control
|
|
SecurityInitSlider(pSec);
|
|
|
|
// Initialize the list view (add column 0 for icon and text, and autosize it)
|
|
LV_COLUMN lvCasey;
|
|
lvCasey.mask = 0;
|
|
SendDlgItemMessage(pSec->hDlg, IDC_LIST_ZONE, LVM_INSERTCOLUMN, (WPARAM) 0, (LPARAM) &lvCasey);
|
|
SendDlgItemMessage(pSec->hDlg, IDC_LIST_ZONE, LVM_SETCOLUMNWIDTH, (WPARAM) 0, (LPARAM) MAKELPARAM(LVSCW_AUTOSIZE, 0));
|
|
|
|
// Set the font of the name to the bold font
|
|
pSec->hfontBolded = NULL;
|
|
HFONT hfontOrig = (HFONT) SendDlgItemMessage(pSec->hDlg, IDC_STATIC_EMPTY, WM_GETFONT, (WPARAM) 0, (LPARAM) 0);
|
|
if(hfontOrig == NULL)
|
|
hfontOrig = (HFONT) GetStockObject(SYSTEM_FONT);
|
|
|
|
// set the zone name and level font to bolded
|
|
if(hfontOrig)
|
|
{
|
|
LOGFONT lfData;
|
|
if(GetObject(hfontOrig, sizeof(lfData), &lfData) != 0)
|
|
{
|
|
// The distance from 400 (normal) to 700 (bold)
|
|
lfData.lfWeight += 300;
|
|
if(lfData.lfWeight > 1000)
|
|
lfData.lfWeight = 1000;
|
|
pSec->hfontBolded = CreateFontIndirect(&lfData);
|
|
if(pSec->hfontBolded)
|
|
{
|
|
// the zone level and zone name text boxes should have the same font, so this is okat
|
|
SendDlgItemMessage(pSec->hDlg, IDC_ZONELABEL, WM_SETFONT, (WPARAM) pSec->hfontBolded, (LPARAM) MAKELPARAM(FALSE, 0));
|
|
SendDlgItemMessage(pSec->hDlg, IDC_LEVEL_NAME, WM_SETFONT, (WPARAM) pSec->hfontBolded, (LPARAM) MAKELPARAM(FALSE, 0));
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
// Converting the Security Level DWORD identitifiers to slider levels, and vice versa
|
|
/////////////////////////////////////////////////////////////////////
|
|
int SecLevelToSliderPos(DWORD dwLevel)
|
|
{
|
|
switch(dwLevel)
|
|
{
|
|
case URLTEMPLATE_LOW:
|
|
return 3;
|
|
case URLTEMPLATE_MEDLOW:
|
|
return 2;
|
|
case URLTEMPLATE_MEDIUM:
|
|
return 1;
|
|
case URLTEMPLATE_HIGH:
|
|
return 0;
|
|
case URLTEMPLATE_CUSTOM:
|
|
return -1;
|
|
default:
|
|
return -2;
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
// Duties:
|
|
// Make the controls (slider, en/disabled buttons) match the data for the current zone
|
|
// Make the views (Level description text) match the data for the current zone
|
|
// Set focus (to slider, if enabled, else custom settings button, if enabled, else
|
|
// listbox) if fSetFocus is TRUE
|
|
// Note: the zone descriptions are not set here; those are handled by the code responsible
|
|
// for changing zones
|
|
/////////////////////////////////////////////////////////////////////
|
|
BOOL SecurityEnableControls(LPSECURITYPAGE pSec, BOOL fSetFocus)
|
|
{
|
|
int iLevel = -1;
|
|
|
|
if (pSec && pSec->pszs)
|
|
{
|
|
HWND hwndSlider = GetDlgItem(pSec->hDlg, IDC_SLIDER);
|
|
|
|
iLevel = SecLevelToSliderPos(pSec->pszs->dwSecLevel);
|
|
ASSERT(iLevel > -2);
|
|
|
|
// Set the level of the slider to the setting for the current zone
|
|
// Show or hide the slider for preset levels/custom
|
|
// Set the level description text
|
|
if(iLevel >= 0)
|
|
{
|
|
SendMessage(hwndSlider, TBM_SETPOS, (WPARAM) (BOOL) TRUE, (LPARAM) (LONG) iLevel);
|
|
// Make sure the slider is visible
|
|
ShowWindow(hwndSlider, SW_SHOW);
|
|
ShowWindow(GetDlgItem(pSec->hDlg, IDC_STATIC_SLIDERMOVETEXT), SW_SHOW);
|
|
SetDlgItemText(pSec->hDlg, IDC_LEVEL_DESCRIPTION, LEVEL_DESCRIPTION[iLevel]);
|
|
SetDlgItemText(pSec->hDlg, IDC_LEVEL_NAME, LEVEL_NAME[iLevel]);
|
|
}
|
|
else
|
|
{
|
|
// Hide the slider for custom
|
|
ShowWindow(hwndSlider, SW_HIDE);
|
|
ShowWindow(GetDlgItem(pSec->hDlg, IDC_STATIC_SLIDERMOVETEXT), SW_HIDE);
|
|
SetDlgItemText(pSec->hDlg, IDC_LEVEL_DESCRIPTION, CUSTOM_DESCRIPTION);
|
|
SetDlgItemText(pSec->hDlg, IDC_LEVEL_NAME, CUSTOM_NAME);
|
|
}
|
|
|
|
// If the zone is empty, show the "zone is empty" string
|
|
// Default is to not show the sting (if something goes wrong)
|
|
// Empty zone not possible for internet, intranet, or local zones
|
|
if((pSec->pszs->dwZoneIndex != URLZONE_INTRANET &&
|
|
pSec->pszs->dwZoneIndex != URLZONE_INTERNET) &&
|
|
pSec->pszs->dwZoneIndex != URLZONE_LOCAL_MACHINE)
|
|
{
|
|
// If there aren't any zone mappings, zone is empty (not valid for internet and intranet)
|
|
if (pSec->pszs->nMappings > 0)
|
|
ShowWindow(GetDlgItem(pSec->hDlg, IDC_STATIC_EMPTY), SW_HIDE);
|
|
else
|
|
ShowWindow(GetDlgItem(pSec->hDlg, IDC_STATIC_EMPTY), SW_SHOW);
|
|
}
|
|
else
|
|
ShowWindow(GetDlgItem(pSec->hDlg, IDC_STATIC_EMPTY), SW_HIDE);
|
|
|
|
// If we were told to set focus then move focus to the slider.
|
|
if (fSetFocus)
|
|
{
|
|
if(!pSec->fNoEdit)
|
|
{
|
|
if(iLevel >= 0)
|
|
SetFocus(hwndSlider);
|
|
else if(pSec->pszs->dwFlags & ZAFLAGS_CUSTOM_EDIT)
|
|
SetFocus(GetDlgItem(pSec->hDlg, IDC_BUTTON_SETTINGS));
|
|
else
|
|
SetFocus(GetDlgItem(pSec->hDlg, IDC_LIST_ZONE));
|
|
}
|
|
else // No focus is allowed, set focus to the list box
|
|
SetFocus(GetDlgItem(pSec->hDlg, IDC_LIST_ZONE));
|
|
}
|
|
|
|
EnableWindow(GetDlgItem(pSec->hDlg, IDC_BUTTON_SETTINGS),
|
|
(pSec->pszs->dwFlags & ZAFLAGS_CUSTOM_EDIT) && !pSec->fNoEdit);
|
|
EnableWindow(GetDlgItem(pSec->hDlg, IDC_BUTTON_ADD_SITES),
|
|
(pSec->pszs->dwFlags & ZAFLAGS_ADD_SITES) && !pSec->fDisableAddSites);
|
|
|
|
EnableDlgItem2(pSec->hDlg, IDC_SLIDER, FALSE);
|
|
EnableDlgItem2(pSec->hDlg, IDC_ZONE_RESET, FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL IsESCEnabled(CDlgRSoPData *pDRD, DWORD dwPrecedence)
|
|
{
|
|
WCHAR wszObjPath[128];
|
|
|
|
wnsprintf(wszObjPath, countof(wszObjPath),
|
|
L"RSOP_IEESC.rsopID=\"IEAK\",rsopPrecedence=%ld", dwPrecedence);
|
|
|
|
_bstr_t bstrObjPath = wszObjPath;
|
|
|
|
ComPtr<IWbemServices> pWbemServices = pDRD->GetWbemServices();
|
|
ComPtr<IWbemClassObject> pSZObj = NULL;
|
|
_variant_t vtValue;
|
|
HRESULT hr = pWbemServices->GetObject(bstrObjPath, 0L, NULL, (IWbemClassObject**)&pSZObj, NULL);
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
hr = pSZObj->Get(L"EscEnabled", 0, &vtValue, NULL, NULL);
|
|
if (SUCCEEDED(hr) && !IsVariantNull(vtValue) && (bool)vtValue)
|
|
{
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
BOOL InitImportedSecZonesDlgInRSoPMode(HWND hDlg, CDlgRSoPData *pDRD)
|
|
{
|
|
BOOL bRet = TRUE;
|
|
__try
|
|
{
|
|
// Initialize globals variables (to be destroyed at WM_DESTROY)
|
|
LPSECURITYPAGE pSec = NULL;
|
|
UINT iIndex = 0;
|
|
DWORD dwZoneCount = pDRD->GetImportedSecZoneCount();
|
|
if(SecurityInitGlobals(&pSec, hDlg, pDRD, dwZoneCount) == FALSE)
|
|
{
|
|
EndDialog(hDlg, 0);
|
|
bRet = FALSE; // Initialization failed
|
|
}
|
|
|
|
if (bRet)
|
|
{
|
|
BOOL fUseHKLM = TRUE;
|
|
|
|
// get the zone settings for this zone
|
|
if (NULL != pDRD->ConnectToNamespace())
|
|
{
|
|
// get our stored precedence value
|
|
DWORD dwCurGPOPrec = pDRD->GetImportedSecZonesPrec();
|
|
|
|
|
|
if(!pDRD->IsPlanningMode())
|
|
{
|
|
if(IsESCEnabled(pDRD, dwCurGPOPrec))
|
|
{
|
|
TCHAR szBuffer[MAX_PATH * 2], szTitle[MAX_PATH];
|
|
LoadString(g_hInstance, IDS_IESCINFO, szBuffer, ARRAYSIZE(szBuffer));
|
|
LoadString(g_hInstance, IDS_IEESCTITLE, szTitle, ARRAYSIZE(szTitle));
|
|
MessageBox(hDlg, szBuffer, szTitle, MB_OK);
|
|
}
|
|
}
|
|
|
|
//
|
|
// Add the Listbox items for the zones
|
|
//
|
|
|
|
// The zones have to be added in a particular order
|
|
// Array used to order zones for adding
|
|
LV_ITEM *plviZones = new LV_ITEM[dwZoneCount];
|
|
BOOL *pfSpotTaken = new BOOL[dwZoneCount];
|
|
for(iIndex =0; pfSpotTaken && iIndex < dwZoneCount; iIndex++)
|
|
pfSpotTaken[iIndex] = FALSE;
|
|
|
|
// propogate zone dropdown
|
|
WCHAR wszObjPath[128];
|
|
for (DWORD dwIndex=0; dwIndex < dwZoneCount; dwIndex++)
|
|
{
|
|
// create the object path of this security zone for this GPO
|
|
wnsprintf(wszObjPath, countof(wszObjPath),
|
|
L"RSOP_IESecurityZoneSettings.rsopID=\"IEAK\",rsopPrecedence=%ld,useHKLM=%s,zoneIndex=%lu",
|
|
dwCurGPOPrec, fUseHKLM ? TEXT("TRUE") : TEXT("FALSE"), dwIndex);
|
|
_bstr_t bstrObjPath = wszObjPath;
|
|
|
|
// get the RSOP_IEProgramSettings object and its properties
|
|
ComPtr<IWbemServices> pWbemServices = pDRD->GetWbemServices();
|
|
ComPtr<IWbemClassObject> pSZObj = NULL;
|
|
HRESULT hr = pWbemServices->GetObject(bstrObjPath, 0L, NULL, (IWbemClassObject**)&pSZObj, NULL);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
|
|
if(FAILED(SecurityInitZone(dwIndex, dwZoneCount, bstrObjPath,
|
|
pSZObj, pSec, plviZones, pfSpotTaken)))
|
|
{
|
|
// Delete all memory allocated for any previous zones (which have not yet been added to
|
|
// the listbox)
|
|
for(iIndex = 0; iIndex < dwZoneCount; iIndex++)
|
|
{
|
|
if(pfSpotTaken && pfSpotTaken[iIndex] && plviZones && (LPSECURITYZONESETTINGS) (plviZones[iIndex].lParam) != NULL)
|
|
{
|
|
LocalFree((LPSECURITYZONESETTINGS) (plviZones[iIndex].lParam));
|
|
plviZones[iIndex].lParam = NULL;
|
|
if(plviZones[iIndex].pszText)
|
|
delete [] plviZones[iIndex].pszText;
|
|
}
|
|
}
|
|
delete [] plviZones;
|
|
delete [] pfSpotTaken;
|
|
EndDialog(hDlg, 0);
|
|
return FALSE;
|
|
}
|
|
}
|
|
else // no more zones read from WMI
|
|
break;
|
|
}
|
|
|
|
// Add all of the arrayed list items to the listbox
|
|
for(iIndex = 0; iIndex < dwZoneCount; iIndex++)
|
|
{
|
|
if(pfSpotTaken[iIndex])
|
|
{
|
|
SendMessage(pSec->hwndZones, LVM_INSERTITEM, (WPARAM)0, (LPARAM)&(plviZones[iIndex]));
|
|
delete [] plviZones[iIndex].pszText;
|
|
}
|
|
}
|
|
delete [] plviZones;
|
|
delete [] pfSpotTaken;
|
|
}
|
|
|
|
SecurityInitControls(pSec);
|
|
SecurityEnableControls(pSec, FALSE);
|
|
}
|
|
}
|
|
__except(TRUE)
|
|
{
|
|
}
|
|
return bRet;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
// SecurityOnCommand()
|
|
//
|
|
// Handles Security Dialog's window messages
|
|
//
|
|
/////////////////////////////////////////////////////////////////////
|
|
void SecurityOnCommand(LPSECURITYPAGE pSec, UINT id, UINT nCmd)
|
|
{
|
|
UNREFERENCED_PARAMETER(nCmd);
|
|
switch (id)
|
|
{
|
|
case IDC_BUTTON_ADD_SITES:
|
|
{
|
|
if (pSec->pszs->dwZoneIndex == URLZONE_INTRANET)
|
|
DialogBoxParam(g_hInstance, MAKEINTRESOURCE(IDD_SECURITY_INTRANET), pSec->hDlg,
|
|
SecurityAddSitesIntranetDlgProc, (LPARAM)pSec);
|
|
else
|
|
DialogBoxParam(g_hInstance, MAKEINTRESOURCE(IDD_SECURITY_ADD_SITES), pSec->hDlg,
|
|
SecurityAddSitesDlgProc, (LPARAM)pSec);
|
|
|
|
// Resynch controls (in case the "zone is empty" message needs to be updated)
|
|
SecurityEnableControls(pSec, FALSE);
|
|
}
|
|
break;
|
|
|
|
case IDC_BUTTON_SETTINGS:
|
|
{
|
|
// Note: messages to change the level from preset to custom as a result of this call
|
|
// are sent by the CustomSettings dialog
|
|
DialogBoxParam(g_hInstance, MAKEINTRESOURCE(IDD_SECURITY_CUSTOM_SETTINGS), pSec->hDlg,
|
|
SecurityCustomSettingsDlgProc, (LPARAM)pSec);
|
|
break;
|
|
}
|
|
case IDC_ZONE_RESET:
|
|
break;
|
|
|
|
case IDOK:
|
|
EndDialog(pSec->hDlg, IDOK);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
EndDialog(pSec->hDlg, IDCANCEL);
|
|
break;
|
|
|
|
case IDC_SLIDER:
|
|
break;
|
|
|
|
case IDC_LIST_ZONE:
|
|
{
|
|
// Sundown: coercion to int-- selection is range-restricted
|
|
int iNewSelection = (int) SendMessage(pSec->hwndZones, LVM_GETNEXTITEM, (WPARAM)-1,
|
|
MAKELPARAM(LVNI_SELECTED, 0));
|
|
|
|
if ((iNewSelection != pSec->iZoneSel) && (iNewSelection != -1))
|
|
{
|
|
LV_ITEM lvItem;
|
|
|
|
lvItem.iItem = iNewSelection;
|
|
lvItem.iSubItem = 0;
|
|
lvItem.mask = LVIF_PARAM;
|
|
SendMessage(pSec->hwndZones, LVM_GETITEM, (WPARAM)0, (LPARAM)&lvItem);
|
|
pSec->pszs = (LPSECURITYZONESETTINGS)lvItem.lParam;
|
|
pSec->iZoneSel = iNewSelection;
|
|
|
|
SetDlgItemText(pSec->hDlg, IDC_ZONE_DESCRIPTION, pSec->pszs->szDescription);
|
|
SetDlgItemText(pSec->hDlg, IDC_ZONELABEL, pSec->pszs->szDisplayName);
|
|
SendDlgItemMessage(pSec->hDlg, IDC_ZONE_ICON, STM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)pSec->pszs->hicon);
|
|
SecurityEnableControls(pSec, FALSE);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
} // SecurityOnCommand()
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
INT_PTR CALLBACK importSecZonesRSoPProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
if (uMsg == WM_INITDIALOG)
|
|
{
|
|
CDlgRSoPData *pDRD = (CDlgRSoPData*)((LPPROPSHEETPAGE)lParam)->lParam;
|
|
BOOL fResult = InitImportedSecZonesDlgInRSoPMode(hDlg, pDRD);
|
|
|
|
return fResult;
|
|
}
|
|
|
|
LPSECURITYPAGE pSec = (LPSECURITYPAGE)GetWindowLongPtr(hDlg, DWLP_USER);
|
|
if (!pSec)
|
|
return FALSE;
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_COMMAND:
|
|
SecurityOnCommand(pSec, LOWORD(wParam), HIWORD(wParam));
|
|
return TRUE;
|
|
|
|
case WM_NOTIFY:
|
|
{
|
|
NMHDR *lpnm = (NMHDR *) lParam;
|
|
|
|
ASSERT(lpnm);
|
|
|
|
// List Box Messages
|
|
if(lpnm->idFrom == IDC_LIST_ZONE)
|
|
{
|
|
NM_LISTVIEW * lplvnm = (NM_LISTVIEW *) lParam;
|
|
if(lplvnm->hdr.code == LVN_ITEMCHANGED)
|
|
{
|
|
// If an item's state has changed, and it is now selected
|
|
if(((lplvnm->uChanged & LVIF_STATE) != 0) && ((lplvnm->uNewState & LVIS_SELECTED) != 0))
|
|
{
|
|
SecurityOnCommand(pSec, IDC_LIST_ZONE, LVN_ITEMCHANGED);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (lpnm->code)
|
|
{
|
|
case PSN_QUERYCANCEL:
|
|
case PSN_KILLACTIVE:
|
|
case PSN_RESET:
|
|
//TODO: What do we do with this?
|
|
// SetWindowLongPtr(pSec->hDlg, DWLP_MSGRESULT, FALSE);
|
|
return TRUE;
|
|
|
|
case PSN_APPLY:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_HELP: // F1
|
|
// ResWinHelp( (HWND)((LPHELPINFO)lParam)->hItemHandle, IDS_HELPFILE,
|
|
// HELP_WM_HELP, (DWORD_PTR)(LPSTR)mapIDCsToIDHs);
|
|
break;
|
|
|
|
case WM_VSCROLL:
|
|
// Slider Messages
|
|
SecurityOnCommand(pSec, IDC_SLIDER, LOWORD(wParam));
|
|
return TRUE;
|
|
|
|
case WM_CONTEXTMENU: // right mouse click
|
|
// ResWinHelp( (HWND) wParam, IDS_HELPFILE,
|
|
// HELP_CONTEXTMENU, (DWORD_PTR)(LPSTR)mapIDCsToIDHs);
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
if(! pSec)
|
|
break;
|
|
|
|
if(pSec->hwndZones)
|
|
{
|
|
for (int iIndex = (int)SendMessage(pSec->hwndZones, LVM_GETITEMCOUNT, 0, 0) - 1;
|
|
iIndex >= 0; iIndex--)
|
|
{
|
|
LV_ITEM lvItem;
|
|
|
|
// get security zone settings object for this item and release it
|
|
lvItem.mask = LVIF_PARAM;
|
|
lvItem.iItem = iIndex;
|
|
lvItem.iSubItem = 0;
|
|
if (SendMessage(pSec->hwndZones, LVM_GETITEM, (WPARAM)0, (LPARAM)&lvItem) == TRUE)
|
|
{
|
|
LPSECURITYZONESETTINGS pszs = (LPSECURITYZONESETTINGS)lvItem.lParam;
|
|
if (pszs)
|
|
{
|
|
if (pszs->hicon)
|
|
DestroyIcon(pszs->hicon);
|
|
LocalFree((HLOCAL)pszs);
|
|
pszs = NULL;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(pSec->himl)
|
|
ImageList_Destroy(pSec->himl);
|
|
|
|
if(pSec->hfontBolded)
|
|
DeleteObject(pSec->hfontBolded);
|
|
|
|
LocalFree(pSec);
|
|
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)NULL);
|
|
break;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
void InitZoneMappingsInUI(HWND hwndList, CDlgRSoPData *pDRD,
|
|
LPSECURITYZONESETTINGS pszs)
|
|
{
|
|
__try
|
|
{
|
|
// get the RSOP_IEProgramSettings object and its properties
|
|
ComPtr<IWbemServices> pWbemServices = pDRD->GetWbemServices();
|
|
_bstr_t bstrObjPath = pszs->wszObjPath;
|
|
ComPtr<IWbemClassObject> pSZObj = NULL;
|
|
HRESULT hr = pWbemServices->GetObject(bstrObjPath, 0L, NULL, (IWbemClassObject**)&pSZObj, NULL);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
// zoneMappings field
|
|
_variant_t vtValue;
|
|
hr = pSZObj->Get(L"zoneMappings", 0, &vtValue, NULL, NULL);
|
|
if (SUCCEEDED(hr) && !IsVariantNull(vtValue))
|
|
{
|
|
SAFEARRAY *psa = vtValue.parray;
|
|
|
|
BSTR HUGEP *pbstr = NULL;
|
|
hr = SafeArrayAccessData(psa, (void HUGEP**)&pbstr);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
for (long nMapping = 0; nMapping < pszs->nMappings; nMapping++)
|
|
{
|
|
LPCTSTR szMapping = (LPCTSTR)pbstr[nMapping];
|
|
SendMessage(hwndList, LB_INSERTSTRING, (WPARAM)-1, (LPARAM)szMapping);
|
|
}
|
|
}
|
|
|
|
SafeArrayUnaccessData(psa);
|
|
}
|
|
}
|
|
}
|
|
__except(TRUE)
|
|
{
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
INT_PTR CALLBACK SecurityAddSitesDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
|
|
{
|
|
LPADDSITESINFO pasi;
|
|
|
|
if (uMsg == WM_INITDIALOG)
|
|
{
|
|
pasi = (LPADDSITESINFO)LocalAlloc(LPTR, sizeof(*pasi));
|
|
if (!pasi)
|
|
{
|
|
EndDialog(hDlg, IDCANCEL);
|
|
return FALSE;
|
|
}
|
|
|
|
// tell dialog where to get info
|
|
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)pasi);
|
|
|
|
// save the handle to the page
|
|
pasi->hDlg = hDlg;
|
|
pasi->pSec = (LPSECURITYPAGE)lParam;
|
|
pasi->hwndWebSites = GetDlgItem(hDlg, IDC_LIST_WEBSITES);
|
|
pasi->hwndAdd = GetDlgItem(hDlg, IDC_EDIT_ADD_SITE);
|
|
|
|
pasi->fRequireServerVerification = pasi->pSec->pszs->dwFlags & ZAFLAGS_REQUIRE_VERIFICATION;
|
|
CheckDlgButton(hDlg, IDC_CHECK_REQUIRE_SERVER_VERIFICATION, pasi->fRequireServerVerification);
|
|
|
|
SendMessage(hDlg, WM_SETTEXT, (WPARAM)0, (LPARAM)pasi->pSec->pszs->szDisplayName);
|
|
SendDlgItemMessage(hDlg, IDC_ZONE_ICON, STM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)pasi->pSec->pszs->hicon);
|
|
|
|
InitZoneMappingsInUI(pasi->hwndWebSites, pasi->pSec->pDRD, pasi->pSec->pszs);
|
|
|
|
EnableDlgItem2(hDlg, IDC_EDIT_ADD_SITE, FALSE);
|
|
EnableDlgItem2(hDlg, IDC_BUTTON_ADD, FALSE);
|
|
EnableDlgItem2(hDlg, IDC_CHECK_REQUIRE_SERVER_VERIFICATION, FALSE);
|
|
EnableDlgItem2(hDlg, IDC_BUTTON_REMOVE, FALSE);
|
|
}
|
|
|
|
else
|
|
pasi = (LPADDSITESINFO)GetWindowLongPtr(hDlg, DWLP_USER);
|
|
|
|
if (!pasi)
|
|
return FALSE;
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_COMMAND:
|
|
switch (LOWORD(wParam))
|
|
{
|
|
case IDOK:
|
|
EndDialog(hDlg, IDOK);
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
EndDialog(hDlg, IDCANCEL);
|
|
break;
|
|
|
|
case IDC_LIST_WEBSITES:
|
|
switch (HIWORD(wParam))
|
|
{
|
|
case LBN_SELCHANGE:
|
|
case LBN_SELCANCEL:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case IDC_EDIT_ADD_SITE:
|
|
switch(HIWORD(wParam))
|
|
{
|
|
case EN_CHANGE:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case IDC_BUTTON_ADD:
|
|
break;
|
|
|
|
case IDC_BUTTON_REMOVE:
|
|
break;
|
|
default:
|
|
return FALSE;
|
|
|
|
}
|
|
return TRUE;
|
|
break;
|
|
|
|
case WM_HELP: // F1
|
|
// ResWinHelp( (HWND)((LPHELPINFO)lParam)->hItemHandle, IDS_HELPFILE,
|
|
// HELP_WM_HELP, (DWORD_PTR)(LPSTR)mapIDCsToIDHs);
|
|
break;
|
|
|
|
case WM_CONTEXTMENU: // right mouse click
|
|
// ResWinHelp( (HWND) wParam, IDS_HELPFILE,
|
|
// HELP_CONTEXTMENU, (DWORD_PTR)(LPSTR)mapIDCsToIDHs);
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
if (pasi)
|
|
{
|
|
LocalFree(pasi);
|
|
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)NULL);
|
|
}
|
|
break;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
INT_PTR CALLBACK SecurityAddSitesIntranetDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
|
|
{
|
|
LPADDSITESINTRANETINFO pasii;
|
|
|
|
if (uMsg == WM_INITDIALOG)
|
|
{
|
|
pasii = (LPADDSITESINTRANETINFO)LocalAlloc(LPTR, sizeof(*pasii));
|
|
if (!pasii)
|
|
{
|
|
EndDialog(hDlg, IDCANCEL);
|
|
return FALSE;
|
|
}
|
|
|
|
// tell dialog where to get info
|
|
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)pasii);
|
|
|
|
// save the handle to the page
|
|
pasii->hDlg = hDlg;
|
|
pasii->pSec = (LPSECURITYPAGE)lParam;
|
|
|
|
SendMessage(hDlg, WM_SETTEXT, (WPARAM)0, (LPARAM)pasii->pSec->pszs->szDisplayName);
|
|
CheckDlgButton(hDlg, IDC_CHECK_USEINTRANET, pasii->pSec->pszs->dwFlags & ZAFLAGS_INCLUDE_INTRANET_SITES);
|
|
CheckDlgButton(hDlg, IDC_CHECK_PROXY, pasii->pSec->pszs->dwFlags & ZAFLAGS_INCLUDE_PROXY_OVERRIDE);
|
|
CheckDlgButton(hDlg, IDC_CHECK_UNC, pasii->pSec->pszs->dwFlags & ZAFLAGS_UNC_AS_INTRANET);
|
|
SendDlgItemMessage(hDlg, IDC_ZONE_ICON, STM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)pasii->pSec->pszs->hicon);
|
|
|
|
EnableDlgItem2(hDlg, IDC_CHECK_USEINTRANET, FALSE);
|
|
EnableDlgItem2(hDlg, IDC_CHECK_PROXY, FALSE);
|
|
EnableDlgItem2(hDlg, IDC_CHECK_UNC, FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
else
|
|
pasii = (LPADDSITESINTRANETINFO)GetWindowLongPtr(hDlg, DWLP_USER);
|
|
|
|
if (!pasii)
|
|
return FALSE;
|
|
|
|
switch (uMsg) {
|
|
case WM_COMMAND:
|
|
switch (LOWORD(wParam))
|
|
{
|
|
case IDOK:
|
|
EndDialog(hDlg, IDOK);
|
|
break;
|
|
case IDCANCEL:
|
|
EndDialog(hDlg, IDCANCEL);
|
|
break;
|
|
|
|
case IDC_INTRANET_ADVANCED:
|
|
DialogBoxParam(g_hInstance, MAKEINTRESOURCE(IDD_SECURITY_ADD_SITES), hDlg,
|
|
SecurityAddSitesDlgProc, (LPARAM)pasii->pSec);
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
|
|
case WM_HELP: // F1
|
|
// ResWinHelp( (HWND)((LPHELPINFO)lParam)->hItemHandle, IDS_HELPFILE,
|
|
// HELP_WM_HELP, (DWORD_PTR)(LPSTR)mapIDCsToIDHs);
|
|
break;
|
|
|
|
case WM_CONTEXTMENU: // right mouse click
|
|
// ResWinHelp( (HWND) wParam, IDS_HELPFILE,
|
|
// HELP_CONTEXTMENU, (DWORD_PTR)(LPSTR)mapIDCsToIDHs);
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
if (pasii)
|
|
{
|
|
LocalFree(pasii);
|
|
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)NULL);
|
|
}
|
|
break;
|
|
}
|
|
return FALSE;
|
|
}
|