229 lines
6 KiB
C++
229 lines
6 KiB
C++
//+--------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1996 - 1999
|
|
//
|
|
// File: request.h
|
|
//
|
|
// Contents: Declaration of CCertRequest
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
#include "xelib.h"
|
|
#include "cscomres.h" // main symbols
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// certcli
|
|
|
|
|
|
class ATL_NO_VTABLE CCertRequest:
|
|
public IDispatchImpl<ICertRequest2, &IID_ICertRequest2, &LIBID_CERTCLIENTLib>,
|
|
public ISupportErrorInfoImpl<&IID_ICertRequest2>,
|
|
public CComObjectRoot,
|
|
public CComCoClass<CCertRequest, &CLSID_CCertRequest>
|
|
{
|
|
public:
|
|
CCertRequest()
|
|
{
|
|
m_dwServerVersion = 0;
|
|
m_pICertRequestD = NULL;
|
|
m_hRPCCertServer = NULL;
|
|
m_pwszDispositionMessage = NULL;
|
|
m_pbRequest = NULL;
|
|
m_pbCert = NULL;
|
|
m_pbCertificateChain = NULL;
|
|
m_pbFullResponse = NULL;
|
|
m_pwszServerName = NULL;
|
|
m_rpcAuthProtocol = 0;
|
|
m_rgResponse = NULL;
|
|
m_hStoreResponse = NULL;
|
|
_InitCAPropInfo();
|
|
_Cleanup();
|
|
}
|
|
~CCertRequest();
|
|
|
|
BEGIN_COM_MAP(CCertRequest)
|
|
COM_INTERFACE_ENTRY(IDispatch)
|
|
COM_INTERFACE_ENTRY(ISupportErrorInfo)
|
|
COM_INTERFACE_ENTRY(ICertRequest)
|
|
COM_INTERFACE_ENTRY(ICertRequest2)
|
|
END_COM_MAP()
|
|
|
|
DECLARE_NOT_AGGREGATABLE(CCertRequest)
|
|
// Remove the comment from the line above if you don't want your object to
|
|
// support aggregation. The default is to support it
|
|
|
|
DECLARE_REGISTRY(
|
|
CCertRequest,
|
|
wszCLASS_CERTREQUEST TEXT(".1"),
|
|
wszCLASS_CERTREQUEST,
|
|
IDS_CERTREQUEST_DESC,
|
|
THREADFLAGS_BOTH)
|
|
|
|
// ICertRequest
|
|
public:
|
|
STDMETHOD(Submit)(
|
|
/* [in] */ LONG Flags,
|
|
/* [in] */ BSTR const strRequest,
|
|
/* [in] */ BSTR const strAttributes,
|
|
/* [in] */ BSTR const strConfig,
|
|
/* [out, retval] */ LONG __RPC_FAR *pDisposition);
|
|
|
|
STDMETHOD(RetrievePending)(
|
|
/* [in] */ LONG RequestId,
|
|
/* [in] */ BSTR const strConfig,
|
|
/* [out, retval] */ LONG __RPC_FAR *pDisposition);
|
|
|
|
STDMETHOD(GetLastStatus)(
|
|
/* [out, retval] */ LONG __RPC_FAR *pLastStatus);
|
|
|
|
STDMETHOD(GetRequestId)(
|
|
/* [out, retval] */ LONG __RPC_FAR *pRequestId);
|
|
|
|
STDMETHOD(GetDispositionMessage)(
|
|
/* [out, retval] */ BSTR __RPC_FAR *pstrDispositionMessage);
|
|
|
|
STDMETHOD(GetCACertificate)(
|
|
/* [in] */ LONG fExchangeCertificate,
|
|
/* [in] */ BSTR const strConfig,
|
|
/* [in] */ LONG Flags,
|
|
/* [out, retval] */ BSTR __RPC_FAR *pstrCACertificate);
|
|
|
|
STDMETHOD(GetCertificate)(
|
|
/* [in] */ LONG Flags,
|
|
/* [out, retval] */ BSTR __RPC_FAR *pstrCertificate);
|
|
|
|
// ICertRequest2
|
|
public:
|
|
STDMETHOD(GetIssuedCertificate)(
|
|
/* [in] */ const BSTR strConfig,
|
|
/* [in] */ LONG RequestId,
|
|
/* [in] */ const BSTR strSerialNumber,
|
|
/* [out, retval] */ LONG __RPC_FAR *pDisposition);
|
|
|
|
STDMETHOD(GetErrorMessageText)(
|
|
/* [in] */ LONG hrMessage,
|
|
/* [in] */ LONG Flags,
|
|
/* [out, retval] */ BSTR __RPC_FAR *pstrErrorMessageText);
|
|
|
|
STDMETHOD(GetCAProperty)(
|
|
/* [in] */ BSTR const strConfig,
|
|
/* [in] */ LONG PropId, // CR_PROP_*
|
|
/* [in] */ LONG PropIndex,
|
|
/* [in] */ LONG PropType, // PROPTYPE_*
|
|
/* [in] */ LONG Flags, // CR_OUT_*
|
|
/* [out, retval] */ VARIANT *pvarPropertyValue);
|
|
|
|
STDMETHOD(GetCAPropertyFlags)(
|
|
/* [in] */ BSTR const strConfig,
|
|
/* [in] */ LONG PropId, // CR_PROP_*
|
|
/* [out, retval] */ LONG *pPropFlags);
|
|
|
|
STDMETHOD(GetCAPropertyDisplayName)(
|
|
/* [in] */ BSTR const strConfig,
|
|
/* [in] */ LONG PropId, // CR_PROP_*
|
|
/* [out, retval] */ BSTR *pstrDisplayName);
|
|
|
|
STDMETHOD(GetFullResponseProperty)(
|
|
/* [in] */ LONG PropId, // FR_PROP_*
|
|
/* [in] */ LONG PropIndex,
|
|
/* [in] */ LONG PropType, // PROPTYPE_*
|
|
/* [in] */ LONG Flags, // CR_OUT_*
|
|
/* [out, retval] */ VARIANT *pvarPropertyValue);
|
|
|
|
private:
|
|
HRESULT _OpenRPCConnection(
|
|
IN WCHAR const *pwszConfig,
|
|
OUT BOOL *pfNewConnection,
|
|
OUT WCHAR const **ppwszAuthority);
|
|
|
|
HRESULT _OpenConnection(
|
|
IN BOOL fRPC,
|
|
IN WCHAR const *pwszConfig,
|
|
IN DWORD RequiredVersion,
|
|
OUT WCHAR const **ppwszAuthority);
|
|
|
|
VOID _CloseConnection();
|
|
|
|
VOID _InitCAPropInfo();
|
|
VOID _CleanupCAPropInfo();
|
|
|
|
VOID _Cleanup();
|
|
VOID _CleanupOldConnection();
|
|
|
|
HRESULT _FindCAPropInfo(
|
|
IN BSTR const strConfig,
|
|
IN LONG PropId,
|
|
OUT CAPROP const **ppcap);
|
|
|
|
HRESULT _RequestCertificate(
|
|
IN LONG Flags,
|
|
IN LONG RequestId,
|
|
OPTIONAL IN BSTR const strRequest,
|
|
OPTIONAL IN BSTR const strAttributes,
|
|
OPTIONAL IN WCHAR const *pwszSerialNumber,
|
|
IN BSTR const strConfig,
|
|
IN DWORD RequiredVersion,
|
|
OUT LONG *pDisposition);
|
|
|
|
HRESULT _FindIssuedCertificate(
|
|
OPTIONAL IN BYTE const *pbCertHash,
|
|
IN DWORD cbCertHash,
|
|
OUT CERT_CONTEXT const **ppccIssued);
|
|
|
|
HRESULT _BuildIssuedCertificateChain(
|
|
OPTIONAL IN BYTE const *pbCertHash,
|
|
IN DWORD cbCertHash,
|
|
IN BOOL fIncludeCRLs,
|
|
OUT BYTE **ppbCertChain,
|
|
OUT DWORD *pcbCertChain);
|
|
|
|
HRESULT _SetErrorInfo(
|
|
IN HRESULT hrError,
|
|
IN WCHAR const *pwszDescription);
|
|
|
|
DWORD m_dwServerVersion;
|
|
ICertRequestD2 *m_pICertRequestD;
|
|
handle_t m_hRPCCertServer;
|
|
|
|
LONG m_LastStatus;
|
|
LONG m_RequestId;
|
|
LONG m_Disposition;
|
|
WCHAR *m_pwszDispositionMessage;
|
|
|
|
BYTE *m_pbRequest;
|
|
LONG m_cbRequest;
|
|
|
|
BYTE *m_pbCert;
|
|
LONG m_cbCert;
|
|
|
|
BYTE *m_pbCertificateChain;
|
|
LONG m_cbCertificateChain;
|
|
|
|
BYTE *m_pbFullResponse;
|
|
LONG m_cbFullResponse;
|
|
|
|
HCERTSTORE m_hStoreResponse;
|
|
XCMCRESPONSE *m_rgResponse;
|
|
DWORD m_cResponse;
|
|
|
|
BYTE *m_pbCACertState;
|
|
DWORD m_cbCACertState;
|
|
|
|
BYTE *m_pbCRLState;
|
|
DWORD m_cbCRLState;
|
|
|
|
CAPROP *m_pCAPropInfo;
|
|
LONG m_cCAPropInfo;
|
|
CAINFO *m_pCAInfo;
|
|
DWORD m_cbCAInfo;
|
|
|
|
WCHAR *m_pwszServerName;
|
|
|
|
INT m_rpcAuthProtocol;
|
|
|
|
BYTE *m_pbKRACertState;
|
|
DWORD m_cbKRACertState;
|
|
};
|