// 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 // FULL_OBJECT ///////////////////////////////////////////////////////////////////////////// // CIISCertObj class ATL_NO_VTABLE CIISCertObj : public CComObjectRootEx, public CComCoClass, public IDispatchImpl { public: CIISCertObj(){} ~CIISCertObj(){} 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(put_InstanceName)(BSTR newVal); STDMETHOD(put_UserName)(BSTR newVal); STDMETHOD(put_UserPassword)(BSTR newVal); STDMETHOD(put_ServerName)(BSTR newVal); STDMETHOD(IsInstalled)(VARIANT_BOOL * retval); STDMETHOD(IsInstalledRemote)(VARIANT_BOOL * retval); STDMETHOD(IsExportable)(VARIANT_BOOL * retval); STDMETHOD(IsExportableRemote)(VARIANT_BOOL * retval); STDMETHOD(GetCertInfo)(VARIANT * pVtArray); STDMETHOD(GetCertInfoRemote)(VARIANT * pVtArray); STDMETHOD(Copy)(BOOL bAllowExport, BSTR DestinationServerName, BSTR DestinationServerInstance, VARIANT DestinationServerUserName OPTIONAL, VARIANT DestinationServerPassword OPTIONAL); STDMETHOD(CopyToCertStore)(BOOL bAllowExport, BSTR bstrDestinationServerName,VARIANT varDestinationServerUserName,VARIANT varDestinationServerPassword,VARIANT * pVtArray); STDMETHOD(Move)(BOOL bAllowExport,BSTR DestinationServerName, BSTR DestinationServerInstance, VARIANT DestinationServerUserName OPTIONAL, VARIANT DestinationServerPassword OPTIONAL); STDMETHOD(RemoveCert)(BOOL bPrivateKey); STDMETHOD(Import)(BSTR FileName, BSTR Password, BOOL bAllowExport); STDMETHOD(ImportToCertStore)(BSTR FileName, BSTR Password, BOOL bAllowExport, VARIANT* BinaryVariant); STDMETHOD(ImportFromBlob)(BSTR InstanceName, BSTR Password, BOOL bInstallToMetabase, BOOL bAllowExport, DWORD pcbSize, char * pBlobBinary); STDMETHOD(ImportFromBlobGetHash)(BSTR InstanceName, BSTR Password, BOOL bInstallToMetabase, BOOL bAllowExport, DWORD pcbSize, char * pBlobBinary, DWORD * pcbCertHashSize, char ** bCertHash); STDMETHOD(Export)(BSTR FileName, BSTR Password, BOOL bPrivateKey, BOOL bCertChain, BOOL bRemoveCert); STDMETHOD(ExportToBlob)(BSTR InstanceName, BSTR Password, BOOL bPrivateKey, BOOL bCertChain, DWORD * pcbSize, char ** pBlobBinary); private: CString m_ServerName; CString m_UserName; CString m_UserPassword; CString m_InstanceName; CComPtr m_pObj; IIISCertObj * GetObject(HRESULT * phr); IIISCertObj * GetObject(HRESULT * phr, CString csServerName,CString csUserName OPTIONAL,CString csUserPassword OPTIONAL); HRESULT CopyOrMove(BOOL bRemoveFromCertAfterCopy,BOOL bCopyCertDontInstallRetHash,BOOL bAllowExport,VARIANT * pVtArray,BSTR bstrDestinationServerName,BSTR bstrDestinationServerInstance,VARIANT varDestinationServerUserName, VARIANT varDestinationServerPassword); }; HRESULT RemoveCertProxy(IIISCertObj * pObj,BSTR InstanceName, BOOL bPrivateKey); HRESULT ImportFromBlobProxy(IIISCertObj * pObj,BSTR InstanceName,BSTR Password,BOOL bInstallToMetabase,BOOL bAllowExport,DWORD actual,BYTE *pData,DWORD *cbHashBufferSize,char **pbHashBuffer); HRESULT ExportToBlobProxy(IIISCertObj * pObj,BSTR InstanceName,BSTR Password,BOOL bPrivateKey,BOOL bCertChain,DWORD * pcbSize,char ** pBlobBinary); #ifdef FULL_OBJECT class ATL_NO_VTABLE CIISCertificate : public CComObjectRootEx, public CComCoClass, public IDispatchImpl { public: CIISCertificate() :m_bInitDone(FALSE),m_pEnroll(NULL) { } ~CIISCertificate() { if (m_pEnroll != NULL) { m_pEnroll->Release(); } } DECLARE_REGISTRY_RESOURCEID(IDR_IISCERTOBJ) DECLARE_NOT_AGGREGATABLE(CIISCertificate) DECLARE_PROTECT_FINAL_CONSTRUCT() // IIISCertificate public: 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)(BOOL newVal); STDMETHOD(put_KeySize)(int newVal); STDMETHOD(put_CertTemplate)(BSTR newVal); STDMETHOD(put_CertAuthority)(BSTR newVal); STDMETHOD(put_Country)(BSTR newVal); STDMETHOD(put_State)(BSTR newVal); STDMETHOD(put_Locality)(BSTR newVal); STDMETHOD(put_OrganizationUnit)(BSTR newVal); STDMETHOD(put_Organization)(BSTR newVal); STDMETHOD(put_FriendlyName)(BSTR newVal); STDMETHOD(put_CommonName)(BSTR newVal); STDMETHOD(put_Password)(BSTR newVal); STDMETHOD(put_InstanceName)(BSTR newVal); STDMETHOD(put_UserName)(BSTR newVal); STDMETHOD(put_UserPassword)(BSTR newVal); STDMETHOD(put_ServerName)(BSTR newVal); private: CComPtr m_pObj; CString m_InstanceName; CString m_ServerName; CString m_UserName; CString m_UserPassword; 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; IIISCertObj * GetObject(HRESULT * phr); IIISCertObj * GetObject(HRESULT * phr, CString csServerName,CString csUserName OPTIONAL,CString csUserPassword OPTIONAL); STDMETHOD(Init)(); STDMETHOD(CreateDNString)(CString& str); IEnroll * GetEnroll(); }; #endif // FULL_OBJECT #endif //__IISCERTOBJ_H_