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