97 lines
3 KiB
C
97 lines
3 KiB
C
|
// define UNICODE for this module so linking works
|
|||
|
|
|||
|
#ifndef _POL2STORE_H_
|
|||
|
#define _POL2STORE_H_
|
|||
|
|
|||
|
const time_t P2STORE_DEFAULT_POLLINT = 60 * 180;
|
|||
|
const HRESULT P2STORE_MISSING_NAME = 0x00000013;
|
|||
|
|
|||
|
// these are the versions of storage that we want
|
|||
|
const DWORD P2S_MAJOR_VER = 0x00010000;
|
|||
|
const DWORD P2S_MINOR_VER = 0x00000000;
|
|||
|
|
|||
|
class IPSECPolicyToStorage
|
|||
|
{
|
|||
|
public:
|
|||
|
|
|||
|
// these just to initialization/deleting,
|
|||
|
// you must call Open to do anything useful
|
|||
|
IPSECPolicyToStorage();
|
|||
|
~IPSECPolicyToStorage();
|
|||
|
|
|||
|
// opens the location and establishes
|
|||
|
// an ipsec policy to work with
|
|||
|
HRESULT
|
|||
|
Open(IN DWORD location,
|
|||
|
IN LPTSTR name,
|
|||
|
IN LPTSTR szPolicyName,
|
|||
|
IN LPTSTR szDescription = NULL,
|
|||
|
IN time_t tPollingInterval = P2STORE_DEFAULT_POLLINT,
|
|||
|
IN bool bUseExisting = false);
|
|||
|
|
|||
|
// add rules to the policy
|
|||
|
HRESULT
|
|||
|
AddRule(IN IPSEC_IKE_POLICY ,
|
|||
|
IN PSTORAGE_INFO pStorageInfo = NULL);
|
|||
|
HRESULT
|
|||
|
AddDefaultResponseRule( );
|
|||
|
|
|||
|
// associates an ISAKMP policy
|
|||
|
HRESULT SetISAKMPPolicy(IPSEC_MM_POLICY);
|
|||
|
|
|||
|
HRESULT
|
|||
|
UpdateRule(
|
|||
|
IN PIPSEC_NFA_DATA pRule,
|
|||
|
IN IPSEC_IKE_POLICY IpsecIkePol,
|
|||
|
IN PSTORAGE_INFO pStorageInfo = NULL);
|
|||
|
|
|||
|
|
|||
|
bool IsOpen() { return mybIsOpen; }
|
|||
|
bool IsPolicyInStorage() { return mybPolicyExists; }
|
|||
|
|
|||
|
// will return a list of filters given a filter spec
|
|||
|
// WILL NOT COMMIT to the storage
|
|||
|
PIPSEC_FILTER_DATA IPSECPolicyToStorage::MakeFilters(
|
|||
|
T2P_FILTER *Filters,
|
|||
|
UINT NumFilters,
|
|||
|
LPWSTR);
|
|||
|
|
|||
|
PIPSEC_POLICY_DATA GetPolicy() { return myIPSECPolicy; }
|
|||
|
HANDLE GetStorageHandle() { return myPolicyStorage; }
|
|||
|
DWORD SetAssignedPolicy(PIPSEC_POLICY_DATA p)
|
|||
|
{
|
|||
|
PIPSEC_POLICY_DATA pActive = NULL;
|
|||
|
DWORD dwReturn = ERROR_SUCCESS;
|
|||
|
dwReturn = IsPolicyInStorage() ?
|
|||
|
(IPSecGetAssignedPolicyData(myPolicyStorage, &pActive),
|
|||
|
pActive ? IPSecUnassignPolicy(myPolicyStorage, pActive->PolicyIdentifier) : 0,
|
|||
|
IPSecAssignPolicy(myPolicyStorage, p->PolicyIdentifier)) :
|
|||
|
ERROR_ACCESS_DENIED;
|
|||
|
// if (pActive) IPSecFreePolicyData(pActive);
|
|||
|
// polstore AVs if something inside the policy is missing
|
|||
|
return dwReturn;
|
|||
|
}
|
|||
|
|
|||
|
// this is temp patch
|
|||
|
static LPVOID ReallocPolMem (LPVOID pOldMem, DWORD cbOld, DWORD cbNew);
|
|||
|
|
|||
|
private:
|
|||
|
void TryToCreatePolicy();
|
|||
|
PIPSEC_NEGPOL_DATA
|
|||
|
MakeNegotiationPolicy(IPSEC_QM_POLICY IpsPol,
|
|||
|
LPWSTR);
|
|||
|
PIPSEC_NEGPOL_DATA MakeDefaultResponseNegotiationPolicy ( );
|
|||
|
|
|||
|
PIPSEC_NFA_DATA
|
|||
|
MakeRule(IN IPSEC_IKE_POLICY IpsecIkePol, IN PSTORAGE_INFO pStorageInfo = NULL);
|
|||
|
|
|||
|
PIPSEC_NFA_DATA MakeDefaultResponseRule ( );
|
|||
|
|
|||
|
HANDLE myPolicyStorage;
|
|||
|
PIPSEC_POLICY_DATA myIPSECPolicy;
|
|||
|
bool mybIsOpen;
|
|||
|
bool mybPolicyExists;
|
|||
|
};
|
|||
|
|
|||
|
#endif
|
|||
|
|