[NETSHELL]

- Provide a common struct for the network setup data.
- Remember the typical/custom setup decision in order to return to the proper previous page when we click the 'Back' button on the domain page.
- Rename network setup page functions in a consistent way.
CORE-10955

svn path=/trunk/; revision=71356
This commit is contained in:
Eric Kohl 2016-05-19 13:42:37 +00:00
parent 6b27b08a69
commit 811a8408d0

View file

@ -2,6 +2,19 @@
#include <syssetup/syssetup.h> #include <syssetup/syssetup.h>
#define NETWORK_SETUP_MAGIC 0x50515253
typedef struct _NETWORKSETUPDATA
{
DWORD dwMagic;
BOOL bTypicalNetworkSetup;
PSETUPDATA pSetupData;
} NETWORKSETUPDATA, *PNETWORKSETUPDATA;
extern "C" extern "C"
{ {
@ -24,33 +37,39 @@ NetworkSettingsPageDlgProc(
WPARAM wParam, WPARAM wParam,
LPARAM lParam) LPARAM lParam)
{ {
PSETUPDATA SetupData; PNETWORKSETUPDATA pNetworkSetupData;
PSETUPDATA pSetupData;
LPNMHDR lpnm; LPNMHDR lpnm;
/* Retrieve pointer to the global setup data */ /* Retrieve pointer to the global setup data */
SetupData = (PSETUPDATA)GetWindowLongPtr (hwndDlg, GWL_USERDATA); pNetworkSetupData = (PNETWORKSETUPDATA)GetWindowLongPtr (hwndDlg, GWL_USERDATA);
if ((pNetworkSetupData != NULL) &&
(pNetworkSetupData->dwMagic == NETWORK_SETUP_MAGIC))
pSetupData = pNetworkSetupData->pSetupData;
switch (uMsg) switch (uMsg)
{ {
case WM_INITDIALOG: case WM_INITDIALOG:
/* Save pointer to the global setup data */ /* Save pointer to the global setup data */
SetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam; pNetworkSetupData = (PNETWORKSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam;
SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)SetupData); SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)pNetworkSetupData);
pSetupData = pNetworkSetupData->pSetupData;
/* Set the fonts of both the options to bold */ /* Set the fonts of both the options to bold */
SetBoldText(hwndDlg, IDC_NETWORK_TYPICAL, SetupData); SetBoldText(hwndDlg, IDC_NETWORK_TYPICAL, pSetupData);
SetBoldText(hwndDlg, IDC_NETWORK_CUSTOM, SetupData); SetBoldText(hwndDlg, IDC_NETWORK_CUSTOM, pSetupData);
/* Set the typical settings option as the default */ /* Set the typical settings option as the default */
SendDlgItemMessage(hwndDlg, IDC_NETWORK_TYPICAL, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); SendDlgItemMessage(hwndDlg, IDC_NETWORK_TYPICAL, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
if (SetupData->UnattendSetup) if (pSetupData->UnattendSetup)
{ {
//... //...
} }
break; break;
case WM_DESTROY: case WM_DESTROY:
/* ATTENTION: Free pNetworkSetupData only in one of the page functions!!! */
//... //...
break; break;
@ -62,7 +81,7 @@ NetworkSettingsPageDlgProc(
case PSN_SETACTIVE: case PSN_SETACTIVE:
/* Enable the Back and Next buttons */ /* Enable the Back and Next buttons */
PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT); PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT);
if (SetupData->UnattendSetup) if (pSetupData->UnattendSetup)
{ {
SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_NETWORKCOMPONENTPAGE); SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_NETWORKCOMPONENTPAGE);
return TRUE; return TRUE;
@ -70,16 +89,19 @@ NetworkSettingsPageDlgProc(
break; break;
case PSN_WIZNEXT: case PSN_WIZNEXT:
pNetworkSetupData->bTypicalNetworkSetup = FALSE;
/* If the Typical Settings button is chosen, then skip to the Domain Page */ /* If the Typical Settings button is chosen, then skip to the Domain Page */
if (IsDlgButtonChecked(hwndDlg, IDC_NETWORK_TYPICAL) == BST_CHECKED) if (IsDlgButtonChecked(hwndDlg, IDC_NETWORK_TYPICAL) == BST_CHECKED)
{ {
pNetworkSetupData->bTypicalNetworkSetup = TRUE;
SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_NETWORKDOMAINPAGE); SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_NETWORKDOMAINPAGE);
return TRUE; return TRUE;
} }
break; break;
case PSN_WIZBACK: case PSN_WIZBACK:
SetupData->UnattendSetup = FALSE; pSetupData->UnattendSetup = FALSE;
break; break;
} }
break; break;
@ -94,34 +116,40 @@ NetworkSettingsPageDlgProc(
static static
INT_PTR INT_PTR
CALLBACK CALLBACK
NetworkPageDlgProc( NetworkComponentPageDlgProc(
HWND hwndDlg, HWND hwndDlg,
UINT uMsg, UINT uMsg,
WPARAM wParam, WPARAM wParam,
LPARAM lParam) LPARAM lParam)
{ {
PSETUPDATA SetupData; PNETWORKSETUPDATA pNetworkSetupData;
PSETUPDATA pSetupData;
LPNMHDR lpnm; LPNMHDR lpnm;
/* Retrieve pointer to the global setup data */ /* Retrieve pointer to the global setup data */
SetupData = (PSETUPDATA)GetWindowLongPtr (hwndDlg, GWL_USERDATA); pNetworkSetupData = (PNETWORKSETUPDATA)GetWindowLongPtr (hwndDlg, GWL_USERDATA);
if ((pNetworkSetupData != NULL) &&
(pNetworkSetupData->dwMagic == NETWORK_SETUP_MAGIC))
pSetupData = pNetworkSetupData->pSetupData;
switch (uMsg) switch (uMsg)
{ {
case WM_INITDIALOG: case WM_INITDIALOG:
/* Save pointer to the global setup data */ /* Save pointer to the global setup data */
SetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam; pNetworkSetupData = (PNETWORKSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam;
SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)SetupData); SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)pNetworkSetupData);
pSetupData = pNetworkSetupData->pSetupData;
SetBoldText(hwndDlg, IDC_NETWORK_DEVICE, SetupData); SetBoldText(hwndDlg, IDC_NETWORK_DEVICE, pSetupData);
if (SetupData->UnattendSetup) if (pSetupData->UnattendSetup)
{ {
//... //...
} }
break; break;
case WM_DESTROY: case WM_DESTROY:
/* ATTENTION: Free pNetworkSetupData only in one of the page functions!!! */
//... //...
break; break;
@ -133,7 +161,7 @@ NetworkPageDlgProc(
case PSN_SETACTIVE: case PSN_SETACTIVE:
/* Enable the Back and Next buttons */ /* Enable the Back and Next buttons */
PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT); PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT);
if (SetupData->UnattendSetup) if (pSetupData->UnattendSetup)
{ {
SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_NETWORKDOMAINPAGE); SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_NETWORKDOMAINPAGE);
return TRUE; return TRUE;
@ -141,7 +169,7 @@ NetworkPageDlgProc(
break; break;
case PSN_WIZBACK: case PSN_WIZBACK:
SetupData->UnattendSetup = FALSE; pSetupData->UnattendSetup = FALSE;
break; break;
} }
break; break;
@ -156,27 +184,32 @@ NetworkPageDlgProc(
static static
INT_PTR INT_PTR
CALLBACK CALLBACK
DomainPageDlgProc( NetworkDomainPageDlgProc(
HWND hwndDlg, HWND hwndDlg,
UINT uMsg, UINT uMsg,
WPARAM wParam, WPARAM wParam,
LPARAM lParam) LPARAM lParam)
{ {
PNETWORKSETUPDATA pNetworkSetupData;
PSETUPDATA pSetupData;
WCHAR DomainName[51]; WCHAR DomainName[51];
WCHAR Title[64]; WCHAR Title[64];
WCHAR ErrorName[256]; WCHAR ErrorName[256];
LPNMHDR lpnm; LPNMHDR lpnm;
PSETUPDATA SetupData;
/* Retrieve pointer to the global setup data */ /* Retrieve pointer to the global setup data */
SetupData = (PSETUPDATA)GetWindowLongPtr (hwndDlg, GWL_USERDATA); pNetworkSetupData = (PNETWORKSETUPDATA)GetWindowLongPtr (hwndDlg, GWL_USERDATA);
if ((pNetworkSetupData != NULL) &&
(pNetworkSetupData->dwMagic == NETWORK_SETUP_MAGIC))
pSetupData = pNetworkSetupData->pSetupData;
switch (uMsg) switch (uMsg)
{ {
case WM_INITDIALOG: case WM_INITDIALOG:
/* Save pointer to the global setup data */ /* Save pointer to the global setup data */
SetupData = (PSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam; pNetworkSetupData = (PNETWORKSETUPDATA)((LPPROPSHEETPAGE)lParam)->lParam;
SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)SetupData); SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)pNetworkSetupData);
pSetupData = pNetworkSetupData->pSetupData;
/* Set the workgroup option as the default */ /* Set the workgroup option as the default */
SendDlgItemMessage(hwndDlg, IDC_SELECT_WORKGROUP, BM_SETCHECK, (WPARAM)BST_CHECKED, 0); SendDlgItemMessage(hwndDlg, IDC_SELECT_WORKGROUP, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
@ -189,7 +222,7 @@ DomainPageDlgProc(
/* Set focus to owner name */ /* Set focus to owner name */
SetFocus(GetDlgItem(hwndDlg, IDC_DOMAIN_NAME)); SetFocus(GetDlgItem(hwndDlg, IDC_DOMAIN_NAME));
if (SetupData->UnattendSetup) if (pSetupData->UnattendSetup)
{ {
//... //...
} }
@ -197,6 +230,15 @@ DomainPageDlgProc(
case WM_DESTROY: case WM_DESTROY:
//... //...
/* ATTENTION: Free pNetworkSetupData only in one of the page functions!!! */
if (pNetworkSetupData != NULL)
{
if ((!IsBadReadPtr(pNetworkSetupData, sizeof(NETWORKSETUPDATA))) &&
(pNetworkSetupData->dwMagic == NETWORK_SETUP_MAGIC))
HeapFree(GetProcessHeap(), 0, pNetworkSetupData);
SetWindowLongPtr(hwndDlg, GWL_USERDATA, (DWORD_PTR)NULL);
}
break; break;
case WM_NOTIFY: case WM_NOTIFY:
@ -207,9 +249,9 @@ DomainPageDlgProc(
case PSN_SETACTIVE: case PSN_SETACTIVE:
/* Enable the Back and Next buttons */ /* Enable the Back and Next buttons */
PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT); PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT);
if (SetupData->UnattendSetup) if (pSetupData->UnattendSetup)
{ {
SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, SetupData->uPostNetworkWizardPage); SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, pSetupData->uPostNetworkWizardPage);
return TRUE; return TRUE;
} }
break; break;
@ -238,7 +280,14 @@ DomainPageDlgProc(
break; break;
case PSN_WIZBACK: case PSN_WIZBACK:
SetupData->UnattendSetup = FALSE; pSetupData->UnattendSetup = FALSE;
/* If the Typical setup chosen, then skip back to the Settings Page */
if (pNetworkSetupData->bTypicalNetworkSetup == TRUE)
{
SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_NETWORKSETTINGSPAGE);
return TRUE;
}
break; break;
} }
break; break;
@ -258,6 +307,7 @@ NetSetupRequestWizardPages(
HPROPSHEETPAGE *pPages, HPROPSHEETPAGE *pPages,
PSETUPDATA pSetupData) PSETUPDATA pSetupData)
{ {
PNETWORKSETUPDATA pNetworkSetupData;
PROPSHEETPAGE psp = {0}; PROPSHEETPAGE psp = {0};
DWORD dwPageCount = 3; DWORD dwPageCount = 3;
INT nPage = 0; INT nPage = 0;
@ -276,10 +326,18 @@ NetSetupRequestWizardPages(
pSetupData->uFirstNetworkWizardPage = IDD_NETWORKSETTINGSPAGE; pSetupData->uFirstNetworkWizardPage = IDD_NETWORKSETTINGSPAGE;
pNetworkSetupData = (PNETWORKSETUPDATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(NETWORKSETUPDATA));
if (pNetworkSetupData == NULL)
return ERROR_OUTOFMEMORY;
pNetworkSetupData->dwMagic = NETWORK_SETUP_MAGIC;
pNetworkSetupData->pSetupData = pSetupData;
/* Create the Network Settings page */ /* Create the Network Settings page */
psp.dwSize = sizeof(PROPSHEETPAGE); psp.dwSize = sizeof(PROPSHEETPAGE);
psp.hInstance = netshell_hInstance; psp.hInstance = netshell_hInstance;
psp.lParam = (LPARAM)pSetupData; psp.lParam = (LPARAM)pNetworkSetupData;
psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE; psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_NETWORKSETTINGSTITLE); psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_NETWORKSETTINGSTITLE);
@ -292,7 +350,7 @@ NetSetupRequestWizardPages(
psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE; psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_NETWORKCOMPONENTTITLE); psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_NETWORKCOMPONENTTITLE);
psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_NETWORKCOMPONENTSUBTITLE); psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_NETWORKCOMPONENTSUBTITLE);
psp.pfnDlgProc = NetworkPageDlgProc; psp.pfnDlgProc = NetworkComponentPageDlgProc;
psp.pszTemplate = MAKEINTRESOURCE(IDD_NETWORKCOMPONENTPAGE); psp.pszTemplate = MAKEINTRESOURCE(IDD_NETWORKCOMPONENTPAGE);
pPages[nPage++] = CreatePropertySheetPage(&psp); pPages[nPage++] = CreatePropertySheetPage(&psp);
@ -300,7 +358,7 @@ NetSetupRequestWizardPages(
psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE; psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_NETWORKDOMAINTITLE); psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_NETWORKDOMAINTITLE);
psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_NETWORKDOMAINSUBTITLE); psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_NETWORKDOMAINSUBTITLE);
psp.pfnDlgProc = DomainPageDlgProc; psp.pfnDlgProc = NetworkDomainPageDlgProc;
psp.pszTemplate = MAKEINTRESOURCE(IDD_NETWORKDOMAINPAGE); psp.pszTemplate = MAKEINTRESOURCE(IDD_NETWORKDOMAINPAGE);
pPages[nPage++] = CreatePropertySheetPage(&psp); pPages[nPage++] = CreatePropertySheetPage(&psp);