// IISCertObj.h : Declaration of the CIISCertObj #ifndef __IISCERTOBJ_H_ #define __IISCERTOBJ_H_ #include "resource.h" // main symbols #ifdef FULL_OBJECT class CCryptBlob { public: CCryptBlob() { m_blob.cbData = 0; m_blob.pbData = NULL; } virtual ~CCryptBlob() { } DWORD GetSize() {return m_blob.cbData;} BYTE * GetData() {return m_blob.pbData;} void Set(DWORD cb, BYTE * pb) { Destroy(); m_blob.cbData = cb; m_blob.pbData = pb; } BOOL Resize(DWORD cb); operator CRYPT_DATA_BLOB *() { return &m_blob; } protected: void Destroy() { if (m_blob.pbData != NULL) Free(m_blob.pbData); } virtual BYTE * Realloc(BYTE * pb, DWORD cb) = 0; virtual void Free(BYTE * pb) = 0; CRYPT_DATA_BLOB m_blob; }; class CCryptBlobIMalloc : public CCryptBlob { public: virtual ~CCryptBlobIMalloc() { CCryptBlob::Destroy(); } protected: virtual BYTE * Realloc(BYTE * pb, DWORD cb) { return (BYTE *)CoTaskMemRealloc(pb, cb); } virtual void Free(BYTE * pb) { CoTaskMemFree(pb); } }; class CCryptBlobLocal : public CCryptBlob { public: virtual ~CCryptBlobLocal() { CCryptBlob::Destroy(); } protected: virtual BYTE * Realloc(BYTE * pb, DWORD cb) { return (BYTE *)realloc(pb, cb); } virtual void Free(BYTE * pb) { free(pb); } }; #endif ///////////////////////////////////////////////////////////////////////////// // CIISCertObj class ATL_NO_VTABLE CIISCertObj : public CComObjectRootEx, public CComCoClass, public IDispatchImpl { public: #ifdef FULL_OBJECT CIISCertObj() : m_bInitDone(FALSE), m_pEnroll(NULL) #else CIISCertObj() #endif { } ~CIISCertObj() { #ifdef FULL_OBJECT if (m_pEnroll != NULL) m_pEnroll->Release(); #endif } DECLARE_REGISTRY_RESOURCEID(IDR_IISCERTOBJ) DECLARE_NOT_AGGREGATABLE(CIISCertObj) DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP(CIISCertObj) COM_INTERFACE_ENTRY(IIISCertObj) COM_INTERFACE_ENTRY(IDispatch) END_COM_MAP() // IIISCertObj public: STDMETHOD(Import)(BSTR FileName, BSTR InstanceName, BSTR Password); STDMETHOD(ImportFromBlob)(BSTR InstanceName, BSTR Password, BOOL bBase64Encoded, DWORD pcbSize, char * pBlobBinary); STDMETHOD(RemoveCert)(BSTR InstanceName, BOOL bPrivateKey); STDMETHOD(Export)(BSTR FileName, BSTR InstanceName, BSTR Password, BOOL bPrivateKey, BOOL bCertChain, BOOL bRemoveCert); STDMETHOD(ExportToBlob)(BSTR InstanceName, BSTR Password, BOOL bPrivateKey, BOOL bCertChain, BOOL bBase64Encoded, DWORD * pcbSize, char * pBlobBinary); STDMETHOD(Copy)(BSTR DestinationServerName, BSTR DestinationServerInstance, BSTR CertificatePassword, VARIANT DestinationServerUserName OPTIONAL, VARIANT DestinationServerPassword OPTIONAL); STDMETHOD(Move)(BSTR DestinationServerName, BSTR DestinationServerInstance, BSTR CertificatePassword, VARIANT DestinationServerUserName OPTIONAL, VARIANT DestinationServerPassword OPTIONAL); STDMETHOD(IsInstalled)(BSTR InstanceName, VARIANT_BOOL * retval); STDMETHOD(IsInstalledRemote)(BSTR InstanceName, VARIANT_BOOL * retval); #ifdef FULL_OBJECT STDMETHOD(CreateRequest)(BSTR FileName); STDMETHOD(ProcessResponse)(BSTR FileName); STDMETHOD(RequestCert)(BSTR CertAuthority); STDMETHOD(LoadSettings)(BSTR ApplicationKey, BSTR SettingsKey); STDMETHOD(SaveSettings)(BSTR ApplicationKey, BSTR SettingsKey); STDMETHOD(put_SGC_Cert)(/*[in]*/ BOOL newVal); STDMETHOD(put_KeySize)(/*[in]*/ int newVal); STDMETHOD(put_CertTemplate)(/*[in]*/ BSTR newVal); STDMETHOD(put_CertAuthority)(/*[in]*/ BSTR newVal); STDMETHOD(put_Country)(/*[in]*/ BSTR newVal); STDMETHOD(put_State)(/*[in]*/ BSTR newVal); STDMETHOD(put_Locality)(/*[in]*/ BSTR newVal); STDMETHOD(put_OrganizationUnit)(/*[in]*/ BSTR newVal); STDMETHOD(put_Organization)(/*[in]*/ BSTR newVal); STDMETHOD(put_FriendlyName)(/*[in]*/ BSTR newVal); STDMETHOD(put_CommonName)(/*[in]*/ BSTR newVal); STDMETHOD(put_Password)(/*[in]*/ BSTR newVal); #endif STDMETHOD(put_InstanceName)(/*[in]*/ BSTR newVal); STDMETHOD(put_UserName)(/*[in]*/ BSTR newVal); STDMETHOD(put_UserPassword)(/*[in]*/ BSTR newVal); STDMETHOD(put_ServerName)(/*[in]*/ BSTR newVal); private: IIISCertObj * GetObject(HRESULT * phr); IIISCertObj * GetObject(HRESULT * phr, CString csServerName,CString csUserName OPTIONAL,CString csUserPassword OPTIONAL); #ifdef FULL_OBJECT STDMETHOD(Init)(); STDMETHOD(CreateDNString)(CString& str); IEnroll * GetEnroll(); #endif CERT_CONTEXT * GetInstalledCert(HRESULT * phResult); HRESULT UninstallCert(); HRESULT ExportToBlobProxy(IIISCertObj * pObj,BSTR InstanceName,BSTR Password,BOOL bPrivateKey,BOOL bCertChain,BOOL * bBase64Encoded,DWORD * pcbSize,char ** pBlobBinary); HRESULT ImportFromBlobProxy(IIISCertObj * pObj,BSTR InstanceName,BSTR Password,DWORD count,BYTE *pData); HRESULT CopyOrMove(BOOL bRemoveFromCertAfterCopy,BSTR bstrDestinationServerName,BSTR bstrDestinationServerInstance,BSTR bstrCertificatePassword,VARIANT varDestinationServerUserName, VARIANT varDestinationServerPassword); private: CComPtr m_pObj; CString m_InstanceName; CString m_ServerName; CString m_UserName; CString m_UserPassword; #ifdef FULL_OBJECT CString m_Password; CString m_CommonName; CString m_FriendlyName; CString m_Organization; CString m_OrganizationUnit; CString m_Locality; CString m_State; CString m_Country; CString m_CertAuthority; CString m_CertTemplate; int m_KeySize; BOOL m_SGC_Cert; BOOL m_bInitDone; IEnroll * m_pEnroll; #endif }; #endif //__IISCERTOBJ_H_