Juan Lang : crypt32: Implement CertSerializeCRLStoreElement.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri May 26 05:42:13 CDT 2006
Module: wine
Branch: master
Commit: f94d49dcd4c161d38b8568ee8c9a5d4dd5358f64
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=f94d49dcd4c161d38b8568ee8c9a5d4dd5358f64
Author: Juan Lang <juan_lang at yahoo.com>
Date: Thu May 25 19:43:30 2006 -0700
crypt32: Implement CertSerializeCRLStoreElement.
---
dlls/crypt32/crypt32.spec | 2 +
dlls/crypt32/crypt32_private.h | 2 +
dlls/crypt32/serialize.c | 76 ++++++++++++++++++++++------------------
dlls/crypt32/store.c | 10 +++++
4 files changed, 55 insertions(+), 35 deletions(-)
diff --git a/dlls/crypt32/crypt32.spec b/dlls/crypt32/crypt32.spec
index 88dba5b..8900bec 100644
--- a/dlls/crypt32/crypt32.spec
+++ b/dlls/crypt32/crypt32.spec
@@ -30,7 +30,7 @@
@ stdcall CertDuplicateStore(ptr)
@ stdcall CertEnumCRLContextProperties(ptr long)
@ stdcall CertEnumCRLsInStore(ptr ptr)
-@ stub CertEnumCTLContextProperties
+@ stdcall CertEnumCTLContextProperties(ptr long)
@ stdcall CertEnumCTLsInStore(ptr ptr)
@ stdcall CertEnumCertificateContextProperties(ptr long)
@ stdcall CertEnumCertificatesInStore(long ptr)
diff --git a/dlls/crypt32/crypt32_private.h b/dlls/crypt32/crypt32_private.h
index 5b39b12..67306b3 100644
--- a/dlls/crypt32/crypt32_private.h
+++ b/dlls/crypt32/crypt32_private.h
@@ -56,6 +56,7 @@ typedef BOOL (WINAPI *AddEncodedContextT
typedef const void *(WINAPI *DuplicateContextFunc)(const void *context);
typedef const void *(WINAPI *EnumContextsInStoreFunc)(HCERTSTORE hCertStore,
const void *pPrevContext);
+typedef DWORD (WINAPI *EnumPropertiesFunc)(const void *context, DWORD dwPropId);
typedef BOOL (WINAPI *GetContextPropertyFunc)(const void *context,
DWORD dwPropID, void *pvData, DWORD *pcbData);
typedef BOOL (WINAPI *SetContextPropertyFunc)(const void *context,
@@ -73,6 +74,7 @@ typedef struct _WINE_CONTEXT_INTERFACE
AddEncodedContextToStoreFunc addEncodedToStore;
DuplicateContextFunc duplicate;
EnumContextsInStoreFunc enumContextsInStore;
+ EnumPropertiesFunc enumProps;
GetContextPropertyFunc getProp;
SetContextPropertyFunc setProp;
SerializeElementFunc serialize;
diff --git a/dlls/crypt32/serialize.c b/dlls/crypt32/serialize.c
index f1f3989..b0765a7 100644
--- a/dlls/crypt32/serialize.c
+++ b/dlls/crypt32/serialize.c
@@ -36,45 +36,29 @@ typedef struct _WINE_CERT_PROP_HEADER
DWORD cb;
} WINE_CERT_PROP_HEADER, *PWINE_CERT_PROP_HEADER;
-BOOL WINAPI CertSerializeCRLStoreElement(PCCRL_CONTEXT pCrlContext,
- DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement)
-{
- FIXME("(%p, %08lx, %p, %p): stub\n", pCrlContext, dwFlags, pbElement,
- pcbElement);
- return FALSE;
-}
-
-BOOL WINAPI CertSerializeCTLStoreElement(PCCTL_CONTEXT pCtlContext,
- DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement)
-{
- FIXME("(%p, %08lx, %p, %p): stub\n", pCtlContext, dwFlags, pbElement,
- pcbElement);
- return FALSE;
-}
-
-BOOL WINAPI CertSerializeCertificateStoreElement(PCCERT_CONTEXT pCertContext,
- DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement)
+static BOOL CRYPT_SerializeStoreElement(const void *context,
+ const BYTE *encodedContext, DWORD cbEncodedContext, DWORD contextPropID,
+ PCWINE_CONTEXT_INTERFACE contextInterface, DWORD dwFlags, BYTE *pbElement,
+ DWORD *pcbElement)
{
BOOL ret;
- TRACE("(%p, %08lx, %p, %p)\n", pCertContext, dwFlags, pbElement,
- pcbElement);
+ TRACE("(%p, %p, %08lx, %p, %p)\n", context, contextInterface, dwFlags,
+ pbElement, pcbElement);
- if (pCertContext)
+ if (context)
{
- DWORD bytesNeeded = sizeof(WINE_CERT_PROP_HEADER) +
- pCertContext->cbCertEncoded;
+ DWORD bytesNeeded = sizeof(WINE_CERT_PROP_HEADER) + cbEncodedContext;
DWORD prop = 0;
ret = TRUE;
do {
- prop = CertEnumCertificateContextProperties(pCertContext, prop);
+ prop = contextInterface->enumProps(context, prop);
if (prop)
{
DWORD propSize = 0;
- ret = CertGetCertificateContextProperty(pCertContext,
- prop, NULL, &propSize);
+ ret = contextInterface->getProp(context, prop, NULL, &propSize);
if (ret)
bytesNeeded += sizeof(WINE_CERT_PROP_HEADER) + propSize;
}
@@ -99,13 +83,13 @@ BOOL WINAPI CertSerializeCertificateStor
prop = 0;
do {
- prop = CertEnumCertificateContextProperties(pCertContext, prop);
+ prop = contextInterface->enumProps(context, prop);
if (prop)
{
DWORD propSize = 0;
- ret = CertGetCertificateContextProperty(pCertContext,
- prop, NULL, &propSize);
+ ret = contextInterface->getProp(context, prop, NULL,
+ &propSize);
if (ret)
{
if (bufSize < propSize)
@@ -118,8 +102,8 @@ BOOL WINAPI CertSerializeCertificateStor
}
if (buf)
{
- ret = CertGetCertificateContextProperty(
- pCertContext, prop, buf, &propSize);
+ ret = contextInterface->getProp(context, prop, buf,
+ &propSize);
if (ret)
{
hdr = (PWINE_CERT_PROP_HEADER)pbElement;
@@ -142,11 +126,11 @@ BOOL WINAPI CertSerializeCertificateStor
CryptMemFree(buf);
hdr = (PWINE_CERT_PROP_HEADER)pbElement;
- hdr->propID = CERT_CERT_PROP_ID;
+ hdr->propID = contextPropID;
hdr->unknown = 1;
- hdr->cb = pCertContext->cbCertEncoded;
+ hdr->cb = cbEncodedContext;
memcpy(pbElement + sizeof(WINE_CERT_PROP_HEADER),
- pCertContext->pbCertEncoded, pCertContext->cbCertEncoded);
+ encodedContext, cbEncodedContext);
}
}
else
@@ -154,6 +138,30 @@ BOOL WINAPI CertSerializeCertificateStor
return ret;
}
+BOOL WINAPI CertSerializeCertificateStoreElement(PCCERT_CONTEXT pCertContext,
+ DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement)
+{
+ return CRYPT_SerializeStoreElement(pCertContext,
+ pCertContext->pbCertEncoded, pCertContext->cbCertEncoded,
+ CERT_CERT_PROP_ID, pCertInterface, dwFlags, pbElement, pcbElement);
+}
+
+BOOL WINAPI CertSerializeCRLStoreElement(PCCRL_CONTEXT pCrlContext,
+ DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement)
+{
+ return CRYPT_SerializeStoreElement(pCrlContext,
+ pCrlContext->pbCrlEncoded, pCrlContext->cbCrlEncoded,
+ CERT_CRL_PROP_ID, pCRLInterface, dwFlags, pbElement, pcbElement);
+}
+
+BOOL WINAPI CertSerializeCTLStoreElement(PCCTL_CONTEXT pCtlContext,
+ DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement)
+{
+ return CRYPT_SerializeStoreElement(pCtlContext,
+ pCtlContext->pbCtlEncoded, pCtlContext->cbCtlEncoded,
+ CERT_CTL_PROP_ID, pCRLInterface, dwFlags, pbElement, pcbElement);
+}
+
/* Looks for the property with ID propID in the buffer buf. Returns a pointer
* to its header if a valid header is found, NULL if not. Valid means the
* length of thte property won't overrun buf, and the unknown field is 1.
diff --git a/dlls/crypt32/store.c b/dlls/crypt32/store.c
index 774d2b3..6d3a1be 100644
--- a/dlls/crypt32/store.c
+++ b/dlls/crypt32/store.c
@@ -47,6 +47,7 @@ static const WINE_CONTEXT_INTERFACE gCer
(AddEncodedContextToStoreFunc)CertAddEncodedCertificateToStore,
(DuplicateContextFunc)CertDuplicateCertificateContext,
(EnumContextsInStoreFunc)CertEnumCertificatesInStore,
+ (EnumPropertiesFunc)CertEnumCertificateContextProperties,
(GetContextPropertyFunc)CertGetCertificateContextProperty,
(SetContextPropertyFunc)CertSetCertificateContextProperty,
(SerializeElementFunc)CertSerializeCertificateStoreElement,
@@ -61,6 +62,7 @@ static const WINE_CONTEXT_INTERFACE gCRL
(AddEncodedContextToStoreFunc)CertAddEncodedCRLToStore,
(DuplicateContextFunc)CertDuplicateCRLContext,
(EnumContextsInStoreFunc)CertEnumCRLsInStore,
+ (EnumPropertiesFunc)CertEnumCRLContextProperties,
(GetContextPropertyFunc)CertGetCRLContextProperty,
(SetContextPropertyFunc)CertSetCRLContextProperty,
(SerializeElementFunc)CertSerializeCRLStoreElement,
@@ -75,6 +77,7 @@ static const WINE_CONTEXT_INTERFACE gCTL
(AddEncodedContextToStoreFunc)CertAddEncodedCTLToStore,
(DuplicateContextFunc)CertDuplicateCTLContext,
(EnumContextsInStoreFunc)CertEnumCTLsInStore,
+ (EnumPropertiesFunc)CertEnumCTLContextProperties,
(GetContextPropertyFunc)CertGetCTLContextProperty,
(SetContextPropertyFunc)CertSetCTLContextProperty,
(SerializeElementFunc)CertSerializeCTLStoreElement,
@@ -2240,6 +2243,13 @@ BOOL WINAPI CertControlStore(HCERTSTORE
return ret;
}
+DWORD WINAPI CertEnumCTLContextProperties(PCCTL_CONTEXT pCTLContext,
+ DWORD dwPropId)
+{
+ FIXME("(%p, %ld): stub\n", pCTLContext, dwPropId);
+ return 0;
+}
+
BOOL WINAPI CertGetCTLContextProperty(PCCTL_CONTEXT pCTLContext,
DWORD dwPropId, void *pvData, DWORD *pcbData)
{
More information about the wine-cvs
mailing list