504 lines
13 KiB
C
504 lines
13 KiB
C
//----------------------------------------------------------------------------
|
|
//
|
|
// Copyright (c) 1997-1999 Microsoft Corporation
|
|
// All rights reserved.
|
|
//
|
|
// File Name: tcpipopt.c
|
|
//
|
|
// Description:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "pch.h"
|
|
#include "resource.h"
|
|
#include "tcpip.h"
|
|
|
|
typedef struct {
|
|
TCHAR *szName;
|
|
TCHAR *szDescription;
|
|
BOOL bInstalled;
|
|
} TCPIP_Options_Entry_Struct;
|
|
|
|
#define NUMBER_OF_TCPIP_OPTIONS 2
|
|
|
|
// ISSUE-2002/02/28-stelo- make these an enum
|
|
#define IP_SECURITY 0
|
|
#define TCPIP_FILTERING 1
|
|
|
|
static TCPIP_Options_Entry_Struct TCPIP_Options_Entries[NUMBER_OF_TCPIP_OPTIONS];
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: EnableIpSecurityControls
|
|
//
|
|
// Purpose:
|
|
//
|
|
// Arguments:
|
|
//
|
|
// Returns:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
VOID
|
|
EnableIpSecurityControls( IN HWND hwnd, IN BOOL bState ) {
|
|
|
|
//
|
|
// Grab handles to each of the controls
|
|
//
|
|
HWND hPolicyComboBox = GetDlgItem( hwnd, IDC_CMB_IPSEC_POLICY_LIST );
|
|
HWND hPolicyDescBox = GetDlgItem( hwnd, IDC_EDT_POLICY_DESC );
|
|
|
|
//
|
|
// Grey or ungrey them appropriately
|
|
//
|
|
EnableWindow( hPolicyComboBox, bState );
|
|
EnableWindow( hPolicyDescBox, bState );
|
|
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: IpSecurityDlgProc
|
|
//
|
|
// Purpose:
|
|
//
|
|
// Arguments:
|
|
//
|
|
// Returns:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
INT_PTR CALLBACK
|
|
IpSecurityDlgProc( IN HWND hwnd,
|
|
IN UINT uMsg,
|
|
IN WPARAM wParam,
|
|
IN LPARAM lParam) {
|
|
|
|
BOOL bStatus = TRUE;
|
|
|
|
switch( uMsg ) {
|
|
|
|
case WM_INITDIALOG: {
|
|
|
|
HWND hDescriptionBox = GetDlgItem( hwnd, IDC_EDT_POLICY_DESC );
|
|
|
|
//
|
|
// Load strings from resources
|
|
//
|
|
StrSecureInitiator = MyLoadString( IDS_SECURE_INITIATOR );
|
|
StrSecureInitiatorDesc = MyLoadString( IDS_SECURE_INITIATOR_DESC );
|
|
|
|
StrSecureResponder = MyLoadString( IDS_SECURE_RESPONDER );
|
|
StrSecureResponderDesc = MyLoadString( IDS_SECURE_RESPONDER_DESC );
|
|
|
|
StrLockdown = MyLoadString( IDS_LOCKDOWN );
|
|
StrLockdownDesc = MyLoadString( IDS_LOCKDOWN_DESC );
|
|
|
|
CheckRadioButton( hwnd,
|
|
IDC_RAD_IPSEC_NOIPSEC,
|
|
IDC_RAD_IPSEC_CUSTOM,
|
|
IDC_RAD_IPSEC_NOIPSEC );
|
|
|
|
EnableIpSecurityControls( hwnd, FALSE );
|
|
|
|
SendDlgItemMessage( hwnd,
|
|
IDC_CMB_IPSEC_POLICY_LIST,
|
|
CB_ADDSTRING,
|
|
(WPARAM) 0,
|
|
(LPARAM) StrSecureInitiator );
|
|
|
|
SendDlgItemMessage( hwnd,
|
|
IDC_CMB_IPSEC_POLICY_LIST,
|
|
CB_ADDSTRING,
|
|
(WPARAM) 0,
|
|
(LPARAM) StrSecureResponder );
|
|
|
|
SendDlgItemMessage( hwnd,
|
|
IDC_CMB_IPSEC_POLICY_LIST,
|
|
CB_ADDSTRING,
|
|
(WPARAM) 0,
|
|
(LPARAM) StrLockdown );
|
|
|
|
//
|
|
// Set the combo box selection and description
|
|
//
|
|
|
|
// ISSUE-2002/02/28-stelo- this eventually needs to be fixed once I know
|
|
// what the security answerfile settings will be
|
|
|
|
SendDlgItemMessage( hwnd,
|
|
IDC_CMB_IPSEC_POLICY_LIST,
|
|
CB_SETCURSEL,
|
|
(WPARAM) 0,
|
|
(LPARAM) 0 );
|
|
|
|
SetWindowText( hDescriptionBox, StrSecureInitiatorDesc );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case WM_COMMAND: {
|
|
|
|
int nButtonId = LOWORD( wParam );
|
|
|
|
switch ( nButtonId ) {
|
|
|
|
case IDC_CMB_IPSEC_POLICY_LIST: {
|
|
|
|
if( HIWORD( wParam ) == CBN_SELCHANGE ) {
|
|
|
|
INT_PTR iIndex;
|
|
HWND hDescriptionBox = GetDlgItem( hwnd,
|
|
IDC_EDT_POLICY_DESC );
|
|
|
|
// get the current selection from the combo box
|
|
iIndex = SendDlgItemMessage( hwnd,
|
|
IDC_CMB_IPSEC_POLICY_LIST,
|
|
CB_GETCURSEL,
|
|
(WPARAM) 0,
|
|
(LPARAM) 0 );
|
|
|
|
switch( iIndex ) {
|
|
|
|
case 0: SetWindowText( hDescriptionBox,
|
|
StrSecureInitiatorDesc );
|
|
break;
|
|
case 1: SetWindowText( hDescriptionBox,
|
|
StrSecureResponderDesc );
|
|
break;
|
|
case 2: SetWindowText( hDescriptionBox,
|
|
StrLockdownDesc );
|
|
break;
|
|
|
|
default:
|
|
AssertMsg(FALSE,
|
|
"Bad case in TCPIP switch statement.");
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case IDC_RAD_IPSEC_NOIPSEC:
|
|
|
|
if ( HIWORD(wParam) == BN_CLICKED ) {
|
|
|
|
EnableIpSecurityControls( hwnd, FALSE );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case IDC_RAD_IPSEC_CUSTOM:
|
|
|
|
if ( HIWORD(wParam) == BN_CLICKED ) {
|
|
|
|
EnableIpSecurityControls( hwnd, TRUE );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case IDOK: {
|
|
|
|
|
|
|
|
EndDialog( hwnd, 1 );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case IDCANCEL: {
|
|
|
|
EndDialog( hwnd, 0 );
|
|
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
default:
|
|
bStatus = FALSE;
|
|
break;
|
|
|
|
}
|
|
|
|
return bStatus;
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: TcpipFilteringDlgProc
|
|
//
|
|
// Purpose:
|
|
//
|
|
// Arguments:
|
|
//
|
|
// Returns:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
INT_PTR CALLBACK
|
|
TcpipFilteringDlgProc( IN HWND hwnd,
|
|
IN UINT uMsg,
|
|
IN WPARAM wParam,
|
|
IN LPARAM lParam) {
|
|
|
|
BOOL bStatus = TRUE;
|
|
|
|
switch( uMsg ) {
|
|
|
|
case WM_INITDIALOG: {
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case WM_COMMAND: {
|
|
|
|
int nButtonId = LOWORD( wParam );
|
|
|
|
switch ( nButtonId ) {
|
|
|
|
case IDOK: {
|
|
|
|
|
|
|
|
EndDialog( hwnd, 1 );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case IDCANCEL: {
|
|
|
|
EndDialog( hwnd, 0 );
|
|
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
default:
|
|
bStatus = FALSE;
|
|
break;
|
|
|
|
}
|
|
|
|
return bStatus;
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: TCPIP_OptionsPageProc
|
|
//
|
|
// Purpose: Required function for the property sheet page to function properly.
|
|
// The important thing is to give the return value of 1 to the message PSPCB_CREATE and
|
|
// 0 for PSPCB_RELEASE
|
|
//
|
|
// Arguments:
|
|
//
|
|
// Returns:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
UINT CALLBACK
|
|
TCPIP_OptionsPageProc( HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp ) {
|
|
|
|
switch( uMsg ) {
|
|
|
|
case PSPCB_CREATE :
|
|
return 1 ; // needed for property sheet page to initialize correctly
|
|
|
|
case PSPCB_RELEASE :
|
|
return 0;
|
|
|
|
default:
|
|
return -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Function: TCPIP_OptionsDlgProc
|
|
//
|
|
// Purpose: Dialog procedure for the Options page of the property sheet
|
|
// handles all the messages sent to this window
|
|
//
|
|
// Arguments:
|
|
//
|
|
// Returns:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
INT_PTR CALLBACK
|
|
TCPIP_OptionsDlgProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) {
|
|
|
|
switch( uMsg ) {
|
|
|
|
case WM_INITDIALOG: {
|
|
|
|
int i;
|
|
|
|
HWND hOptionsListView = GetDlgItem( hwndDlg,
|
|
IDC_LVW_OPTIONS );
|
|
|
|
TCPIP_Options_Entries[IP_SECURITY].szName = MyLoadString( IDS_IP_SEC );
|
|
TCPIP_Options_Entries[IP_SECURITY].szDescription = MyLoadString( IDS_IP_SEC_DESC );
|
|
TCPIP_Options_Entries[IP_SECURITY].bInstalled = TRUE;
|
|
|
|
TCPIP_Options_Entries[TCPIP_FILTERING].szName = MyLoadString( IDS_TCPIP_FILTERING );
|
|
TCPIP_Options_Entries[TCPIP_FILTERING].szDescription = MyLoadString( IDS_TCPIP_FILTERING_DESC );
|
|
TCPIP_Options_Entries[TCPIP_FILTERING].bInstalled = TRUE;
|
|
|
|
|
|
|
|
// ISSUE-2002/02/28-stelo- Are there anymore settings that can be added to
|
|
// this list view
|
|
// Under what conditions are these visible? Only
|
|
// when DHCP is enabled?
|
|
|
|
//
|
|
// Insert DHCP class ID and IP Security into the list view
|
|
//
|
|
for( i = 0; i < 2; i++ ) {
|
|
|
|
InsertItemIntoTcpipListView( hOptionsListView,
|
|
(LPARAM) &TCPIP_Options_Entries[i],
|
|
1 );
|
|
|
|
}
|
|
|
|
SetListViewSelection( hwndDlg, IDC_LVW_OPTIONS, 1 );
|
|
|
|
//
|
|
// Set the description
|
|
//
|
|
SetWindowText( GetDlgItem( hwndDlg, IDC_OPT_DESC ),
|
|
TCPIP_Options_Entries[0].szDescription );
|
|
|
|
return TRUE ;
|
|
|
|
}
|
|
|
|
case WM_COMMAND: {
|
|
|
|
WORD wNotifyCode = HIWORD( wParam );
|
|
WORD wButtonId = LOWORD( wParam );
|
|
|
|
switch( wButtonId ) {
|
|
|
|
case IDC_OPT_PROPERTIES: {
|
|
|
|
INT iItemSelected;
|
|
HWND hOptionsListView = GetDlgItem( hwndDlg, IDC_LVW_OPTIONS );
|
|
|
|
iItemSelected = ListView_GetSelectionMark( hOptionsListView );
|
|
|
|
if( iItemSelected == TCPIP_FILTERING ) {
|
|
|
|
if( DialogBox( FixedGlobals.hInstance,
|
|
(LPCTSTR) IDD_TCPIP_FILTER,
|
|
hwndDlg,
|
|
TcpipFilteringDlgProc ) ) {
|
|
}
|
|
|
|
}
|
|
else if( iItemSelected == IP_SECURITY ) {
|
|
|
|
if( DialogBox( FixedGlobals.hInstance,
|
|
(LPCTSTR) IDD_IPSEC,
|
|
hwndDlg,
|
|
IpSecurityDlgProc ) ) {
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
} // end switch
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case WM_NOTIFY: {
|
|
|
|
LV_DISPINFO *pLvdi = (LV_DISPINFO *) lParam;
|
|
NM_LISTVIEW *pNm = (NM_LISTVIEW *)lParam;
|
|
TCPIP_Options_Entry_Struct *pListViewEntry = (TCPIP_Options_Entry_Struct *) (pLvdi->item.lParam);
|
|
|
|
if( wParam == IDC_LVW_OPTIONS ) {
|
|
|
|
switch( pLvdi->hdr.code ) {
|
|
|
|
case LVN_GETDISPINFO:
|
|
|
|
pLvdi->item.pszText = pListViewEntry->szName;
|
|
|
|
break;
|
|
}
|
|
|
|
switch( pNm->hdr.code ) {
|
|
|
|
case LVN_ITEMCHANGED:
|
|
|
|
// test to see if a new item in the list has been selected
|
|
if( pNm->uNewState == SELECTED ) {
|
|
|
|
LV_ITEM lvI;
|
|
TCPIP_Options_Entry_Struct *currentEntry;
|
|
|
|
if( !GetSelectedItemFromListView( hwndDlg,
|
|
IDC_LVW_OPTIONS,
|
|
&lvI ) ) {
|
|
return TRUE ;
|
|
|
|
}
|
|
|
|
currentEntry = (TCPIP_Options_Entry_Struct *) lvI.lParam;
|
|
|
|
//
|
|
// Set the description
|
|
//
|
|
SetWindowText( GetDlgItem( hwndDlg, IDC_OPT_DESC ),
|
|
currentEntry->szDescription );
|
|
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
return FALSE ;
|
|
|
|
}
|
|
|
|
//
|
|
// Message was handled so return TRUE
|
|
//
|
|
return TRUE ;
|
|
|
|
}
|