////////////////////////////////////////////////////////////////////// // PolicyQM.h : Declaration of CQMPolicy class which implements // our WMI class Nsp_QMPolicySettings // Copyright (c)1997-2001 Microsoft Corporation // // Original Create Date: 3/8/2001 // Original Author: shawnwu ////////////////////////////////////////////////////////////////////// #pragma once #include "globals.h" #include "Policy.h" // // flags for quick mode policy's negotiation // enum EnumEncryption { RAS_L2TP_NO_ENCRYPTION, RAS_L2TP_OPTIONAL_ENCRYPTION, RAS_L2TP_REQUIRE_MAX_ENCRYPTION, RAS_L2TP_REQUIRE_ENCRYPTION, }; /* Class description Naming: CQMPolicy stands for Quick Mode Policy. Base class: CIPSecBase, because it is a class representing a WMI object - its WMI class name is Nsp_QMPolicySettings Purpose of class: (1) Nsp_QMPolicySettings is the WMI class for SPD's IPSEC_QM_POLICY. Design: (1) it implements IIPSecObjectImpl. Use: (1) You probably will never create an instance and use it directly. Everything should normall go through IIPSecObjectImpl for non-static functions. */ class ATL_NO_VTABLE CQMPolicy : public CIPSecPolicy { protected: CQMPolicy(){} virtual ~CQMPolicy(){} public: // // IIPSecObjectImpl methods: // STDMETHOD(QueryInstance) ( IN LPCWSTR pszQuery, IN IWbemContext * pCtx, IN IWbemObjectSink * pSink ); STDMETHOD(DeleteInstance) ( IN IWbemContext * pCtx, IN IWbemObjectSink * pSink ); STDMETHOD(PutInstance) ( IN IWbemClassObject * pInst, IN IWbemContext * pCtx, IN IWbemObjectSink * pSink ); STDMETHOD(GetInstance) ( IN IWbemContext * pCtx, IN IWbemObjectSink * pSink ); static HRESULT AddPolicy ( IN bool bPreExist, IN PIPSEC_QM_POLICY pQMPolicy ); static HRESULT DeletePolicy ( IN LPCWSTR pszPolicyName ); static HRESULT ExecMethod ( IN IWbemServices * pNamespace, IN LPCWSTR pszMethod, IN IWbemContext * pCtx, IN IWbemClassObject * pInParams, IN IWbemObjectSink * pSink ); static HRESULT DeleteDefaultPolicies(); static HRESULT DoReturn ( IN IWbemServices * pNamespace, IN LPCWSTR pszMethod, IN DWORD dwCount, IN LPCWSTR * pszValueNames, IN VARIANT * varValues, IN IWbemContext * pCtx, IN IWbemObjectSink * pSink ); private: static HRESULT CreateDefaultPolicy ( EnumEncryption eEncryption ); HRESULT CreateWbemObjFromQMPolicy ( IN PIPSEC_QM_POLICY pPolicy, OUT IWbemClassObject ** ppObj ); HRESULT GetQMPolicyFromWbemObj ( IN IWbemClassObject * pInst, OUT PIPSEC_QM_POLICY * ppPolicy, OUT bool * pbPreExist ); static LPCWSTR GetDefaultPolicyName ( EnumEncryption eEncryption ); }; // // The following functions are used to create default QM policies // DWORD BuildOffers( EnumEncryption eEncryption, IPSEC_QM_OFFER * pOffers, PDWORD pdwNumOffers, PDWORD pdwFlags ); DWORD BuildOptEncryption( IPSEC_QM_OFFER * pOffers, PDWORD pdwNumOffers ); DWORD BuildRequireEncryption( IPSEC_QM_OFFER * pOffers, PDWORD pdwNumOffers ); DWORD BuildNoEncryption( IPSEC_QM_OFFER * pOffers, PDWORD pdwNumOffers ); DWORD BuildStrongEncryption( IPSEC_QM_OFFER * pOffers, PDWORD pdwNumOffers ); void BuildOffer( IPSEC_QM_OFFER * pOffer, DWORD dwNumAlgos, DWORD dwFirstOperation, DWORD dwFirstAlgoIdentifier, DWORD dwFirstAlgoSecIdentifier, DWORD dwSecondOperation, DWORD dwSecondAlgoIdentifier, DWORD dwSecondAlgoSecIdentifier, DWORD dwKeyExpirationBytes, DWORD dwKeyExpirationTime ); VOID BuildQMPolicy( PIPSEC_QM_POLICY pQMPolicy, EnumEncryption eEncryption, PIPSEC_QM_OFFER pOffers, DWORD dwNumOffers, DWORD dwFlags );