Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

118 lines
3.3 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// File: memory.cpp
//
// Contents: Microsoft Internet Security Trust Provider
//
// Functions: WVTNew
// WVTDelete
// WVTAddStore
// WVTAddSigner
// WVTAddCertContext
// WVTAddPrivateData
//
// History: 07-Jun-1997 pberkman created
//
//--------------------------------------------------------------------------
#include "global.hxx"
// PFN_CPD_MEM_ALLOC
void *WVTNew(DWORD cbSize)
{
void *pvRet;
pvRet = (void *)new char[cbSize];
if (!(pvRet))
{
assert(pvRet);
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
}
return(pvRet);
}
// PFN_CPD_MEM_FREE
void WVTDelete(void *pvMem)
{
DELETE_OBJECT(pvMem);
}
// PFN_CPD_ADD_STORE
BOOL WVTAddStore(CRYPT_PROVIDER_DATA *pProvData, HCERTSTORE hStore)
{
HCERTSTORE hStoreDup;
hStoreDup = CertDuplicateStore(hStore);
return(AddToStoreChain(hStoreDup, &pProvData->chStores, &pProvData->pahStores));
}
// PFN_CPD_ADD_SGNR
BOOL WVTAddSigner(CRYPT_PROVIDER_DATA *pProvData,
BOOL fCounterSigner,
DWORD idxSigner,
CRYPT_PROVIDER_SGNR *pSngr2Add)
{
if (fCounterSigner)
{
if (idxSigner > pProvData->csSigners)
{
return(FALSE);
}
return(AddToSignerChain(pSngr2Add,
&pProvData->pasSigners[idxSigner].csCounterSigners,
&pProvData->pasSigners[idxSigner].pasCounterSigners));
}
return(AddToSignerChain(pSngr2Add, &pProvData->csSigners, &pProvData->pasSigners));
}
// PFN_CPD_ADD_CERT
BOOL WVTAddCertContext(CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner,
BOOL fCounterSigner, DWORD idxCounterSigner, PCCERT_CONTEXT pCert)
{
CRYPT_PROVIDER_CERT sCert;
if (idxSigner > pProvData->csSigners)
{
return(FALSE);
}
memset(&sCert, 0x00, sizeof(CRYPT_PROVIDER_CERT));
sCert.cbStruct = sizeof(CRYPT_PROVIDER_CERT);
sCert.pCert = CertDuplicateCertificateContext(pCert);
if (fCounterSigner)
{
if (idxCounterSigner > pProvData->pasSigners[idxSigner].csCounterSigners)
{
return(FALSE);
}
return(AddToCertChain(&sCert,
&pProvData->pasSigners[idxSigner].pasCounterSigners[idxCounterSigner].csCertChain,
&pProvData->pasSigners[idxSigner].pasCounterSigners[idxCounterSigner].pasCertChain));
}
return(AddToCertChain(&sCert,
&pProvData->pasSigners[idxSigner].csCertChain,
&pProvData->pasSigners[idxSigner].pasCertChain));
}
// PFN_CPD_ADD_PRIVDATA
BOOL WVTAddPrivateData(CRYPT_PROVIDER_DATA *pProvData, CRYPT_PROVIDER_PRIVDATA *psPrivData2Add)
{
return(AllocateNewChain(sizeof(CRYPT_PROVIDER_PRIVDATA), psPrivData2Add,
&pProvData->csProvPrivData,
(void **)&pProvData->pasProvPrivData,
psPrivData2Add->cbStruct));
}