924 lines
23 KiB
C
924 lines
23 KiB
C
|
//+--------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1996 - 1999
|
||
|
//
|
||
|
// File: csext.h
|
||
|
//
|
||
|
// Contents: Cert Server globals
|
||
|
//
|
||
|
// History: 25-Jul-96 vich created
|
||
|
//
|
||
|
//---------------------------------------------------------------------------
|
||
|
|
||
|
#ifndef __CSEXT_H__
|
||
|
#define __CSEXT_H__
|
||
|
|
||
|
#include "certacl.h"
|
||
|
|
||
|
#ifndef SE_AUDITID_CERTSRV_ROLESEPARATIONSTATE
|
||
|
|
||
|
// Temporary define audit events here
|
||
|
|
||
|
#define SE_AUDITID_CERTSRV_ROLESEPARATIONSTATE ((ULONG)0x00000321L)
|
||
|
#define SE_AUDITID_CERTSRV_PUBLISHCACERT ((ULONG)0x0000031fL)
|
||
|
|
||
|
#endif // SE_AUDITID_CERTSRV_ROLESEPARATIONSTATE
|
||
|
|
||
|
// privately used access bit to check for local administrator rights
|
||
|
#define CA_ACCESS_LOCALADMIN 0x00008000
|
||
|
// privately used access bit to trigger a denied audit event
|
||
|
#define CA_ACCESS_DENIED 0x00004000
|
||
|
|
||
|
// Each certificate handler must export the following functions.
|
||
|
|
||
|
#define CMS_CRLPUB_PERIOD (60*1000) // 60 seconds (in milliseconds)
|
||
|
//#define CMS_CRLPUB_PERIOD (60*60*1000) // 60 minutes (in milliseconds)
|
||
|
|
||
|
typedef struct _CERTSRV_COM_CONTEXT
|
||
|
{
|
||
|
BOOL fInRequestGroup;
|
||
|
HANDLE hAccessToken;
|
||
|
DWORD RequestId;
|
||
|
DWORD iExitModActive;
|
||
|
WCHAR *pwszUserDN;
|
||
|
} CERTSRV_COM_CONTEXT;
|
||
|
|
||
|
|
||
|
typedef struct _CERTSRV_RESULT_CONTEXT
|
||
|
{
|
||
|
DWORD *pdwRequestId;
|
||
|
DWORD dwFlagsTop;
|
||
|
BOOL fTransactionId;
|
||
|
DWORD dwTransactionId;
|
||
|
BYTE *pbSenderNonce;
|
||
|
DWORD cbSenderNonce;
|
||
|
BOOL fKeyArchived;
|
||
|
BOOL fRenewal;
|
||
|
BOOL fEnrollOnBehalfOf;
|
||
|
BYTE *pbKeyHashIn;
|
||
|
DWORD cbKeyHashIn;
|
||
|
BYTE *pbKeyHashOut;
|
||
|
DWORD cbKeyHashOut;
|
||
|
DWORD *pdwDisposition;
|
||
|
CERTTRANSBLOB *pctbDispositionMessage;
|
||
|
CERTTRANSBLOB *pctbCert;
|
||
|
CERTTRANSBLOB *pctbCertChain;
|
||
|
CERTTRANSBLOB *pctbFullResponse;
|
||
|
} CERTSRV_RESULT_CONTEXT;
|
||
|
|
||
|
VOID ReleaseResult(IN OUT CERTSRV_RESULT_CONTEXT *pResult);
|
||
|
|
||
|
|
||
|
// Certification Authority Cert Context/Chain/Key information:
|
||
|
|
||
|
#define CTXF_SKIPCRL 0x00000001
|
||
|
#define CTXF_CERTMISSING 0x00000002
|
||
|
#define CTXF_CRLZOMBIE 0x00000004
|
||
|
#define CTXF_EXPIRED 0x00000010
|
||
|
#define CTXF_REVOKED 0x00000020
|
||
|
|
||
|
typedef struct _CACTX
|
||
|
{
|
||
|
DWORD Flags;
|
||
|
DWORD iCert;
|
||
|
DWORD iKey;
|
||
|
DWORD NameId; // MAKECANAMEID(iCert, iKey)
|
||
|
HRESULT hrVerifyStatus;
|
||
|
CERT_CONTEXT const **apCACertChain;
|
||
|
DWORD cCACertChain;
|
||
|
CERT_CONTEXT const *pccCA;
|
||
|
CRYPT_OBJID_BLOB IssuerKeyId;
|
||
|
HCRYPTPROV hProvCA;
|
||
|
CRYPT_OBJID_BLOB KeyAuthority2Cert;
|
||
|
CRYPT_OBJID_BLOB KeyAuthority2CRL;
|
||
|
CRYPT_OBJID_BLOB CDPCert;
|
||
|
CRYPT_OBJID_BLOB CDPCRLFreshest;
|
||
|
CRYPT_OBJID_BLOB CDPCRLBase;
|
||
|
CRYPT_OBJID_BLOB CDPCRLDelta;
|
||
|
CRYPT_OBJID_BLOB AIACert;
|
||
|
char *pszObjIdSignatureAlgorithm;
|
||
|
WCHAR *pwszKeyContainerName;
|
||
|
WCHAR **papwszCRLFiles;
|
||
|
WCHAR **papwszDeltaCRLFiles;
|
||
|
} CACTX;
|
||
|
|
||
|
|
||
|
typedef struct _CAXCHGCTX
|
||
|
{
|
||
|
DWORD Flags;
|
||
|
DWORD ReqId;
|
||
|
CERT_CONTEXT const *pccCA;
|
||
|
HCRYPTPROV hProvCA;
|
||
|
WCHAR *pwszKeyContainerName;
|
||
|
DWORD iCertSig;
|
||
|
} CAXCHGCTX;
|
||
|
|
||
|
|
||
|
//+****************************************************
|
||
|
// Core Module:
|
||
|
|
||
|
HRESULT
|
||
|
CoreInit(VOID);
|
||
|
|
||
|
VOID
|
||
|
CoreTerminate(VOID);
|
||
|
|
||
|
HRESULT
|
||
|
CoreValidateRequestId(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN DWORD ExpectedDisposition);
|
||
|
|
||
|
|
||
|
// Internal CoreProcessRequest Flags:
|
||
|
|
||
|
#define CR_IN_NEW 0x00000000
|
||
|
#define CR_IN_DENY 0x10000000
|
||
|
#define CR_IN_RESUBMIT 0x20000000
|
||
|
#define CR_IN_RETRIEVE 0x30000000
|
||
|
#define CR_IN_COREMASK 0x30000000
|
||
|
|
||
|
HRESULT
|
||
|
CoreProcessRequest(
|
||
|
IN DWORD dwType,
|
||
|
OPTIONAL IN WCHAR const *pwszUserName,
|
||
|
IN DWORD cbRequest,
|
||
|
OPTIONAL IN BYTE const *pbRequest,
|
||
|
OPTIONAL IN WCHAR const *pwszAttributes,
|
||
|
OPTIONAL IN WCHAR const *pwszSerialNumber,
|
||
|
IN DWORD dwComContextIndex,
|
||
|
IN DWORD dwRequestId,
|
||
|
OUT CERTSRV_RESULT_CONTEXT *pResult);
|
||
|
|
||
|
HRESULT
|
||
|
CoreDenyRequest(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN DWORD Flags,
|
||
|
IN DWORD ExpectedStatus);
|
||
|
|
||
|
VOID
|
||
|
CoreLogRequestStatus(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN DWORD LogMsg,
|
||
|
IN DWORD ErrCode,
|
||
|
IN WCHAR const *pwszDisposition);
|
||
|
|
||
|
WCHAR *
|
||
|
CoreBuildDispositionString(
|
||
|
OPTIONAL IN WCHAR const *pwszDispositionBase,
|
||
|
OPTIONAL IN WCHAR const *pwszUserName,
|
||
|
OPTIONAL IN WCHAR const *pwszDispositionDetail,
|
||
|
OPTIONAL IN WCHAR const *pwszDispositionBy,
|
||
|
IN HRESULT hrFail,
|
||
|
IN BOOL fPublishError);
|
||
|
|
||
|
HRESULT
|
||
|
CoreSetDisposition(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN DWORD Disposition);
|
||
|
|
||
|
HRESULT
|
||
|
CoreSetRequestDispositionFields(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN DWORD ErrCode,
|
||
|
IN DWORD Disposition,
|
||
|
IN WCHAR const *pwszDisposition);
|
||
|
|
||
|
HRESULT
|
||
|
CoreSetComContextUserDN(
|
||
|
IN DWORD dwRequestId,
|
||
|
IN LONG Context,
|
||
|
IN DWORD dwComContextIndex,
|
||
|
OPTIONAL OUT WCHAR const **ppwszDN); // do NOT free!
|
||
|
|
||
|
#ifndef DBG_COMTEST
|
||
|
# define DBG_COMTEST DBG_CERTSRV
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#if DBG_COMTEST
|
||
|
|
||
|
extern BOOL fComTest;
|
||
|
|
||
|
BOOL ComTest(LONG Context);
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#ifdef DBG_CERTSRV_DEBUG_PRINT
|
||
|
# define CERTSRVDBGPRINTTIME(pszDesc, pftGMT) \
|
||
|
CertSrvDbgPrintTime((pszDesc), (pftGMT))
|
||
|
VOID
|
||
|
CertSrvDbgPrintTime(
|
||
|
IN char const *pszDesc,
|
||
|
IN FILETIME const *pftGMT);
|
||
|
|
||
|
#else // DBG_CERTSRV_DEBUG_PRINT
|
||
|
# define CERTSRVDBGPRINTTIME(pszDesc, pftGMT)
|
||
|
#endif // DBG_CERTSRV_DEBUG_PRINT
|
||
|
|
||
|
|
||
|
HRESULT
|
||
|
CertSrvBlockThreadUntilStop();
|
||
|
|
||
|
/////////////////////////////////////
|
||
|
// CRL Publication logic
|
||
|
|
||
|
HRESULT
|
||
|
CRLInit(
|
||
|
IN WCHAR const *pwszSanitizedName);
|
||
|
|
||
|
VOID
|
||
|
CRLTerminate();
|
||
|
|
||
|
HRESULT
|
||
|
CRLPubWakeupEvent(
|
||
|
OUT DWORD *pdwMSTimeOut);
|
||
|
|
||
|
VOID
|
||
|
CRLComputeTimeOut(
|
||
|
IN FILETIME const *pftFirst,
|
||
|
IN FILETIME const *pftLast,
|
||
|
OUT DWORD *pdwMSTimeOut);
|
||
|
|
||
|
HRESULT
|
||
|
CRLPublishCRLs(
|
||
|
IN BOOL fRebuildCRL,
|
||
|
IN BOOL fForceRepublish,
|
||
|
OPTIONAL IN WCHAR const *pwszUserName,
|
||
|
IN BOOL fDelta,
|
||
|
IN BOOL fShadowDelta,
|
||
|
IN FILETIME ftNextUpdate,
|
||
|
OUT BOOL *pfNeedRetry,
|
||
|
OUT HRESULT *phrPublish);
|
||
|
|
||
|
HRESULT
|
||
|
CRLGetCRL(
|
||
|
IN DWORD iCert,
|
||
|
IN BOOL fDelta,
|
||
|
OPTIONAL OUT CRL_CONTEXT const **ppCRL,
|
||
|
OPTIONAL OUT DWORD *pdwCRLPublishFlags);
|
||
|
|
||
|
/////////////////////////////////////
|
||
|
|
||
|
|
||
|
HRESULT
|
||
|
PKCSSetup(
|
||
|
IN WCHAR const *pwszCommonName,
|
||
|
IN WCHAR const *pwszSanitizedName);
|
||
|
|
||
|
VOID
|
||
|
PKCSTerminate();
|
||
|
|
||
|
WCHAR const *
|
||
|
PKCSMapAttributeName(
|
||
|
OPTIONAL IN WCHAR const *pwszAttributeName,
|
||
|
OPTIONAL IN CHAR const *pszObjId,
|
||
|
OUT DWORD *pdwIndex,
|
||
|
OUT DWORD *pcchMax);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSGetProperty(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN WCHAR const *pwszPropName,
|
||
|
IN DWORD Flags,
|
||
|
OPTIONAL OUT DWORD *pcbData,
|
||
|
OUT BYTE **ppbData);
|
||
|
|
||
|
VOID
|
||
|
PKCSVerifyCAState(
|
||
|
IN OUT CACTX *pCAContext);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSMapCertIndex(
|
||
|
IN DWORD iCert,
|
||
|
OUT DWORD *piCert,
|
||
|
OUT DWORD *pState);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSMapCRLIndex(
|
||
|
IN DWORD iCert,
|
||
|
OUT DWORD *piCert, // returns newest iCert for passed iCert
|
||
|
OUT DWORD *piCRL,
|
||
|
OUT DWORD *pState);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSGetCACertStatusCode(
|
||
|
IN DWORD iCert,
|
||
|
OUT HRESULT *phrCAStatusCode);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSGetCAState(
|
||
|
IN BOOL fCertState,
|
||
|
OUT BYTE *pb);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSGetKRAState(
|
||
|
IN DWORD cKRA,
|
||
|
OUT BYTE *pb);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSSetSubjectTemplate(
|
||
|
IN WCHAR const *pwszTemplate);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSGetCACert(
|
||
|
IN DWORD iCert,
|
||
|
OUT BYTE **ppbCACert,
|
||
|
OUT DWORD *pcbCACert);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSGetCAChain(
|
||
|
IN DWORD iCert,
|
||
|
IN BOOL fIncludeCRLs,
|
||
|
OUT BYTE **ppbCAChain, // CoTaskMem*
|
||
|
OUT DWORD *pcbCAChain);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSGetCAXchgCert(
|
||
|
IN DWORD iCert,
|
||
|
IN WCHAR const *pwszUserName,
|
||
|
OUT DWORD *piCertSig,
|
||
|
OUT BYTE **ppbCACert,
|
||
|
OUT DWORD *pcbCACert);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSGetCAXchgChain(
|
||
|
IN DWORD iCert,
|
||
|
IN WCHAR const *pwszUserName,
|
||
|
IN BOOL fIncludeCRLs,
|
||
|
OUT BYTE **ppbCAChain, // CoTaskMem*
|
||
|
OUT DWORD *pcbCAChain);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSArchivePrivateKey(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN BOOL fV1Cert,
|
||
|
IN BOOL fOverwrite,
|
||
|
IN CRYPT_ATTR_BLOB const *pBlobEncrypted,
|
||
|
OPTIONAL IN OUT CERTSRV_RESULT_CONTEXT *pResult);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSGetArchivedKey(
|
||
|
IN DWORD dwRequestId,
|
||
|
OUT BYTE **ppbArchivedKey,
|
||
|
OUT DWORD *pcbArchivedKey);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSGetCRLList(
|
||
|
IN BOOL fDelta,
|
||
|
IN DWORD iCert,
|
||
|
OUT WCHAR const * const **ppapwszCRLList);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSSetServerProperties(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN LONG lValidityPeriodCount,
|
||
|
IN enum ENUM_PERIOD enumValidityPeriod);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSSetRequestFlags(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN BOOL fSet,
|
||
|
IN DWORD dwChange);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSCreateCertificate(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN DWORD Disposition,
|
||
|
IN BOOL fIncludeCRLs,
|
||
|
OUT BOOL *pfErrorLogged,
|
||
|
OPTIONAL OUT CACTX **ppCAContext,
|
||
|
IN OUT CERTSRV_RESULT_CONTEXT *pResult);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSEncodeFullResponse(
|
||
|
OPTIONAL IN ICertDBRow *prow,
|
||
|
IN CERTSRV_RESULT_CONTEXT const *pResult,
|
||
|
IN HRESULT hrRequest,
|
||
|
IN WCHAR *pwszDispositionString,
|
||
|
OPTIONAL IN CACTX *pCAContext,
|
||
|
OPTIONAL IN BYTE const *pbCertLeaf,
|
||
|
IN DWORD cbCertLeaf,
|
||
|
IN BOOL fIncludeCRLs,
|
||
|
OUT BYTE **ppbResponse, // CoTaskMem*
|
||
|
OUT DWORD *pcbResponse);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSVerifyIssuedCertificate(
|
||
|
IN CERT_CONTEXT const *pCert,
|
||
|
OUT CACTX **ppCAContext);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSIsRevoked(
|
||
|
IN DWORD RequestId,
|
||
|
OPTIONAL IN WCHAR const *pwszSerialNumber,
|
||
|
OUT LONG *pRevocationReason,
|
||
|
OUT LONG *pDisposition);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSParseImportedCertificate(
|
||
|
IN DWORD Disposition,
|
||
|
IN ICertDBRow *prow,
|
||
|
OPTIONAL IN CACTX const *pCAContext,
|
||
|
IN CERT_CONTEXT const *pCert);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSParseRequest(
|
||
|
IN DWORD dwFlags,
|
||
|
IN ICertDBRow *prow,
|
||
|
IN DWORD cbRequest,
|
||
|
IN BYTE const *pbRequest,
|
||
|
IN CERT_CONTEXT const *pSigningAuthority,
|
||
|
OUT BOOL *pfRenewal,
|
||
|
IN OUT CERTSRV_RESULT_CONTEXT *pResult);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSParseAttributes(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN WCHAR const *pwszAttributes,
|
||
|
IN BOOL fRegInfo,
|
||
|
IN DWORD dwRDNTable,
|
||
|
OPTIONAL OUT BOOL *pfEnrollOnBehalfOf);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSVerifyChallengeString(
|
||
|
IN ICertDBRow *prow);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSVerifySubjectRDN(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN WCHAR const *pwszPropertyName,
|
||
|
OPTIONAL IN WCHAR const *pwszPropertyValue,
|
||
|
OUT BOOL *pfSubjectDot);
|
||
|
|
||
|
HRESULT
|
||
|
PKCSDeleteAllSubjectRDNs(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN DWORD Flags);
|
||
|
|
||
|
WCHAR *
|
||
|
PKCSSplitToken(
|
||
|
IN OUT WCHAR **ppwszIn,
|
||
|
IN WCHAR *pwcSeparator,
|
||
|
OUT BOOL *pfSplit);
|
||
|
|
||
|
HRESULT
|
||
|
PropAddSuffix(
|
||
|
IN WCHAR const *pwszValue,
|
||
|
IN WCHAR const *pwszSuffix,
|
||
|
IN DWORD cwcNameMax,
|
||
|
OUT WCHAR **ppwszOut);
|
||
|
|
||
|
HRESULT
|
||
|
PropParseRequest(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN DWORD dwFlags,
|
||
|
IN DWORD cbRequest,
|
||
|
IN BYTE const *pbRequest,
|
||
|
IN OUT CERTSRV_RESULT_CONTEXT *pResult);
|
||
|
|
||
|
HRESULT
|
||
|
PropSetRequestTimeProperty(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN WCHAR const *pwszProp);
|
||
|
|
||
|
HRESULT
|
||
|
PropGetExtension(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN DWORD Flags,
|
||
|
IN WCHAR const *pwszExtensionName,
|
||
|
OUT DWORD *pdwExtFlags,
|
||
|
OUT DWORD *pcbValue,
|
||
|
OUT BYTE **ppbValue);
|
||
|
|
||
|
HRESULT
|
||
|
PropSetExtension(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN DWORD Flags,
|
||
|
IN WCHAR const *pwszExtensionName,
|
||
|
IN DWORD ExtFlags,
|
||
|
IN DWORD cbValue,
|
||
|
IN BYTE const *pbValue);
|
||
|
|
||
|
HRESULT
|
||
|
PropSetAttributeProperty(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN BOOL fConcatenateRDNs,
|
||
|
IN DWORD dwTable,
|
||
|
IN DWORD cchNameMax,
|
||
|
OPTIONAL IN WCHAR const *pwszSuffix,
|
||
|
IN WCHAR const *wszName,
|
||
|
IN WCHAR const *wszValue);
|
||
|
|
||
|
HRESULT
|
||
|
RequestInitCAPropertyInfo(VOID);
|
||
|
|
||
|
HRESULT
|
||
|
RequestGetCAPropertyInfo(
|
||
|
OUT LONG *pcProperty,
|
||
|
OUT CERTTRANSBLOB *pctbPropInfo);
|
||
|
|
||
|
HRESULT
|
||
|
RequestGetCAProperty(
|
||
|
IN LONG PropId, // CR_PROP_*
|
||
|
IN LONG PropIndex,
|
||
|
IN LONG PropType, // PROPTYPE_*
|
||
|
OUT CERTTRANSBLOB *pctbPropertyValue);
|
||
|
|
||
|
HRESULT
|
||
|
RequestSetCAProperty(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN LONG PropId, // CR_PROP_*
|
||
|
IN LONG PropIndex,
|
||
|
IN LONG PropType, // PROPTYPE_*
|
||
|
OUT CERTTRANSBLOB *pctbPropertyValue);
|
||
|
|
||
|
DWORD
|
||
|
CertSrvStartServerThread(
|
||
|
IN VOID *pvArg);
|
||
|
|
||
|
HRESULT
|
||
|
CertSrvEnterServer(
|
||
|
OUT DWORD *pState);
|
||
|
|
||
|
HRESULT
|
||
|
CertSrvTestServerState();
|
||
|
|
||
|
HRESULT
|
||
|
CertSrvLockServer(
|
||
|
IN OUT DWORD *pState);
|
||
|
|
||
|
VOID
|
||
|
CertSrvExitServer(
|
||
|
IN DWORD State);
|
||
|
|
||
|
HRESULT RPCInit(VOID);
|
||
|
|
||
|
HRESULT RPCTeardown(VOID);
|
||
|
|
||
|
VOID
|
||
|
ServiceMain(
|
||
|
IN DWORD dwArgc,
|
||
|
IN LPWSTR *lpszArgv);
|
||
|
|
||
|
BOOL
|
||
|
ServiceReportStatusToSCMgr(
|
||
|
IN DWORD dwCurrentState,
|
||
|
IN DWORD dwWin32ExitCode,
|
||
|
IN DWORD dwCheckPoint,
|
||
|
IN DWORD dwWaitHint);
|
||
|
|
||
|
#define INCREMENT_EXTENSIONS 16
|
||
|
|
||
|
HRESULT
|
||
|
DBOpen( // initialize database
|
||
|
WCHAR const *pwszSanitizedName);
|
||
|
|
||
|
HRESULT
|
||
|
DBShutDown( // terminate database access
|
||
|
IN BOOL fPendingNotify);
|
||
|
|
||
|
STDMETHODIMP
|
||
|
CheckCertSrvAccess(
|
||
|
IN LPCWSTR wszCA,
|
||
|
IN handle_t hRpc,
|
||
|
IN ACCESS_MASK Mask,
|
||
|
OUT BOOL *pfAccessAllowed,
|
||
|
OPTIONAL OUT HANDLE *phToken);
|
||
|
|
||
|
HRESULT
|
||
|
CertSrvSetRegistryFileTimeValue(
|
||
|
IN BOOL fConfigLevel,
|
||
|
IN WCHAR const *pwszRegValueName,
|
||
|
IN DWORD cpwszDelete,
|
||
|
OPTIONAL IN WCHAR const * const *papwszRegValueNameDelete);
|
||
|
|
||
|
HRESULT
|
||
|
GetClientUserName(
|
||
|
OPTIONAL IN RPC_BINDING_HANDLE hRpc,
|
||
|
OPTIONAL OUT WCHAR **ppwszUserSamName,
|
||
|
OPTIONAL OUT WCHAR **ppwszUserDN);
|
||
|
|
||
|
HRESULT CertStartClassFactories(VOID);
|
||
|
VOID CertStopClassFactories(VOID);
|
||
|
|
||
|
HRESULT
|
||
|
SetCAObjectFlags(DWORD dwFlags);
|
||
|
|
||
|
namespace CertSrv
|
||
|
{
|
||
|
HRESULT
|
||
|
GetMembership(
|
||
|
IN AUTHZ_RESOURCE_MANAGER_HANDLE AuthzRM,
|
||
|
IN PSID pSid,
|
||
|
PTOKEN_GROUPS *ppGroups);
|
||
|
|
||
|
HRESULT
|
||
|
CheckOfficerRights(DWORD dwRequestID, CertSrv::CAuditEvent &event);
|
||
|
HRESULT
|
||
|
CheckOfficerRights(LPCWSTR pwszRequesterName, CertSrv::CAuditEvent &event);
|
||
|
|
||
|
BOOL
|
||
|
CallbackAccessCheck(
|
||
|
IN AUTHZ_CLIENT_CONTEXT_HANDLE pAuthzClientContext,
|
||
|
IN PACE_HEADER pAce,
|
||
|
IN PVOID pArgs OPTIONAL,
|
||
|
IN OUT PBOOL pbAceApplicable);
|
||
|
}
|
||
|
|
||
|
|
||
|
HRESULT
|
||
|
PKCSGetKRACert(
|
||
|
IN DWORD iCert,
|
||
|
OUT BYTE **ppbCert,
|
||
|
OUT DWORD *pcbCert);
|
||
|
|
||
|
#define CSST_STARTSERVICECONTROLLER 0x00000001
|
||
|
#define CSST_CONSOLE 0x00000002
|
||
|
|
||
|
extern enum ENUM_PERIOD g_enumValidityPeriod;
|
||
|
extern LONG g_lValidityPeriodCount;
|
||
|
|
||
|
extern enum ENUM_PERIOD g_enumCAXchgValidityPeriod;
|
||
|
extern LONG g_lCAXchgValidityPeriodCount;
|
||
|
|
||
|
extern enum ENUM_PERIOD g_enumCAXchgOverlapPeriod;
|
||
|
extern LONG g_lCAXchgOverlapPeriodCount;
|
||
|
|
||
|
extern DWORD g_dwDelay2;
|
||
|
|
||
|
extern DWORD g_dwClockSkewMinutes;
|
||
|
extern DWORD g_dwLogLevel;
|
||
|
extern DWORD g_dwCRLFlags;
|
||
|
extern DWORD g_dwHighSerial;
|
||
|
|
||
|
extern ICertDB *g_pCertDB;
|
||
|
extern BOOL g_fDBRecovered;
|
||
|
|
||
|
extern HCERTSTORE g_hStoreCA;
|
||
|
extern HCRYPTPROV g_hProvCA;
|
||
|
|
||
|
extern BSTR g_strPolicyDescription;
|
||
|
extern BSTR g_strExitDescription;
|
||
|
|
||
|
extern BOOL g_fCertEnrollCompatible;
|
||
|
extern BOOL g_fEnforceRDNNameLengths;
|
||
|
extern BOOL g_fCreateDB;
|
||
|
extern BOOL g_fStartAsService;
|
||
|
extern DWORD g_CRLEditFlags;
|
||
|
extern DWORD g_KRAFlags;
|
||
|
extern DWORD g_cKRACertsRoundRobin;
|
||
|
extern DWORD g_cKRACerts;
|
||
|
extern ENUM_FORCETELETEX g_fForceTeletex;
|
||
|
extern ENUM_CATYPES g_CAType;
|
||
|
extern BOOL g_fUseDS;
|
||
|
extern BOOL g_fServerUpgraded;
|
||
|
extern long g_cTemplateUpdateSequenceNum;
|
||
|
extern BOOL g_fLockICertRequest;
|
||
|
|
||
|
extern BOOL g_fCryptSilent;
|
||
|
|
||
|
extern WCHAR g_wszCAStore[];
|
||
|
extern WCHAR const g_wszCertSrvServiceName[];
|
||
|
extern WCHAR const g_wszRegKeyConfigPath[];
|
||
|
|
||
|
extern WCHAR const g_wszRegDBA[];
|
||
|
|
||
|
extern WCHAR g_wszSanitizedName[];
|
||
|
extern WCHAR *g_pwszSanitizedDSName;
|
||
|
extern WCHAR g_wszCommonName[];
|
||
|
extern WCHAR g_wszParentConfig[];
|
||
|
|
||
|
extern WCHAR g_wszDatabase[];
|
||
|
extern WCHAR g_wszLogDir[];
|
||
|
extern WCHAR g_wszSystemDir[];
|
||
|
|
||
|
extern WCHAR *g_pwszServerName;
|
||
|
extern BSTR g_strDomainDN;
|
||
|
extern BSTR g_strConfigDN;
|
||
|
extern WCHAR *g_pwszKRAPublishURL;
|
||
|
extern WCHAR *g_pwszAIACrossCertPublishURL;
|
||
|
extern WCHAR *g_pwszRootTrustCrossCertPublishURL;
|
||
|
|
||
|
extern WCHAR const g_wszRegValidityPeriodString[];
|
||
|
extern WCHAR const g_wszRegValidityPeriodCount[];
|
||
|
extern WCHAR const g_wszRegCAXchgCertHash[];
|
||
|
|
||
|
// renewal-friendly properties
|
||
|
|
||
|
extern DWORD g_cCAKeys; // Total number of CA keys managed by this CA
|
||
|
extern DWORD g_cCACerts; // Total number of CA certs managed by this CA
|
||
|
|
||
|
extern DWORD g_cExitMod; // Total number of exit modules loaded by this CA
|
||
|
|
||
|
extern CertSrv::CCertificateAuthoritySD g_CASD;
|
||
|
extern AUTHZ_RESOURCE_MANAGER_HANDLE g_AuthzCertSrvRM;
|
||
|
extern DWORD g_dwAuditFilter;
|
||
|
extern CertSrv::COfficerRightsSD g_OfficerRightsSD;
|
||
|
extern CertSrv::CConfigStorage g_ConfigStorage;
|
||
|
extern CertSrv::CAutoLPWSTR g_pwszDBFileHash;
|
||
|
|
||
|
//+--------------------------------------------------------------------------
|
||
|
// Name properties:
|
||
|
|
||
|
extern WCHAR const g_wszPropDistinguishedName[];
|
||
|
extern WCHAR const g_wszPropRawName[];
|
||
|
extern WCHAR const g_wszPropCountry[];
|
||
|
extern WCHAR const g_wszPropOrganization[];
|
||
|
extern WCHAR const g_wszPropOrgUnit[];
|
||
|
extern WCHAR const g_wszPropCommonName[];
|
||
|
extern WCHAR const g_wszPropLocality[];
|
||
|
extern WCHAR const g_wszPropState[];
|
||
|
extern WCHAR const g_wszPropTitle[];
|
||
|
extern WCHAR const g_wszPropGivenName[];
|
||
|
extern WCHAR const g_wszPropInitials[];
|
||
|
extern WCHAR const g_wszPropSurName[];
|
||
|
extern WCHAR const g_wszPropDomainComponent[];
|
||
|
extern WCHAR const g_wszPropEMail[];
|
||
|
extern WCHAR const g_wszPropStreetAddress[];
|
||
|
extern WCHAR const g_wszPropUnstructuredAddress[];
|
||
|
extern WCHAR const g_wszPropUnstructuredName[];
|
||
|
extern WCHAR const g_wszPropDeviceSerialNumber[];
|
||
|
extern WCHAR const g_wszPropCertificateIssuerNameID[];
|
||
|
|
||
|
|
||
|
//+--------------------------------------------------------------------------
|
||
|
// Subject Name properties:
|
||
|
|
||
|
extern WCHAR const g_wszPropSubjectDot[];
|
||
|
extern WCHAR const g_wszPropSubjectDistinguishedName[];
|
||
|
extern WCHAR const g_wszPropSubjectRawName[];
|
||
|
extern WCHAR const g_wszPropSubjectCountry[];
|
||
|
extern WCHAR const g_wszPropSubjectOrganization[];
|
||
|
extern WCHAR const g_wszPropSubjectOrgUnit[];
|
||
|
extern WCHAR const g_wszPropSubjectCommonName[];
|
||
|
extern WCHAR const g_wszPropSubjectLocality[];
|
||
|
extern WCHAR const g_wszPropSubjectState[];
|
||
|
extern WCHAR const g_wszPropSubjectTitle[];
|
||
|
extern WCHAR const g_wszPropSubjectGivenName[];
|
||
|
extern WCHAR const g_wszPropSubjectInitials[];
|
||
|
extern WCHAR const g_wszPropSubjectSurName[];
|
||
|
extern WCHAR const g_wszPropSubjectDomainComponent[];
|
||
|
extern WCHAR const g_wszPropSubjectEMail[];
|
||
|
extern WCHAR const g_wszPropSubjectStreetAddress[];
|
||
|
extern WCHAR const g_wszPropSubjectUnstructuredAddress[];
|
||
|
extern WCHAR const g_wszPropSubjectUnstructuredName[];
|
||
|
extern WCHAR const g_wszPropSubjectDeviceSerialNumber[];
|
||
|
|
||
|
|
||
|
//+--------------------------------------------------------------------------
|
||
|
// Issuer Name properties:
|
||
|
|
||
|
extern WCHAR const g_wszPropIssuerDot[];
|
||
|
extern WCHAR const g_wszPropIssuerDistinguishedName[];
|
||
|
extern WCHAR const g_wszPropIssuerRawName[];
|
||
|
extern WCHAR const g_wszPropIssuerCountry[];
|
||
|
extern WCHAR const g_wszPropIssuerOrganization[];
|
||
|
extern WCHAR const g_wszPropIssuerOrgUnit[];
|
||
|
extern WCHAR const g_wszPropIssuerCommonName[];
|
||
|
extern WCHAR const g_wszPropIssuerLocality[];
|
||
|
extern WCHAR const g_wszPropIssuerState[];
|
||
|
extern WCHAR const g_wszPropIssuerTitle[];
|
||
|
extern WCHAR const g_wszPropIssuerGivenName[];
|
||
|
extern WCHAR const g_wszPropIssuerInitials[];
|
||
|
extern WCHAR const g_wszPropIssuerSurName[];
|
||
|
extern WCHAR const g_wszPropIssuerDomainComponent[];
|
||
|
extern WCHAR const g_wszPropIssuerEMail[];
|
||
|
extern WCHAR const g_wszPropIssuerStreetAddress[];
|
||
|
extern WCHAR const g_wszPropIssuerUnstructuredAddress[];
|
||
|
extern WCHAR const g_wszPropIssuerUnstructuredName[];
|
||
|
extern WCHAR const g_wszPropIssuerDeviceSerialNumber[];
|
||
|
|
||
|
|
||
|
//+--------------------------------------------------------------------------
|
||
|
// Request properties:
|
||
|
|
||
|
extern WCHAR const g_wszPropRequestRequestID[];
|
||
|
extern WCHAR const g_wszPropRequestRawRequest[];
|
||
|
extern WCHAR const g_wszPropRequestRawArchivedKey[];
|
||
|
extern WCHAR const g_wszPropRequestKeyRecoveryHashes[];
|
||
|
extern WCHAR const g_wszPropRequestRawOldCertificate[];
|
||
|
extern WCHAR const g_wszPropRequestAttributes[];
|
||
|
extern WCHAR const g_wszPropRequestType[];
|
||
|
extern WCHAR const g_wszPropRequestFlags[];
|
||
|
extern WCHAR const g_wszPropRequestStatusCode[];
|
||
|
extern WCHAR const g_wszPropRequestDisposition[];
|
||
|
extern WCHAR const g_wszPropRequestDispositionMessage[];
|
||
|
extern WCHAR const g_wszPropRequestSubmittedWhen[];
|
||
|
extern WCHAR const g_wszPropRequestResolvedWhen[];
|
||
|
extern WCHAR const g_wszPropRequestRevokedWhen[];
|
||
|
extern WCHAR const g_wszPropRequestRevokedEffectiveWhen[];
|
||
|
extern WCHAR const g_wszPropRequestRevokedReason[];
|
||
|
extern WCHAR const g_wszPropRequesterName[];
|
||
|
extern WCHAR const g_wszPropCallerName[];
|
||
|
extern WCHAR const g_wszPropRequestOSVersion[];
|
||
|
extern WCHAR const g_wszPropRequestCSPProvider[];
|
||
|
|
||
|
//+--------------------------------------------------------------------------
|
||
|
// Request attribute properties:
|
||
|
|
||
|
extern WCHAR const g_wszPropChallenge[];
|
||
|
extern WCHAR const g_wszPropExpectedChallenge[];
|
||
|
|
||
|
|
||
|
//+--------------------------------------------------------------------------
|
||
|
// Certificate properties:
|
||
|
|
||
|
extern WCHAR const g_wszPropCertificateRequestID[];
|
||
|
extern WCHAR const g_wszPropRawCertificate[];
|
||
|
extern WCHAR const g_wszPropCertificateHash[];
|
||
|
extern WCHAR const g_wszPropCertificateSerialNumber[];
|
||
|
extern WCHAR const g_wszPropCertificateNotBeforeDate[];
|
||
|
extern WCHAR const g_wszPropCertificateNotAfterDate[];
|
||
|
extern WCHAR const g_wszPropCertificateSubjectKeyIdentifier[];
|
||
|
extern WCHAR const g_wszPropCertificateRawPublicKey[];
|
||
|
extern WCHAR const g_wszPropCertificatePublicKeyLength[];
|
||
|
extern WCHAR const g_wszPropCertificatePublicKeyAlgorithm[];
|
||
|
extern WCHAR const g_wszPropCertificateRawPublicKeyAlgorithmParameters[];
|
||
|
|
||
|
|
||
|
//+--------------------------------------------------------------------------
|
||
|
// Disposition messages:
|
||
|
|
||
|
extern WCHAR const *g_pwszRequestedBy;
|
||
|
extern WCHAR const *g_pwszRevokedBy;
|
||
|
extern WCHAR const *g_pwszUnrevokedBy;
|
||
|
extern WCHAR const *g_pwszPublishedBy;
|
||
|
|
||
|
extern WCHAR const *g_pwszIntermediateCAStore;
|
||
|
|
||
|
//+--------------------------------------------------------------------------
|
||
|
// Localizable audit strings
|
||
|
extern WCHAR const *g_pwszYes;
|
||
|
extern WCHAR const *g_pwszNo;
|
||
|
extern LPCWSTR g_pwszAuditResources[];
|
||
|
|
||
|
//+--------------------------------------------------------------------------
|
||
|
// Secured attributes:
|
||
|
extern LPWSTR g_wszzSecuredAttributes;
|
||
|
|
||
|
extern HANDLE g_hServiceStoppingEvent;
|
||
|
extern HANDLE g_hServiceStoppedEvent;
|
||
|
|
||
|
extern HANDLE g_hCRLManualPublishEvent;
|
||
|
extern BOOL g_fCRLPublishDisabled;
|
||
|
extern BOOL g_fDeltaCRLPublishDisabled;
|
||
|
|
||
|
extern HKEY g_hkeyCABase;
|
||
|
extern HWND g_hwndMain;
|
||
|
|
||
|
extern BOOL g_fAdvancedServer;
|
||
|
|
||
|
__inline DWORD GetCertsrvComThreadingModel() { return(COINIT_MULTITHREADED); }
|
||
|
|
||
|
extern CACTX *g_aCAContext;
|
||
|
extern CACTX *g_pCAContextCurrent;
|
||
|
|
||
|
|
||
|
inline HRESULT CheckAuthorityName(PCWSTR pwszAuthority, bool fAllowEmptyName = false)
|
||
|
{
|
||
|
HRESULT hr;
|
||
|
if (NULL != pwszAuthority && L'\0' != *pwszAuthority)
|
||
|
{
|
||
|
if (0 != lstrcmpi(pwszAuthority, g_wszCommonName))
|
||
|
{
|
||
|
if (0 != lstrcmpi(pwszAuthority, g_wszSanitizedName) &&
|
||
|
0 != lstrcmpi(pwszAuthority, g_pwszSanitizedDSName))
|
||
|
{
|
||
|
hr = E_INVALIDARG;
|
||
|
goto error;
|
||
|
}
|
||
|
#ifdef DBG_CERTSRV_DEBUG_PRINT
|
||
|
if (0 == lstrcmpi(pwszAuthority, g_wszSanitizedName))
|
||
|
{
|
||
|
DBGPRINT((
|
||
|
DBG_SS_CERTSRV,
|
||
|
"'%ws' called with Sanitized Name: '%ws'\n",
|
||
|
g_wszCommonName,
|
||
|
pwszAuthority));
|
||
|
}
|
||
|
else if (0 == lstrcmpi(pwszAuthority, g_pwszSanitizedDSName))
|
||
|
{
|
||
|
DBGPRINT((
|
||
|
DBG_SS_CERTSRV,
|
||
|
"'%ws' called with Sanitized DS Name: '%ws'\n",
|
||
|
g_wszCommonName,
|
||
|
pwszAuthority));
|
||
|
}
|
||
|
#endif
|
||
|
}
|
||
|
}
|
||
|
else if(!fAllowEmptyName)
|
||
|
{
|
||
|
return hr = E_INVALIDARG;
|
||
|
}
|
||
|
|
||
|
hr = S_OK;
|
||
|
|
||
|
error:
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
#endif // __CSEXT_H__
|