Windows2003-3790/net/mmc/rtrfiltr/ipcfg.cpp
2020-09-30 16:53:55 +02:00

162 lines
3.8 KiB
C++

//============================================================================
// Copyright(c) 1996, Microsoft Corporation
//
// File: ipcfg.cpp
//
// History:
// 08/30/96 Ram Cherala Created
//
// Implementation of IP Packet Filters Configuration
//============================================================================
#include "stdafx.h"
#include "rtrfiltr.h"
#include "ipfltr.h"
#include "format.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//-----------------------------------------------------------------------------
// Function: IpFilterConfig
//
// Handles connecting to router, getting interface info, creating the IP filter
// configuration dialog and saving the Filters back to the registry.
// Uses CRouterInfo and other classes implemented in ..\common library.
//------------------------------------------------------------------------------
DWORD APIENTRY
IpFilterConfig(
IN CWnd* pParent,
IN LPCWSTR pwsMachineName,
IN LPCWSTR pwsInterfaceName,
IN DWORD dwFilterType // FILTER_INBOUND, FILTER_OUTBOUND
) {
DWORD dwErr;
HANDLE hMprConfig = NULL, hInterface = NULL, hIfTransport = NULL;
TCHAR* pszMachine;
SPIRouterInfo spRouterInfo;
SPIRtrMgrInterfaceInfo spRmIf;
SPIInfoBase spInfoBase;
HRESULT hr = hrOK;
//
// Convert the machine name from Unicode
//
if (!pwsMachineName) { pszMachine = NULL; }
else {
pszMachine = (TCHAR *) alloca((StrLenW(pwsMachineName)+3) * sizeof(TCHAR));
StrCpyTFromW(pszMachine, pwsMachineName);
}
// Connect to the server first
dwErr = ::MprConfigServerConnect((LPWSTR)pwsMachineName, &hMprConfig);
if (dwErr != NO_ERROR) { return dwErr; }
// create a CRouterInfo object
CreateRouterInfo(&spRouterInfo, NULL, pwsMachineName);
CWaitCursor wait;
// Now load the RouterInfo data from the registry
hr = spRouterInfo->Load((LPCTSTR)pszMachine, hMprConfig);
if (!FHrSucceeded(hr)) { return WIN32_FROM_HRESULT(hr); }
// Get the pointer to the CRmInterfaceInfo object for the specified
// protocol and interface
LookupRtrMgrInterface(spRouterInfo,
pwsInterfaceName,
PID_IP,
&spRmIf);
if (!spRmIf) { return ERROR_INVALID_DATA ;}
// Load the data for the specified interface
hr = spRmIf->Load(pszMachine, hMprConfig, NULL, NULL);
if (!FHrSucceeded(hr))
return WIN32_FROM_HRESULT(hr);
spRmIf->GetInfoBase(hMprConfig, NULL, NULL, &spInfoBase);
//
// Display the IP filter configuration dialog
//
if (IpFilterConfigInfoBase(pParent->GetSafeHwnd(),
spInfoBase,
spRmIf,
dwFilterType) == hrOK)
{
hr = spRmIf->Save(pszMachine,
hMprConfig,
NULL,
NULL,
spInfoBase,
0);
if (FHrSucceeded(hr))
dwErr = ERROR_SUCCESS;
else
dwErr = WIN32_FROM_HRESULT(hr);
}
//
//
//
// do clean up here and return
//
::MprConfigServerDisconnect( hMprConfig );
return dwErr;
}
HRESULT APIENTRY
IpFilterConfigInfoBase(
IN HWND hwndParent,
IN IInfoBase * pInfoBase,
IN IRtrMgrInterfaceInfo *pRmIf,
IN DWORD dwFilterType // FILTER_INBOUND, FILTER_OUTBOUND
) {
HRESULT hr = hrOK;
if (dwFilterType == FILTER_DEMAND_DIAL)
{
//
// Display the IP filter configuration dialog
//
CIpFltrDD dlg(CWnd::FromHandle(hwndParent), pInfoBase, dwFilterType );
if (dlg.DoModal() == IDOK)
hr = hrOK;
else
hr = hrFalse;
}
else
{
//
// Display the IP filter configuration dialog
//
CIpFltr dlg(CWnd::FromHandle(hwndParent), pInfoBase, dwFilterType );
if (dlg.DoModal() == IDOK)
hr = hrOK;
else
hr = hrFalse;
}
return hr;
}