/*++ Copyright (C) Microsoft Corporation, 1998 - 1999 Module Name: Abstract: make all calls to CRYPT32.DLL functions go through a mapping layer Author: Jeff Roberts Revisions: Jeff Roberts (jroberts) 2-10-1998 created the file --*/ typedef HCERTSTORE (WINAPI *LPFN_CERTOPENSTORE)( IN LPCSTR lpszStoreProvider, IN DWORD dwEncodingType, IN HCRYPTPROV hCryptProv, IN DWORD dwFlags, IN const void *pvPara ); typedef BOOL (WINAPI *LPFN_CERTCLOSESTORE)( IN HCERTSTORE hCertStore, DWORD dwFlags ); typedef PCCERT_CONTEXT (WINAPI *LPFN_CERTFINDCERTIFICATEINSTORE)( IN HCERTSTORE hCertStore, IN DWORD dwCertEncodingType, IN DWORD dwFindFlags, IN DWORD dwFindType, IN const void *pvFindPara, IN PCCERT_CONTEXT pPrevCertContext ); typedef BOOL (WINAPI *LPFN_CERTFREECERTIFICATECONTEXT)( IN PCCERT_CONTEXT pCertContext ); typedef BOOL (WINAPI *LPFN_CERTCOMPARECERTIFICATENAME)( IN DWORD dwCertEncodingType, IN PCERT_NAME_BLOB pCertName1, IN PCERT_NAME_BLOB pCertName2 ); typedef BOOL (WINAPI *LPFN_CERTSTRTONAME)( IN DWORD dwCertEncodingType, IN RPC_CHAR *pszX500, IN DWORD dwStrType, IN OPTIONAL void *pvReserved, OUT BYTE *pbEncoded, IN OUT DWORD *pcbEncoded, OUT OPTIONAL RPC_CHAR **ppszError ); typedef DWORD (WINAPI *LPFN_CERTNAMETOSTR)( IN DWORD dwCertEncodingType, IN PCERT_NAME_BLOB pName, IN DWORD dwStrType, OUT OPTIONAL RPC_CHAR *psz, IN DWORD csz ); typedef PCERT_RDN_ATTR (WINAPI *LPFN_CERTFINDRDNATTR)( IN LPCSTR pszObjId, IN PCERT_NAME_INFO pName ); typedef BOOL (WINAPI *LPFN_CRYPTDECODEOBJECT)( IN DWORD dwCertEncodingType, IN LPCSTR lpszStructType, IN const BYTE *pbEncoded, IN DWORD cbEncoded, IN DWORD dwFlags, OUT void *pvStructInfo, IN OUT DWORD *pcbStructInfo ); typedef BOOL (WINAPI *LPFN_CERTVERIFYCERTIFICATECHAINPOLICY)( IN LPCSTR pszPolicyOID, IN PCCERT_CHAIN_CONTEXT pChainContext, IN PCERT_CHAIN_POLICY_PARA pPolicyPara, IN OUT PCERT_CHAIN_POLICY_STATUS pPolicyStatus ); typedef BOOL (WINAPI *LPFN_CERTGETCERTIFICATECHAIN)( IN OPTIONAL HCERTCHAINENGINE hChainEngine, IN PCCERT_CONTEXT pCertContext, IN OPTIONAL LPFILETIME pTime, IN OPTIONAL HCERTSTORE hAdditionalStore, IN PCERT_CHAIN_PARA pChainPara, IN DWORD dwFlags, IN LPVOID pvReserved, OUT PCCERT_CHAIN_CONTEXT* ppChainContext ); typedef BOOL (WINAPI *LPFN_CERTFREECERTIFICATECHAIN)( IN PCCERT_CHAIN_CONTEXT pChainContext ); typedef DWORD (WINAPI *LPFN_CERTGETNAMESTRINGW)( IN PCCERT_CONTEXT pCertContext, IN DWORD dwType, IN DWORD dwFlags, IN void *pvTypePara, OUT OPTIONAL LPWSTR pszNameString, IN DWORD cchNameString ); struct CRYPT32_FUNCTION_TABLE { LPFN_CERTOPENSTORE pCertOpenStore; LPFN_CERTCLOSESTORE pCertCloseStore; LPFN_CERTFINDCERTIFICATEINSTORE pCertFindCertificateInStore; LPFN_CERTFREECERTIFICATECONTEXT pCertFreeCertificateContext; LPFN_CERTCOMPARECERTIFICATENAME pCertCompareCertificateName; LPFN_CERTSTRTONAME pCertStrToName; LPFN_CERTNAMETOSTR pCertNameToStr; LPFN_CERTFINDRDNATTR pCertFindRDNAttr; LPFN_CRYPTDECODEOBJECT pCryptDecodeObject; #if MANUAL_CERT_CHECK LPFN_CERTVERIFYCERTIFICATECHAINPOLICY pCertVerifyCertificateChainPolicy; LPFN_CERTGETCERTIFICATECHAIN pGetCertificateChain; LPFN_CERTFREECERTIFICATECHAIN pFreeCertificateChain; #endif LPFN_CERTGETNAMESTRINGW pCertGetNameStringW; }; extern struct CRYPT32_FUNCTION_TABLE CFT; #define CertOpenStore(s,t,p,f,pp) (CFT.pCertOpenStore)((s),(t),(p),(f),(pp)) #define CertCloseStore(s,f) (CFT.pCertCloseStore)((s),(f)) #define CertFindCertificateInStore(s,t,f,ft,pp,pc) (CFT.pCertFindCertificateInStore)((s),(t),(f),(ft),(pp),(pc)) #define CertFreeCertificateContext(p) (CFT.pCertFreeCertificateContext)(p) #define CertCompareCertificateName(t,p1,p2) (CFT.pCertCompareCertificateName)((t),(p1),(p2)) #define CertStrToNameT(e,sz,t,r,pb,cb,pp) (CFT.pCertStrToName)((e),(sz),(t),(r),(pb),(cb),(pp)) #define CertNameToStrT(e,n,t,sz,c) (CFT.pCertNameToStr)((e),(n),(t),(sz),(c)) #define CertFindRDNAttr(sz,n) (CFT.pCertFindRDNAttr)((sz),(n)) #define CryptDecodeObject(t,s,pb,cb,f,pv,pcb) (CFT.pCryptDecodeObject)((t),(s),(pb),(cb),(f),(pv),(pcb)) #define CertGetNameStringW(p,t,f,tp,ns,nc) (CFT.pCertGetNameStringW) ((p),(t),(f),(tp),(ns),(nc)) extern BOOL LoadCrypt32Imports();