windows-nt/Source/XPSP1/NT/ds/security/services/ca/certcli/request.h
2020-09-26 16:20:57 +08:00

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;
};