windows-nt/Source/XPSP1/NT/net/mmc/mprsnap/addrpool.h
2020-09-26 16:20:57 +08:00

174 lines
5.1 KiB
C++

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corporation, 1997 - 1999 **/
/**********************************************************************/
/*
addrpool.h
FILE HISTORY:
*/
#if !defined _ADDRPOOL_H_
#define _ADDRPOOL_H_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include "listctrl.h"
#include "dialog.h"
#include "ipctrl.h"
/*---------------------------------------------------------------------------
Class: AddressPoolInfo
This class holds the information pertaining to the address pool.
Basically, it holds the start and end addresses (in NETWORK order).
---------------------------------------------------------------------------*/
class AddressPoolInfo
{
public:
AddressPoolInfo() :
m_netStart(0),
m_netEnd(0),
m_netAddress(0),
m_netMask(0),
m_dwKey(0) {};
DWORD m_netStart;
DWORD m_netEnd;
DWORD m_netAddress;
DWORD m_netMask;
DWORD m_dwKey;
DWORD GetNumberOfAddresses()
{ return ntohl(m_netEnd) - ntohl(m_netStart) + 1; }
// Calculate the address and the mask from the start/end address
BOOL Calc(DWORD *pdwAddress, DWORD *pdwMask);
DWORD GetNewKey();
// This is the back door provided for compatibility until the
// service is fixed. You can set the address and mask and
// add an entry (I will backfill the start/end address).
// dwAddress and dwMask are in NETWORK order.
void SetAddressAndMask(DWORD dwAddress, DWORD dwMask);
void SetStartAndEnd(DWORD dwStart, DWORD dwEnd);
};
typedef CList<AddressPoolInfo, AddressPoolInfo &> AddressPoolListBase;
class AddressPoolList : public AddressPoolListBase
{
public:
AddressPoolList()
: m_fMultipleAddressPools(FALSE)
{
}
// This function checks to see if there are any conflicts
// with any other address pools (we don't allow overlaps).
// Returns S_OK if it is ok.
// Else if is a success code, it is a string id of an error
// Else if is a failure code, it is an error code
HRESULT HrIsValidAddressPool(AddressPoolInfo *pInfo);
// This will return TRUE if address pools are supported.
// This will return FALSE if the old style, single address
// pools are used.
// This will not be set correctly until LoadFromReg() is called.
BOOL FUsesMultipleAddressPools();
// Load the information from the regsitry. If the StaticAddressPool
// key does not exist, read from the old address/mask keys.
HRESULT LoadFromReg(HKEY hkeyRasIP, DWORD dwBuildNo);
// Save the information to the registry. If the StaticAddressPool
// key does not exist, write out the first address in the address pool
// to the old address/mask keys.
HRESULT SaveToReg(HKEY hkeyRasIP, DWORD dwBuildNo);
protected:
BOOL m_fMultipleAddressPools;
};
// Displays the long version of the address pool control. This
// will show the start/stop/count/address/mask columns.
// The short version shows the start/stop/count columns. The short
// version is intended for the wizard pages.
#define ADDRPOOL_LONG 0x01
HRESULT InitializeAddressPoolListControl(CListCtrl *pListCtrl,
LPARAM flags,
AddressPoolList *pList);
void OnNewAddressPool(HWND hWnd,
CListCtrl *pList,
LPARAM flags,
AddressPoolList *pPoolList);
void OnEditAddressPool(HWND hWnd,
CListCtrl *pList,
LPARAM flags,
AddressPoolList *pPoolList);
void OnDeleteAddressPool(HWND hWnd,
CListCtrl *pList,
LPARAM flags,
AddressPoolList *pPoolList);
class CAddressPoolDialog : public CBaseDialog
{
public:
CAddressPoolDialog(AddressPoolInfo *pPool,
AddressPoolList *pPoolList,
BOOL fCreate);
protected:
virtual VOID DoDataExchange(CDataExchange *pDX);
virtual BOOL OnInitDialog();
virtual void OnOK();
afx_msg void OnChangeStartAddress();
afx_msg void OnChangeEndAddress();
afx_msg void OnChangeRange();
afx_msg void OnKillFocusStartAddress();
afx_msg void OnKillFocusEndAddress();
void GenerateRange();
BOOL m_fCreate;
BOOL m_fReady;
AddressPoolInfo * m_pPool;
AddressPoolList * m_pPoolList;
IPControl m_ipStartAddress;
IPControl m_ipEndAddress;
DECLARE_MESSAGE_MAP()
};
/*---------------------------------------------------------------------------
This enum defines the columns for Address pool controls.
---------------------------------------------------------------------------*/
enum
{
IPPOOLCOL_START = 0,
IPPOOLCOL_END,
IPPOOLCOL_RANGE,
IPPOOLCOL_IPADDRESS,
IPPOOLCOL_MASK,
IPPOOLCOL_COUNT,
};
#endif // !defined _ADDRPOOL_H_