920 lines
21 KiB
C
920 lines
21 KiB
C
/*
|
|
File nettab.c
|
|
|
|
Implementation of the ui behind the networking tab in the dialup server
|
|
ui.
|
|
|
|
Paul Mayfield 10/8/97.
|
|
*/
|
|
|
|
#include <rassrv.h>
|
|
|
|
// Help maps
|
|
static const DWORD phmNetTab[] =
|
|
{
|
|
CID_NetTab_LV_Components, IDH_NetTab_LV_Components,
|
|
CID_NetTab_PB_Add, IDH_NetTab_PB_Add,
|
|
CID_NetTab_PB_Remove, IDH_NetTab_PB_Remove,
|
|
CID_NetTab_PB_Properties, IDH_NetTab_PB_Properties,
|
|
0, 0
|
|
};
|
|
|
|
//
|
|
// Fills in the property sheet structure with the information
|
|
// required to display the networking tab.
|
|
//
|
|
DWORD
|
|
NetTabGetPropertyPage(
|
|
IN LPPROPSHEETPAGE ppage,
|
|
IN LPARAM lpUserData)
|
|
{
|
|
// Initialize
|
|
ZeroMemory(ppage, sizeof(PROPSHEETPAGE));
|
|
|
|
// Fill in the values
|
|
ppage->dwSize = sizeof(PROPSHEETPAGE);
|
|
ppage->hInstance = Globals.hInstDll;
|
|
ppage->pszTemplate = MAKEINTRESOURCE(PID_NetTab);
|
|
ppage->pfnDlgProc = NetTabDialogProc;
|
|
ppage->pfnCallback = RasSrvInitDestroyPropSheetCb;
|
|
ppage->dwFlags = PSP_USECALLBACK;
|
|
ppage->lParam = lpUserData;
|
|
|
|
return NO_ERROR;
|
|
}
|
|
|
|
// Error reporting
|
|
VOID
|
|
NetTabDisplayError(
|
|
IN HWND hwnd,
|
|
IN DWORD dwErr)
|
|
{
|
|
ErrDisplayError(
|
|
hwnd,
|
|
dwErr,
|
|
ERR_ADVANCEDTAB_CATAGORY,
|
|
0,
|
|
Globals.dwErrorData);
|
|
}
|
|
|
|
//
|
|
// Returns the index of an to display icon based on the
|
|
// type of incoming connection.
|
|
//
|
|
INT
|
|
NetTabGetIconIndex(
|
|
IN DWORD dwType)
|
|
{
|
|
switch (dwType)
|
|
{
|
|
case NETCFGDB_SERVICE:
|
|
return NI_Service;
|
|
|
|
case NETCFGDB_CLIENT:
|
|
return NI_Client;
|
|
|
|
case NETCFGDB_PROTOCOL:
|
|
return NI_Protocol;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//
|
|
// Sets up the UI so that the user is forced to complete the
|
|
// config they've started. Triggered when a non-reversable option
|
|
// is taken such as adding/removing a networking component.
|
|
//
|
|
DWORD
|
|
NetTabDisableRollback(
|
|
IN HWND hwndDlg)
|
|
{
|
|
DWORD dwErr, dwId = 0;
|
|
|
|
do
|
|
{
|
|
dwErr = RasSrvGetPageId (hwndDlg, &dwId);
|
|
if (dwErr != NO_ERROR)
|
|
{
|
|
break;
|
|
}
|
|
|
|
if (dwId == RASSRVUI_ADVANCED_TAB)
|
|
{
|
|
PropSheet_CancelToClose(GetParent(hwndDlg));
|
|
}
|
|
|
|
} while (FALSE);
|
|
|
|
// Cleanup
|
|
{
|
|
}
|
|
|
|
return dwErr;
|
|
}
|
|
|
|
//
|
|
// Fills in the given list view with the names of the components
|
|
// stored in the database provided.
|
|
//
|
|
DWORD
|
|
NetTabFillComponentList(
|
|
IN HWND hwndLV,
|
|
IN HANDLE hNetCompDatabase)
|
|
{
|
|
LV_ITEM lvi;
|
|
DWORD dwCount, i, dwErr, dwProtCount, dwType;
|
|
PWCHAR pszName;
|
|
BOOL bManip, bEnabled;
|
|
|
|
// Get the count of all the components
|
|
//
|
|
dwErr = netDbGetCompCount (hNetCompDatabase, &dwCount);
|
|
if (dwErr != NO_ERROR)
|
|
{
|
|
return dwErr;
|
|
}
|
|
|
|
// Initialize the list item
|
|
ZeroMemory(&lvi, sizeof(LV_ITEM));
|
|
lvi.mask = LVIF_TEXT | LVIF_IMAGE;
|
|
|
|
// Looop through all of the network components
|
|
// adding their names as we go
|
|
for (i = 0; i < dwCount; i++)
|
|
{
|
|
netDbGetType (hNetCompDatabase, i, &dwType);
|
|
netDbIsRasManipulatable (hNetCompDatabase, i, &bManip);
|
|
netDbGetEnable (hNetCompDatabase, i, &bEnabled);
|
|
|
|
// Fill in the data
|
|
//
|
|
netDbGetName (hNetCompDatabase, i, &pszName);
|
|
lvi.iImage = NetTabGetIconIndex(dwType);
|
|
lvi.iItem = i;
|
|
lvi.pszText = pszName;
|
|
lvi.cchTextMax = wcslen(pszName)+1;
|
|
ListView_InsertItem(hwndLV,&lvi);
|
|
ListView_SetCheck(hwndLV, i, bEnabled);
|
|
|
|
// If this is not a ras manipulateable component,
|
|
// disable the check since it can't be set anyway.
|
|
if (!bManip)
|
|
{
|
|
ListView_DisableCheck(hwndLV, i);
|
|
}
|
|
}
|
|
|
|
return NO_ERROR;
|
|
}
|
|
|
|
//
|
|
// Updates the description of the currently selected protocol
|
|
//
|
|
DWORD
|
|
NetTabUpdateDescription(
|
|
IN HWND hwndDlg,
|
|
IN DWORD i)
|
|
{
|
|
HANDLE hNetCompDatabase = NULL, hProt = NULL;
|
|
PWCHAR pszDesc;
|
|
DWORD dwErr = NO_ERROR;
|
|
|
|
// Get handles to the databases we're interested in
|
|
RasSrvGetDatabaseHandle(
|
|
hwndDlg,
|
|
ID_NETCOMP_DATABASE,
|
|
&hNetCompDatabase);
|
|
|
|
do
|
|
{
|
|
dwErr = netDbGetDesc(hNetCompDatabase, i, &pszDesc);
|
|
if (dwErr != NO_ERROR)
|
|
{
|
|
break;
|
|
}
|
|
|
|
// Set the description
|
|
SetDlgItemTextW(
|
|
hwndDlg,
|
|
CID_NetTab_ST_Description,
|
|
pszDesc);
|
|
|
|
} while (FALSE);
|
|
|
|
// Cleanup
|
|
{
|
|
if (dwErr != NO_ERROR)
|
|
{
|
|
SetDlgItemTextW(
|
|
hwndDlg,
|
|
CID_NetTab_ST_Description,
|
|
L"");
|
|
}
|
|
}
|
|
|
|
return dwErr;
|
|
}
|
|
|
|
|
|
//
|
|
//When an Item in the listview is selected, check if the user can Uninstall it
|
|
//for whistler bug 347355 gangz
|
|
//
|
|
DWORD
|
|
NetTabEnableDisableRemoveButton (
|
|
IN HWND hwndDlg,
|
|
IN DWORD iItem)
|
|
{
|
|
HANDLE hNetCompDatabase = NULL;
|
|
DWORD dwErr;
|
|
HWND hwndRemove = NULL;
|
|
BOOL bHasPermit = FALSE;
|
|
|
|
if ( !hwndDlg )
|
|
{
|
|
return ERROR_INVALID_PARAMETER;
|
|
}
|
|
|
|
hwndRemove = GetDlgItem(hwndDlg, CID_NetTab_PB_Remove);
|
|
|
|
dwErr = RasSrvGetDatabaseHandle(
|
|
hwndDlg,
|
|
ID_NETCOMP_DATABASE,
|
|
&hNetCompDatabase);
|
|
|
|
if ( NO_ERROR != dwErr ||
|
|
NULL == hwndRemove )
|
|
{
|
|
return ERROR_CAN_NOT_COMPLETE;
|
|
}
|
|
|
|
dwErr = netDbHasRemovePermission(
|
|
hNetCompDatabase,
|
|
iItem,
|
|
&bHasPermit);
|
|
|
|
if( NO_ERROR == dwErr )
|
|
{
|
|
EnableWindow( hwndRemove, bHasPermit);
|
|
}
|
|
|
|
return dwErr;
|
|
|
|
}
|
|
|
|
|
|
//
|
|
// Enables or disables the properties button based on whether
|
|
// the index of the given item in the list view can have properties
|
|
// invoked on it. Currently, only non-ras-manaipulatable protocols
|
|
// can not have their properties invoked.
|
|
//
|
|
DWORD
|
|
NetTabEnableDisablePropButton(
|
|
IN HWND hwndDlg,
|
|
IN INT iItem)
|
|
{
|
|
HANDLE hNetCompDatabase = NULL;
|
|
DWORD dwErr;
|
|
BOOL bHasUi;
|
|
|
|
// Get a reference to the network component database
|
|
//
|
|
RasSrvGetDatabaseHandle(
|
|
hwndDlg,
|
|
ID_NETCOMP_DATABASE,
|
|
&hNetCompDatabase);
|
|
|
|
// Get the type and whether it is manipulatable
|
|
//
|
|
dwErr = netDbHasPropertiesUI (hNetCompDatabase, iItem, &bHasUi);
|
|
if (dwErr != NO_ERROR)
|
|
{
|
|
return dwErr;
|
|
}
|
|
|
|
// Enable or disable properties
|
|
EnableWindow(
|
|
GetDlgItem(hwndDlg, CID_NetTab_PB_Properties),
|
|
bHasUi);
|
|
|
|
return NO_ERROR;
|
|
}
|
|
|
|
//
|
|
// Refreshes the list view
|
|
//
|
|
DWORD
|
|
NetTabRefreshListView(
|
|
IN HWND hwndLV,
|
|
IN HANDLE hNetCompDatabase)
|
|
{
|
|
DWORD dwCount, dwErr;
|
|
HWND hwndDlg = GetParent(hwndLV);
|
|
|
|
// Get rid of all of the old elements in the list view
|
|
//
|
|
ListView_DeleteAllItems(hwndLV);
|
|
|
|
// Re-stock the list views
|
|
//
|
|
dwErr = NetTabFillComponentList(hwndLV, hNetCompDatabase);
|
|
if (dwErr != NO_ERROR)
|
|
{
|
|
return dwErr;
|
|
}
|
|
|
|
// Select the first protocol in the list view if any items exist.
|
|
// Also in this case, make sure that "remove" is enabled/disabled
|
|
// according to the the first item in the list view
|
|
//
|
|
netDbGetCompCount(hNetCompDatabase, &dwCount);
|
|
if (dwCount)
|
|
{
|
|
ListView_SetItemState(
|
|
hwndLV,
|
|
0,
|
|
LVIS_SELECTED | LVIS_FOCUSED,
|
|
LVIS_SELECTED | LVIS_FOCUSED);
|
|
|
|
//for whistler bug 406698 gangz
|
|
//
|
|
NetTabEnableDisableRemoveButton (
|
|
hwndDlg,
|
|
0);
|
|
}
|
|
|
|
// If there are no components, disable the properties
|
|
// and remove buttons
|
|
else
|
|
{
|
|
EnableWindow(
|
|
GetDlgItem(hwndDlg, CID_NetTab_PB_Properties),
|
|
FALSE);
|
|
|
|
EnableWindow(
|
|
GetDlgItem(hwndDlg, CID_NetTab_PB_Remove),
|
|
FALSE);
|
|
}
|
|
|
|
return NO_ERROR;
|
|
}
|
|
|
|
//
|
|
// Initializes the networking tab. By now a handle to the advanced
|
|
// database has been placed in the user data of the dialog
|
|
//
|
|
DWORD
|
|
NetTabInitializeDialog(
|
|
HWND hwndDlg,
|
|
WPARAM wParam)
|
|
{
|
|
DWORD dwErr, dwCount, i;
|
|
BOOL bFlag;
|
|
HANDLE hNetCompDatabase = NULL, hMiscDatabase = NULL;
|
|
HWND hwndLV;
|
|
LV_COLUMN lvc;
|
|
BOOL bExpose = FALSE, bIsServer;
|
|
|
|
// Get handles to the databases we're interested in
|
|
//
|
|
RasSrvGetDatabaseHandle(
|
|
hwndDlg,
|
|
ID_MISC_DATABASE,
|
|
&hMiscDatabase);
|
|
|
|
RasSrvGetDatabaseHandle(
|
|
hwndDlg,
|
|
ID_NETCOMP_DATABASE,
|
|
&hNetCompDatabase);
|
|
|
|
// Fill in the list view will all available protocols followed
|
|
// by all of the installed network components.
|
|
//
|
|
hwndLV = GetDlgItem(hwndDlg, CID_NetTab_LV_Components);
|
|
ListView_InstallChecks(hwndLV, Globals.hInstDll);
|
|
ListView_SetNetworkComponentImageList(hwndLV, Globals.hInstDll);
|
|
|
|
// Fill the list view
|
|
NetTabRefreshListView(hwndLV, hNetCompDatabase);
|
|
|
|
//for whistler bug 347355 gangz
|
|
//
|
|
NetTabEnableDisablePropButton(
|
|
hwndDlg,
|
|
0);
|
|
|
|
NetTabEnableDisableRemoveButton (
|
|
hwndDlg,
|
|
0);
|
|
|
|
// Add a colum so that we'll display in report view
|
|
lvc.mask = LVCF_FMT;
|
|
lvc.fmt = LVCFMT_LEFT;
|
|
ListView_InsertColumn(hwndLV,0,&lvc);
|
|
ListView_SetColumnWidth(hwndLV, 0, LVSCW_AUTOSIZE_USEHEADER);
|
|
|
|
return NO_ERROR;
|
|
}
|
|
|
|
// Handles a check being made
|
|
DWORD
|
|
NetTabHandleProtCheck(
|
|
IN HWND hwndDlg,
|
|
IN DWORD dwIndex)
|
|
{
|
|
BOOL bEnable = FALSE, bEnabled = FALSE;
|
|
DWORD dwErr = NO_ERROR, dwId = 0;
|
|
HANDLE hNetCompDatabase = NULL;
|
|
HWND hwndLV =
|
|
GetDlgItem(hwndDlg, CID_NetTab_LV_Components);
|
|
MSGARGS MsgArgs;
|
|
INT iRet;
|
|
PWCHAR pszName = NULL;
|
|
|
|
// Initailize the message arguments
|
|
//
|
|
ZeroMemory(&MsgArgs, sizeof(MsgArgs));
|
|
|
|
// Find out whether the component is being enabled or
|
|
// disabled
|
|
bEnable = !!ListView_GetCheck(hwndLV, dwIndex);
|
|
|
|
// Get the handle for the Prot database
|
|
//
|
|
RasSrvGetDatabaseHandle(
|
|
hwndDlg,
|
|
ID_NETCOMP_DATABASE,
|
|
&hNetCompDatabase);
|
|
|
|
// Get component id
|
|
//
|
|
dwErr = netDbGetId(
|
|
hNetCompDatabase,
|
|
dwIndex,
|
|
&dwId);
|
|
if (dwErr != NO_ERROR)
|
|
{
|
|
return dwErr;
|
|
}
|
|
|
|
// Get component name
|
|
//
|
|
dwErr = netDbGetName(
|
|
hNetCompDatabase,
|
|
dwIndex,
|
|
&pszName);
|
|
if (dwErr != NO_ERROR)
|
|
{
|
|
return dwErr;
|
|
}
|
|
|
|
// Get component enabling
|
|
//
|
|
dwErr = netDbGetEnable(
|
|
hNetCompDatabase,
|
|
dwIndex,
|
|
&bEnabled);
|
|
if (dwErr != NO_ERROR)
|
|
{
|
|
return dwErr;
|
|
}
|
|
|
|
// If F&P is being unchecked, then popup the mmc warning
|
|
//
|
|
if ((dwId == NETCFGDB_ID_FILEPRINT) &&
|
|
(bEnable == FALSE) &&
|
|
(bEnabled == TRUE))
|
|
{
|
|
// Ask the user whether we should bring up the
|
|
// mmc console to allow him/her to stop FPS.
|
|
//
|
|
MsgArgs.apszArgs[0] = pszName;
|
|
MsgArgs.dwFlags = MB_YESNO;
|
|
|
|
iRet = MsgDlgUtil(
|
|
GetActiveWindow(),
|
|
SID_STOP_FP_SERVICE,
|
|
&MsgArgs,
|
|
Globals.hInstDll,
|
|
WRN_TITLE);
|
|
|
|
// If the user agrees, bring up the console
|
|
//
|
|
if (iRet == IDYES)
|
|
{
|
|
dwErr = RassrvLaunchMMC(RASSRVUI_SERVICESCONSOLE);
|
|
if (dwErr != NO_ERROR)
|
|
{
|
|
return dwErr;
|
|
}
|
|
}
|
|
}
|
|
|
|
// If F&P is not being unchecked, treat the component
|
|
// normally.
|
|
//
|
|
else
|
|
{
|
|
// Update the check
|
|
dwErr = netDbSetEnable(hNetCompDatabase, dwIndex, bEnable);
|
|
|
|
if (dwErr != NO_ERROR)
|
|
{
|
|
return dwErr;
|
|
}
|
|
}
|
|
|
|
return NO_ERROR;
|
|
}
|
|
|
|
//
|
|
// Adds networking components
|
|
//
|
|
DWORD
|
|
NetTabAddComponent(
|
|
IN HWND hwndDlg)
|
|
{
|
|
HANDLE hNetCompDatabase = NULL;
|
|
DWORD dwErr;
|
|
|
|
RasSrvGetDatabaseHandle(
|
|
hwndDlg,
|
|
ID_NETCOMP_DATABASE,
|
|
&hNetCompDatabase);
|
|
|
|
dwErr = netDbRaiseInstallDialog(hNetCompDatabase, hwndDlg);
|
|
if (dwErr == NO_ERROR || dwErr == NETCFG_S_REBOOT)
|
|
{
|
|
NetTabRefreshListView(
|
|
GetDlgItem(hwndDlg, CID_NetTab_LV_Components),
|
|
hNetCompDatabase);
|
|
|
|
NetTabDisableRollback(hwndDlg);
|
|
}
|
|
if (dwErr == NETCFG_S_REBOOT)
|
|
{
|
|
RasSrvReboot(hwndDlg);
|
|
}
|
|
|
|
return dwErr;
|
|
}
|
|
|
|
//
|
|
// Removes networking components
|
|
//
|
|
DWORD
|
|
NetTabRemoveComponent(
|
|
IN HWND hwndDlg,
|
|
IN DWORD dwIndex)
|
|
{
|
|
HANDLE hNetCompDatabase = NULL;
|
|
DWORD dwCount, dwErr;
|
|
|
|
RasSrvGetDatabaseHandle(
|
|
hwndDlg,
|
|
ID_NETCOMP_DATABASE,
|
|
&hNetCompDatabase);
|
|
|
|
// or else, remove the requested component
|
|
//
|
|
dwErr = netDbRaiseRemoveDialog(
|
|
hNetCompDatabase,
|
|
dwIndex,
|
|
hwndDlg);
|
|
|
|
if (dwErr == NO_ERROR || dwErr == NETCFG_S_REBOOT)
|
|
{
|
|
NetTabRefreshListView(
|
|
GetDlgItem(hwndDlg, CID_NetTab_LV_Components),
|
|
hNetCompDatabase);
|
|
|
|
NetTabDisableRollback(hwndDlg);
|
|
}
|
|
if (dwErr == NETCFG_S_REBOOT)
|
|
{
|
|
RasSrvReboot(hwndDlg);
|
|
}
|
|
|
|
return dwErr;
|
|
}
|
|
|
|
// Edits network component properties
|
|
//
|
|
DWORD
|
|
NetTabEditProperties(
|
|
IN HWND hwndDlg,
|
|
IN DWORD dwIndex)
|
|
{
|
|
HANDLE hNetCompDatabase = NULL;
|
|
DWORD dwCount, dwErr;
|
|
|
|
RasSrvGetDatabaseHandle(
|
|
hwndDlg,
|
|
ID_NETCOMP_DATABASE,
|
|
&hNetCompDatabase);
|
|
|
|
dwErr = netDbRaisePropertiesDialog (
|
|
hNetCompDatabase,
|
|
dwIndex,
|
|
hwndDlg);
|
|
|
|
if (dwErr == NETCFG_S_REBOOT)
|
|
{
|
|
RasSrvReboot(hwndDlg);
|
|
}
|
|
|
|
return dwErr;
|
|
}
|
|
|
|
//
|
|
// Switch to mmc
|
|
//
|
|
DWORD
|
|
NetTabSwitchToMMC(
|
|
IN HWND hwndDlg)
|
|
{
|
|
if (RassrvWarnMMCSwitch(hwndDlg))
|
|
{
|
|
// Commit the changes to this property sheet
|
|
// and close it
|
|
PropSheet_PressButton(GetParent(hwndDlg), PSBTN_OK);
|
|
|
|
return RassrvLaunchMMC(RASSRVUI_NETWORKCONSOLE);
|
|
}
|
|
|
|
return ERROR_CANCELLED;
|
|
}
|
|
|
|
//
|
|
// Handles the activation call
|
|
//
|
|
BOOL
|
|
NetTabSetActive(
|
|
IN HWND hwndDlg,
|
|
IN WPARAM wParam)
|
|
{
|
|
HANDLE hNetCompDatabase = NULL;
|
|
DWORD dwErr;
|
|
BOOL bRet = FALSE;
|
|
|
|
PropSheet_SetWizButtons(GetParent(hwndDlg), 0);
|
|
|
|
RasSrvGetDatabaseHandle(
|
|
hwndDlg,
|
|
ID_NETCOMP_DATABASE,
|
|
&hNetCompDatabase);
|
|
|
|
if (! netDbIsLoaded(hNetCompDatabase))
|
|
{
|
|
dwErr = netDbLoad(hNetCompDatabase);
|
|
if (dwErr == NO_ERROR)
|
|
{
|
|
NetTabInitializeDialog(
|
|
hwndDlg,
|
|
wParam);
|
|
}
|
|
else
|
|
{
|
|
NetTabDisplayError(
|
|
hwndDlg,
|
|
ERR_CANT_SHOW_NETTAB_INETCFG);
|
|
|
|
// reject activation
|
|
SetWindowLongPtr(
|
|
hwndDlg,
|
|
DWLP_MSGRESULT,
|
|
-1);
|
|
|
|
bRet = TRUE;
|
|
}
|
|
}
|
|
|
|
PropSheet_SetWizButtons(
|
|
GetParent(hwndDlg),
|
|
PSWIZB_NEXT | PSWIZB_BACK);
|
|
|
|
return bRet;
|
|
}
|
|
|
|
//
|
|
// When the net tab receives WM_ACTIVATE, it means that
|
|
// the user left the IC property sheet/wizard and is now coming back
|
|
// to it. Since this occurs when switching to MMC update the UI as
|
|
// here appropriate.
|
|
//
|
|
DWORD
|
|
NetTabActivate(
|
|
IN HWND hwndDlg,
|
|
IN WPARAM wParam)
|
|
{
|
|
HANDLE hNetCompDatabase = NULL;
|
|
DWORD dwErr = NO_ERROR;
|
|
|
|
if (LOWORD(wParam) == WA_INACTIVE)
|
|
{
|
|
return NO_ERROR;
|
|
}
|
|
|
|
DbgOutputTrace("NetTabActivate: updating components.");
|
|
|
|
// Get the database handle
|
|
//
|
|
dwErr = RasSrvGetDatabaseHandle(
|
|
hwndDlg,
|
|
ID_NETCOMP_DATABASE,
|
|
&hNetCompDatabase);
|
|
if (dwErr != NO_ERROR)
|
|
{
|
|
return dwErr;
|
|
}
|
|
|
|
// Update the appropriate components
|
|
//
|
|
dwErr = netDbReloadComponent(hNetCompDatabase, NETCFGDB_ID_FILEPRINT);
|
|
if (dwErr != NO_ERROR)
|
|
{
|
|
return dwErr;
|
|
}
|
|
|
|
// Refresh the net component list view
|
|
//
|
|
NetTabRefreshListView(
|
|
GetDlgItem(hwndDlg, CID_NetTab_LV_Components),
|
|
hNetCompDatabase);
|
|
|
|
return NO_ERROR;
|
|
}
|
|
|
|
//
|
|
// Handles commands
|
|
//
|
|
DWORD
|
|
NetTabCommand(
|
|
IN HWND hwndDlg,
|
|
IN WPARAM wParam)
|
|
{
|
|
switch (wParam)
|
|
{
|
|
case CID_NetTab_PB_Properties:
|
|
NetTabEditProperties(
|
|
hwndDlg,
|
|
ListView_GetSelectionMark(
|
|
GetDlgItem(hwndDlg, CID_NetTab_LV_Components)));
|
|
break;
|
|
|
|
case CID_NetTab_PB_Add:
|
|
NetTabAddComponent(hwndDlg);
|
|
break;
|
|
|
|
case CID_NetTab_PB_Remove:
|
|
NetTabRemoveComponent(
|
|
hwndDlg,
|
|
ListView_GetSelectionMark(
|
|
GetDlgItem(hwndDlg, CID_NetTab_LV_Components)));
|
|
break;
|
|
|
|
case CID_NetTab_PB_SwitchToMMC:
|
|
NetTabSwitchToMMC(hwndDlg);
|
|
break;
|
|
}
|
|
|
|
return NO_ERROR;
|
|
}
|
|
|
|
//
|
|
// This is the dialog procedure that responds to messages sent
|
|
// to the networking tab.
|
|
//
|
|
INT_PTR
|
|
CALLBACK
|
|
NetTabDialogProc(
|
|
HWND hwndDlg,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
// Filter the customized list view messages
|
|
if (ListView_OwnerHandler(
|
|
hwndDlg,
|
|
uMsg,
|
|
wParam,
|
|
lParam,
|
|
LvDrawInfoCallback )
|
|
)
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
// Filter the customized ras server ui page messages.
|
|
// By filtering messages through here, we are able to
|
|
// call RasSrvGetDatabaseHandle below
|
|
//
|
|
if (RasSrvMessageFilter(hwndDlg, uMsg, wParam, lParam))
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
return 0;
|
|
|
|
case WM_HELP:
|
|
case WM_CONTEXTMENU:
|
|
{
|
|
RasSrvHelp (hwndDlg, uMsg, wParam, lParam, phmNetTab);
|
|
break;
|
|
}
|
|
|
|
|
|
case WM_NOTIFY:
|
|
{
|
|
NMHDR* pNotifyData;
|
|
NM_LISTVIEW* pLvNotifyData;
|
|
|
|
pNotifyData = (NMHDR*)lParam;
|
|
switch (pNotifyData->code)
|
|
{
|
|
//
|
|
// Note: PSN_APPLY and PSN_CANCEL are handled
|
|
// by RasSrvMessageFilter
|
|
//
|
|
|
|
// The item focus is changing -- update the
|
|
// protocol description
|
|
case LVN_ITEMCHANGING:
|
|
pLvNotifyData = (NM_LISTVIEW*)lParam;
|
|
if (pLvNotifyData->uNewState & LVIS_SELECTED)
|
|
{
|
|
NetTabUpdateDescription(
|
|
hwndDlg,
|
|
pLvNotifyData->iItem);
|
|
|
|
NetTabEnableDisablePropButton(
|
|
hwndDlg,
|
|
pLvNotifyData->iItem);
|
|
|
|
//for whistler bug 347355 gangz
|
|
//
|
|
NetTabEnableDisableRemoveButton (
|
|
hwndDlg,
|
|
(DWORD)pLvNotifyData->iItem);
|
|
|
|
}
|
|
break;
|
|
|
|
// The check of an item is changing
|
|
case LVXN_SETCHECK:
|
|
pLvNotifyData = (NM_LISTVIEW*)lParam;
|
|
NetTabHandleProtCheck(
|
|
hwndDlg,
|
|
(DWORD)pLvNotifyData->iItem);
|
|
break;
|
|
|
|
case LVXN_DBLCLK:
|
|
pLvNotifyData = (NM_LISTVIEW*)lParam;
|
|
NetTabEditProperties(
|
|
hwndDlg,
|
|
pLvNotifyData->iItem);
|
|
break;
|
|
|
|
// The networking tab is becoming active.
|
|
// Attempt to load the netcfg database at
|
|
// this time. If unsuccessful, pop up a
|
|
// message and don't allow the activation.
|
|
case PSN_SETACTIVE:
|
|
return NetTabSetActive(hwndDlg, wParam);
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_ACTIVATE:
|
|
NetTabActivate(hwndDlg, wParam);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
NetTabCommand(hwndDlg, wParam);
|
|
break;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|