crypt32/tests: Get the tests running on Windows 98.

Francois Gouget fgouget at free.fr
Tue Nov 20 06:48:48 CST 2007


---
 dlls/crypt32/tests/cert.c        |  109 +++++---
 dlls/crypt32/tests/chain.c       |  111 ++++++---
 dlls/crypt32/tests/crl.c         |   50 +++--
 dlls/crypt32/tests/encode.c      |  520 +++++++++++++++++++------------------
 dlls/crypt32/tests/oid.c         |   19 ++-
 dlls/crypt32/tests/protectdata.c |   38 ++-
 dlls/crypt32/tests/store.c       |  258 ++++++++++++-------
 7 files changed, 653 insertions(+), 452 deletions(-)

diff --git a/dlls/crypt32/tests/cert.c b/dlls/crypt32/tests/cert.c
index 8e4bc5d..cb3de1c 100644
--- a/dlls/crypt32/tests/cert.c
+++ b/dlls/crypt32/tests/cert.c
@@ -29,6 +29,11 @@
 
 #include "wine/test.h"
 
+static BOOL (WINAPI *pCertAddStoreToCollection)(HCERTSTORE,HCERTSTORE,DWORD,DWORD);
+static PCCERT_CONTEXT (WINAPI *pCertCreateSelfSignCertificate)(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE,PCERT_NAME_BLOB,DWORD,PCRYPT_KEY_PROV_INFO,PCRYPT_ALGORITHM_IDENTIFIER,PSYSTEMTIME,PSYSTEMTIME,PCERT_EXTENSIONS);
+static BOOL (WINAPI *pCertGetValidUsages)(DWORD,PCCERT_CONTEXT*,int*,LPSTR*,DWORD*);
+static BOOL (WINAPI *pCryptAcquireCertificatePrivateKey)(PCCERT_CONTEXT,DWORD,void*,HCRYPTPROV_OR_NCRYPT_KEY_HANDLE*,DWORD*,BOOL*);
+static BOOL (WINAPI *pCryptEncodeObjectEx)(DWORD,LPCSTR,const void*,DWORD,PCRYPT_ENCODE_PARA,void*,DWORD*);
 static BOOL (WINAPI * pCryptVerifyCertificateSignatureEx)
                         (HCRYPTPROV, DWORD, DWORD, void *, DWORD, void *, DWORD, void *);
 
@@ -45,6 +50,11 @@ static void init_function_pointers(void)
     if(!p ## func) \
       trace("GetProcAddress(%s) failed\n", #func);
 
+    GET_PROC(hCrypt32, CertAddStoreToCollection)
+    GET_PROC(hCrypt32, CertCreateSelfSignCertificate)
+    GET_PROC(hCrypt32, CertGetValidUsages)
+    GET_PROC(hCrypt32, CryptAcquireCertificatePrivateKey)
+    GET_PROC(hCrypt32, CryptEncodeObjectEx)
     GET_PROC(hCrypt32, CryptVerifyCertificateSignatureEx)
 
     GET_PROC(hAdvapi32, CryptAcquireContextW)
@@ -256,10 +266,10 @@ static void testAddCert(void)
     collection = CertOpenStore(CERT_STORE_PROV_COLLECTION, 0, 0,
      CERT_STORE_CREATE_NEW_FLAG, NULL);
     ok(collection != NULL, "CertOpenStore failed: %08x\n", GetLastError());
-    if (collection)
+    if (collection && pCertAddStoreToCollection)
     {
         /* Add store to the collection, but disable updates */
-        CertAddStoreToCollection(collection, store, 0, 0);
+        pCertAddStoreToCollection(collection, store, 0, 0);
 
         context = CertCreateCertificateContext(X509_ASN_ENCODING, bigCert2,
          sizeof(bigCert2));
@@ -1587,6 +1597,11 @@ static void testVerifyCertSig(HCRYPTPROV csp, const CRYPT_DATA_BLOB *toBeSigned,
         skip("no CryptVerifyCertificateSignatureEx support\n");
         return;
     }
+    if (!pCryptEncodeObjectEx)
+    {
+        skip("no CryptEncodeObjectEx support\n");
+        return;
+    }
     ret = pCryptVerifyCertificateSignatureEx(0, 0, 0, NULL, 0, NULL, 0, NULL);
     ok(!ret && GetLastError() == E_INVALIDARG,
      "Expected E_INVALIDARG, got %08x\n", GetLastError());
@@ -1608,7 +1623,7 @@ static void testVerifyCertSig(HCRYPTPROV csp, const CRYPT_DATA_BLOB *toBeSigned,
     info.Signature.cbData = sigLen;
     info.Signature.pbData = (BYTE *)sig;
     info.Signature.cUnusedBits = 0;
-    ret = CryptEncodeObjectEx(X509_ASN_ENCODING, X509_CERT, &info,
+    ret = pCryptEncodeObjectEx(X509_ASN_ENCODING, X509_CERT, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&cert, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (cert)
@@ -1791,13 +1806,19 @@ static void testCreateSelfSignCert(void)
     HCRYPTKEY key;
     CRYPT_KEY_PROV_INFO info;
 
+    if (!pCertCreateSelfSignCertificate)
+    {
+        skip("CertCreateSelfSignCertificate() is not available\n");
+        return;
+    }
+
     /* This crashes:
-    context = CertCreateSelfSignCertificate(0, NULL, 0, NULL, NULL, NULL, NULL,
+    context = pCertCreateSelfSignCertificate(0, NULL, 0, NULL, NULL, NULL, NULL,
      NULL);
      * Calling this with no first parameter creates a new key container, which
      * lasts beyond the test, so I don't test that.  Nb: the generated key
      * name is a GUID.
-    context = CertCreateSelfSignCertificate(0, &name, 0, NULL, NULL, NULL, NULL,
+    context = pCertCreateSelfSignCertificate(0, &name, 0, NULL, NULL, NULL, NULL,
      NULL);
      */
 
@@ -1808,7 +1829,7 @@ static void testCreateSelfSignCert(void)
      CRYPT_NEWKEYSET);
     ok(ret, "CryptAcquireContext failed: %08x\n", GetLastError());
 
-    context = CertCreateSelfSignCertificate(csp, &name, 0, NULL, NULL, NULL,
+    context = pCertCreateSelfSignCertificate(csp, &name, 0, NULL, NULL, NULL,
      NULL, NULL);
     ok(!context && GetLastError() == NTE_NO_KEY,
      "Expected NTE_NO_KEY, got %08x\n", GetLastError());
@@ -1816,7 +1837,7 @@ static void testCreateSelfSignCert(void)
     ok(ret, "CryptGenKey failed: %08x\n", GetLastError());
     if (ret)
     {
-        context = CertCreateSelfSignCertificate(csp, &name, 0, NULL, NULL, NULL,
+        context = pCertCreateSelfSignCertificate(csp, &name, 0, NULL, NULL, NULL,
          NULL, NULL);
         ok(context != NULL, "CertCreateSelfSignCertificate failed: %08x\n",
          GetLastError());
@@ -1868,7 +1889,7 @@ static void testCreateSelfSignCert(void)
     info.dwKeySpec = AT_KEYEXCHANGE;
     info.pwszProvName = (LPWSTR) MS_DEF_PROV_W;
     info.pwszContainerName = cspNameW;
-    context = CertCreateSelfSignCertificate(0, &name, 0, &info, NULL, NULL,
+    context = pCertCreateSelfSignCertificate(0, &name, 0, &info, NULL, NULL,
         NULL, NULL);
     ok(context != NULL, "CertCreateSelfSignCertificate failed: %08x\n",
         GetLastError());
@@ -2220,14 +2241,20 @@ static void testGetValidUsages(void)
     LPSTR *oids = NULL;
     PCCERT_CONTEXT contexts[3];
 
+    if (!pCertGetValidUsages)
+    {
+        skip("CertGetValidUsages() is not available\n");
+        return;
+    }
+
     /* Crash
-    ret = CertGetValidUsages(0, NULL, NULL, NULL, NULL);
-    ret = CertGetValidUsages(0, NULL, NULL, NULL, &size);
+    ret = pCertGetValidUsages(0, NULL, NULL, NULL, NULL);
+    ret = pCertGetValidUsages(0, NULL, NULL, NULL, &size);
      */
     contexts[0] = NULL;
     numOIDs = size = 0xdeadbeef;
     SetLastError(0xdeadbeef);
-    ret = CertGetValidUsages(1, &contexts[0], &numOIDs, NULL, &size);
+    ret = pCertGetValidUsages(1, &contexts[0], &numOIDs, NULL, &size);
     ok(ret, "CertGetValidUsages failed: %d\n", GetLastError());
     ok(numOIDs == -1, "Expected -1, got %d\n", numOIDs);
     ok(size == 0, "Expected size 0, got %d\n", size);
@@ -2238,16 +2265,16 @@ static void testGetValidUsages(void)
     contexts[2] = CertCreateCertificateContext(X509_ASN_ENCODING,
      cert2WithUsage, sizeof(cert2WithUsage));
     numOIDs = size = 0xdeadbeef;
-    ret = CertGetValidUsages(0, NULL, &numOIDs, NULL, &size);
+    ret = pCertGetValidUsages(0, NULL, &numOIDs, NULL, &size);
     ok(ret, "CertGetValidUsages failed: %08x\n", GetLastError());
     ok(numOIDs == -1, "Expected -1, got %d\n", numOIDs);
     ok(size == 0, "Expected size 0, got %d\n", size);
     numOIDs = size = 0xdeadbeef;
-    ret = CertGetValidUsages(1, contexts, &numOIDs, NULL, &size);
+    ret = pCertGetValidUsages(1, contexts, &numOIDs, NULL, &size);
     ok(ret, "CertGetValidUsages failed: %08x\n", GetLastError());
     ok(numOIDs == -1, "Expected -1, got %d\n", numOIDs);
     ok(size == 0, "Expected size 0, got %d\n", size);
-    ret = CertGetValidUsages(1, &contexts[1], &numOIDs, NULL, &size);
+    ret = pCertGetValidUsages(1, &contexts[1], &numOIDs, NULL, &size);
     ok(ret, "CertGetValidUsages failed: %08x\n", GetLastError());
     ok(numOIDs == 3, "Expected 3, got %d\n", numOIDs);
     ok(size, "Expected non-zero size\n");
@@ -2258,10 +2285,10 @@ static void testGetValidUsages(void)
         DWORD smallSize = 1;
 
         SetLastError(0xdeadbeef);
-        ret = CertGetValidUsages(1, &contexts[1], &numOIDs, oids, &smallSize);
+        ret = pCertGetValidUsages(1, &contexts[1], &numOIDs, oids, &smallSize);
         ok(!ret && GetLastError() == ERROR_MORE_DATA,
          "Expected ERROR_MORE_DATA, got %d\n", GetLastError());
-        ret = CertGetValidUsages(1, &contexts[1], &numOIDs, oids, &size);
+        ret = pCertGetValidUsages(1, &contexts[1], &numOIDs, oids, &size);
         ok(ret, "CertGetValidUsages failed: %08x\n", GetLastError());
         for (i = 0; i < numOIDs; i++)
             ok(!lstrcmpA(oids[i], expectedOIDs[i]), "unexpected OID %s\n",
@@ -2270,11 +2297,11 @@ static void testGetValidUsages(void)
     }
     numOIDs = size = 0xdeadbeef;
     /* Oddly enough, this crashes when the number of contexts is not 1:
-    ret = CertGetValidUsages(2, contexts, &numOIDs, NULL, &size);
+    ret = pCertGetValidUsages(2, contexts, &numOIDs, NULL, &size);
      * but setting size to 0 allows it to succeed:
      */
     size = 0;
-    ret = CertGetValidUsages(2, contexts, &numOIDs, NULL, &size);
+    ret = pCertGetValidUsages(2, contexts, &numOIDs, NULL, &size);
     ok(ret, "CertGetValidUsages failed: %08x\n", GetLastError());
     ok(numOIDs == 3, "Expected 3, got %d\n", numOIDs);
     ok(size, "Expected non-zero size\n");
@@ -2283,7 +2310,7 @@ static void testGetValidUsages(void)
     {
         int i;
 
-        ret = CertGetValidUsages(1, &contexts[1], &numOIDs, oids, &size);
+        ret = pCertGetValidUsages(1, &contexts[1], &numOIDs, oids, &size);
         ok(ret, "CertGetValidUsages failed: %08x\n", GetLastError());
         for (i = 0; i < numOIDs; i++)
             ok(!lstrcmpA(oids[i], expectedOIDs[i]), "unexpected OID %s\n",
@@ -2292,7 +2319,7 @@ static void testGetValidUsages(void)
     }
     numOIDs = 0xdeadbeef;
     size = 0;
-    ret = CertGetValidUsages(1, &contexts[2], &numOIDs, NULL, &size);
+    ret = pCertGetValidUsages(1, &contexts[2], &numOIDs, NULL, &size);
     ok(ret, "CertGetValidUsages failed: %08x\n", GetLastError());
     ok(numOIDs == 2, "Expected 2, got %d\n", numOIDs);
     ok(size, "Expected non-zero size\n");
@@ -2301,7 +2328,7 @@ static void testGetValidUsages(void)
     {
         int i;
 
-        ret = CertGetValidUsages(1, &contexts[2], &numOIDs, oids, &size);
+        ret = pCertGetValidUsages(1, &contexts[2], &numOIDs, oids, &size);
         ok(ret, "CertGetValidUsages failed: %08x\n", GetLastError());
         for (i = 0; i < numOIDs; i++)
             ok(!lstrcmpA(oids[i], expectedOIDs2[i]), "unexpected OID %s\n",
@@ -2310,7 +2337,7 @@ static void testGetValidUsages(void)
     }
     numOIDs = 0xdeadbeef;
     size = 0;
-    ret = CertGetValidUsages(3, contexts, &numOIDs, NULL, &size);
+    ret = pCertGetValidUsages(3, contexts, &numOIDs, NULL, &size);
     ok(ret, "CertGetValidUsages failed: %08x\n", GetLastError());
     ok(numOIDs == 2, "Expected 2, got %d\n", numOIDs);
     ok(size, "Expected non-zero size\n");
@@ -2319,7 +2346,7 @@ static void testGetValidUsages(void)
     {
         int i;
 
-        ret = CertGetValidUsages(3, contexts, &numOIDs, oids, &size);
+        ret = pCertGetValidUsages(3, contexts, &numOIDs, oids, &size);
         ok(ret, "CertGetValidUsages failed: %08x\n", GetLastError());
         for (i = 0; i < numOIDs; i++)
             ok(!lstrcmpA(oids[i], expectedOIDs2[i]), "unexpected OID %s\n",
@@ -2679,6 +2706,12 @@ static void testAcquireCertPrivateKey(void)
     HCRYPTKEY key;
     WCHAR ms_def_prov_w[MAX_PATH];
 
+    if (!pCryptAcquireCertificatePrivateKey)
+    {
+        skip("CryptAcquireCertificatePrivateKey() is not available\n");
+        return;
+    }
+
     lstrcpyW(ms_def_prov_w, MS_DEF_PROV_W);
 
     keyProvInfo.pwszContainerName = cspNameW;
@@ -2696,28 +2729,28 @@ static void testAcquireCertPrivateKey(void)
      sizeof(selfSignedCert));
 
     /* Crash
-    ret = CryptAcquireCertificatePrivateKey(NULL, 0, NULL, NULL, NULL, NULL);
-    ret = CryptAcquireCertificatePrivateKey(NULL, 0, NULL, NULL, NULL,
+    ret = pCryptAcquireCertificatePrivateKey(NULL, 0, NULL, NULL, NULL, NULL);
+    ret = pCryptAcquireCertificatePrivateKey(NULL, 0, NULL, NULL, NULL,
      &callerFree);
-    ret = CryptAcquireCertificatePrivateKey(NULL, 0, NULL, NULL, &keySpec,
+    ret = pCryptAcquireCertificatePrivateKey(NULL, 0, NULL, NULL, &keySpec,
      NULL);
-    ret = CryptAcquireCertificatePrivateKey(NULL, 0, NULL, &csp, NULL, NULL);
-    ret = CryptAcquireCertificatePrivateKey(NULL, 0, NULL, &csp, &keySpec,
+    ret = pCryptAcquireCertificatePrivateKey(NULL, 0, NULL, &csp, NULL, NULL);
+    ret = pCryptAcquireCertificatePrivateKey(NULL, 0, NULL, &csp, &keySpec,
      &callerFree);
-    ret = CryptAcquireCertificatePrivateKey(cert, 0, NULL, NULL, NULL, NULL);
+    ret = pCryptAcquireCertificatePrivateKey(cert, 0, NULL, NULL, NULL, NULL);
      */
 
     /* Missing private key */
-    ret = CryptAcquireCertificatePrivateKey(cert, 0, NULL, &csp, NULL, NULL);
+    ret = pCryptAcquireCertificatePrivateKey(cert, 0, NULL, &csp, NULL, NULL);
     ok(!ret && GetLastError() == CRYPT_E_NO_KEY_PROPERTY,
      "Expected CRYPT_E_NO_KEY_PROPERTY, got %08x\n", GetLastError());
-    ret = CryptAcquireCertificatePrivateKey(cert, 0, NULL, &csp, &keySpec,
+    ret = pCryptAcquireCertificatePrivateKey(cert, 0, NULL, &csp, &keySpec,
      &callerFree);
     ok(!ret && GetLastError() == CRYPT_E_NO_KEY_PROPERTY,
      "Expected CRYPT_E_NO_KEY_PROPERTY, got %08x\n", GetLastError());
     CertSetCertificateContextProperty(cert, CERT_KEY_PROV_INFO_PROP_ID, 0,
      &keyProvInfo);
-    ret = CryptAcquireCertificatePrivateKey(cert, 0, NULL, &csp, &keySpec,
+    ret = pCryptAcquireCertificatePrivateKey(cert, 0, NULL, &csp, &keySpec,
      &callerFree);
     ok(!ret && GetLastError() == CRYPT_E_NO_KEY_PROPERTY,
      "Expected CRYPT_E_NO_KEY_PROPERTY, got %08x\n", GetLastError());
@@ -2733,20 +2766,20 @@ static void testAcquireCertPrivateKey(void)
         CERT_KEY_CONTEXT keyContext;
 
         /* Don't cache provider */
-        ret = CryptAcquireCertificatePrivateKey(cert, 0, NULL, &certCSP,
+        ret = pCryptAcquireCertificatePrivateKey(cert, 0, NULL, &certCSP,
          &keySpec, &callerFree);
         ok(ret, "CryptAcquireCertificatePrivateKey failed: %08x\n",
          GetLastError());
         ok(callerFree, "Expected callerFree to be TRUE\n");
         CryptReleaseContext(certCSP, 0);
-        ret = CryptAcquireCertificatePrivateKey(cert, 0, NULL, &certCSP,
+        ret = pCryptAcquireCertificatePrivateKey(cert, 0, NULL, &certCSP,
          NULL, NULL);
         ok(ret, "CryptAcquireCertificatePrivateKey failed: %08x\n",
          GetLastError());
         CryptReleaseContext(certCSP, 0);
 
         /* Use the key prov info's caching (there shouldn't be any) */
-        ret = CryptAcquireCertificatePrivateKey(cert,
+        ret = pCryptAcquireCertificatePrivateKey(cert,
          CRYPT_ACQUIRE_USE_PROV_INFO_FLAG, NULL, &certCSP, &keySpec,
          &callerFree);
         ok(ret, "CryptAcquireCertificatePrivateKey failed: %08x\n",
@@ -2755,7 +2788,7 @@ static void testAcquireCertPrivateKey(void)
         CryptReleaseContext(certCSP, 0);
 
         /* Cache it (and check that it's cached) */
-        ret = CryptAcquireCertificatePrivateKey(cert,
+        ret = pCryptAcquireCertificatePrivateKey(cert,
          CRYPT_ACQUIRE_CACHE_FLAG, NULL, &certCSP, &keySpec, &callerFree);
         ok(ret, "CryptAcquireCertificatePrivateKey failed: %08x\n",
          GetLastError());
@@ -2775,7 +2808,7 @@ static void testAcquireCertPrivateKey(void)
         CertSetCertificateContextProperty(cert, CERT_KEY_PROV_INFO_PROP_ID, 0,
          &keyProvInfo);
         /* Now use the key prov info's caching */
-        ret = CryptAcquireCertificatePrivateKey(cert,
+        ret = pCryptAcquireCertificatePrivateKey(cert,
          CRYPT_ACQUIRE_USE_PROV_INFO_FLAG, NULL, &certCSP, &keySpec,
          &callerFree);
         ok(ret, "CryptAcquireCertificatePrivateKey failed: %08x\n",
@@ -2808,7 +2841,7 @@ static void testAcquireCertPrivateKey(void)
             ok(size == sizeof(exportedPublicKeyBlob), "Unexpected size %d\n",
              size);
             ok(!memcmp(buf, exportedPublicKeyBlob, size), "Unexpected value\n");
-            ret = CryptEncodeObjectEx(X509_ASN_ENCODING, RSA_CSP_PUBLICKEYBLOB,
+            ret = pCryptEncodeObjectEx(X509_ASN_ENCODING, RSA_CSP_PUBLICKEYBLOB,
              buf, CRYPT_ENCODE_ALLOC_FLAG, NULL, &encodedKey, &size);
             ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
             if (ret)
diff --git a/dlls/crypt32/tests/chain.c b/dlls/crypt32/tests/chain.c
index 0257c3e..91cae47 100644
--- a/dlls/crypt32/tests/chain.c
+++ b/dlls/crypt32/tests/chain.c
@@ -52,6 +52,13 @@ static const BYTE selfSignedCert[] = {
  0x0a, 0x8c, 0xb4, 0x5c, 0x34, 0x78, 0xe0, 0x3c, 0x9c, 0xe9, 0xf3, 0x30, 0x9f,
  0xa8, 0x76, 0x57, 0x92, 0x36 };
 
+static BOOL (WINAPI *pCertCreateCertificateChainEngine)(PCERT_CHAIN_ENGINE_CONFIG,HCERTCHAINENGINE*);
+static BOOL (WINAPI *pCertGetCertificateChain)(HCERTCHAINENGINE,PCCERT_CONTEXT,LPFILETIME,HCERTSTORE,PCERT_CHAIN_PARA,DWORD,LPVOID,PCCERT_CHAIN_CONTEXT*);
+static VOID (WINAPI *pCertFreeCertificateChain)(PCCERT_CHAIN_CONTEXT);
+static VOID (WINAPI *pCertFreeCertificateChainEngine)(HCERTCHAINENGINE);
+static BOOL (WINAPI *pCertVerifyCertificateChainPolicy)(LPCSTR,PCCERT_CHAIN_CONTEXT,PCERT_CHAIN_POLICY_PARA,PCERT_CHAIN_POLICY_STATUS);
+
+
 static void testCreateCertChainEngine(void)
 {
     BOOL ret;
@@ -59,43 +66,49 @@ static void testCreateCertChainEngine(void)
     HCERTCHAINENGINE engine;
     HCERTSTORE store;
 
+    if (!pCertCreateCertificateChainEngine || !pCertFreeCertificateChainEngine)
+    {
+        skip("Cert*CertificateChainEngine() functions are not available\n");
+        return;
+    }
+
     /* Crash
-    ret = CertCreateCertificateChainEngine(NULL, NULL);
-    ret = CertCreateCertificateChainEngine(NULL, &engine);
+    ret = pCertCreateCertificateChainEngine(NULL, NULL);
+    ret = pCertCreateCertificateChainEngine(NULL, &engine);
      */
-    ret = CertCreateCertificateChainEngine(&config, NULL);
+    ret = pCertCreateCertificateChainEngine(&config, NULL);
     ok(!ret && GetLastError() == E_INVALIDARG,
      "Expected E_INVALIDARG, got %08x\n", GetLastError());
-    ret = CertCreateCertificateChainEngine(&config, &engine);
+    ret = pCertCreateCertificateChainEngine(&config, &engine);
     ok(!ret && GetLastError() == E_INVALIDARG,
      "Expected E_INVALIDARG, got %08x\n", GetLastError());
     /* Crashes
     config.cbSize = sizeof(config);
-    ret = CertCreateCertificateChainEngine(&config, NULL);
+    ret = pCertCreateCertificateChainEngine(&config, NULL);
      */
     config.cbSize = sizeof(config);
-    ret = CertCreateCertificateChainEngine(&config, &engine);
+    ret = pCertCreateCertificateChainEngine(&config, &engine);
     ok(ret, "CertCreateCertificateChainEngine failed: %08x\n", GetLastError());
-    CertFreeCertificateChainEngine(engine);
+    pCertFreeCertificateChainEngine(engine);
     config.dwFlags = 0xff000000;
-    ret = CertCreateCertificateChainEngine(&config, &engine);
+    ret = pCertCreateCertificateChainEngine(&config, &engine);
     ok(ret, "CertCreateCertificateChainEngine failed: %08x\n", GetLastError());
-    CertFreeCertificateChainEngine(engine);
+    pCertFreeCertificateChainEngine(engine);
 
     /* Creating a cert with no root certs at all is allowed.. */
     store = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
      CERT_STORE_CREATE_NEW_FLAG, NULL);
     config.hRestrictedRoot = store;
-    ret = CertCreateCertificateChainEngine(&config, &engine);
+    ret = pCertCreateCertificateChainEngine(&config, &engine);
     ok(ret, "CertCreateCertificateChainEngine failed: %08x\n", GetLastError());
-    CertFreeCertificateChainEngine(engine);
+    pCertFreeCertificateChainEngine(engine);
 
     /* but creating one with a restricted root with a cert that isn't a member
      * of the Root store isn't allowed.
      */
     CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING, selfSignedCert,
      sizeof(selfSignedCert), CERT_STORE_ADD_ALWAYS, NULL);
-    ret = CertCreateCertificateChainEngine(&config, &engine);
+    ret = pCertCreateCertificateChainEngine(&config, &engine);
     ok(!ret && GetLastError() == CRYPT_E_NOT_FOUND,
      "Expected CRYPT_E_NOT_FOUND, got %08x\n", GetLastError());
 
@@ -1129,7 +1142,7 @@ static PCCERT_CHAIN_CONTEXT getChain(const CONST_BLOB_ARRAY *certArray,
             FILETIME fileTime;
 
             SystemTimeToFileTime(checkTime, &fileTime);
-            ret = CertGetCertificateChain(NULL, endCert, &fileTime,
+            ret = pCertGetCertificateChain(NULL, endCert, &fileTime,
              includeStore ? store : NULL, &chainPara, flags, NULL, &chain);
             if (todo & TODO_CHAIN)
                 todo_wine ok(ret, "Chain %d: CertGetCertificateChain failed: %08x\n",
@@ -1566,36 +1579,36 @@ static void testGetCertChain(void)
     DWORD i;
 
     /* Basic parameter checks */
-    ret = CertGetCertificateChain(NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL);
+    ret = pCertGetCertificateChain(NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL);
     ok(!ret && GetLastError() == E_INVALIDARG,
      "Expected E_INVALIDARG, got %08x\n", GetLastError());
-    ret = CertGetCertificateChain(NULL, NULL, NULL, NULL, NULL, 0, NULL,
+    ret = pCertGetCertificateChain(NULL, NULL, NULL, NULL, NULL, 0, NULL,
      &chain);
     ok(!ret && GetLastError() == E_INVALIDARG,
      "Expected E_INVALIDARG, got %08x\n", GetLastError());
     /* Crash
-    ret = CertGetCertificateChain(NULL, NULL, NULL, NULL, &para, 0, NULL, NULL);
-    ret = CertGetCertificateChain(NULL, NULL, NULL, NULL, &para, 0, NULL,
+    ret = pCertGetCertificateChain(NULL, NULL, NULL, NULL, &para, 0, NULL, NULL);
+    ret = pCertGetCertificateChain(NULL, NULL, NULL, NULL, &para, 0, NULL,
      &chain);
      */
     cert = CertCreateCertificateContext(X509_ASN_ENCODING, bigCert,
      sizeof(bigCert));
-    ret = CertGetCertificateChain(NULL, cert, NULL, NULL, NULL, 0, NULL, NULL);
+    ret = pCertGetCertificateChain(NULL, cert, NULL, NULL, NULL, 0, NULL, NULL);
     ok(!ret && GetLastError() == E_INVALIDARG,
      "Expected E_INVALIDARG, got %08x\n", GetLastError());
     /* Crash
-    ret = CertGetCertificateChain(NULL, cert, NULL, NULL, &para, 0, NULL, NULL);
+    ret = pCertGetCertificateChain(NULL, cert, NULL, NULL, &para, 0, NULL, NULL);
      */
 
     /* Tests with an invalid cert (one whose signature is bad) */
     SetLastError(0xdeadbeef);
-    ret = CertGetCertificateChain(NULL, cert, NULL, NULL, &para, 0, NULL,
+    ret = pCertGetCertificateChain(NULL, cert, NULL, NULL, &para, 0, NULL,
      &chain);
     ok(!ret && GetLastError() == ERROR_INVALID_DATA,
      "Expected ERROR_INVALID_DATA, got %d\n", GetLastError());
     para.cbSize = sizeof(para);
     SetLastError(0xdeadbeef);
-    ret = CertGetCertificateChain(NULL, cert, NULL, NULL, &para, 0, NULL,
+    ret = pCertGetCertificateChain(NULL, cert, NULL, NULL, &para, 0, NULL,
      &chain);
     ok(!ret && GetLastError() == ERROR_INVALID_DATA,
      "Expected ERROR_INVALID_DATA, got %d\n", GetLastError());
@@ -1609,7 +1622,7 @@ static void testGetCertChain(void)
         {
             checkChainStatus(chain, &chainCheck[i].status, chainCheck[i].todo,
              i);
-            CertFreeCertificateChain(chain);
+            pCertFreeCertificateChain(chain);
         }
     }
     for (i = 0; i < sizeof(chainCheckNoStore) / sizeof(chainCheckNoStore[0]);
@@ -1621,7 +1634,7 @@ static void testGetCertChain(void)
         {
             checkChainStatus(chain, &chainCheckNoStore[i].status,
              chainCheckNoStore[i].todo, i);
-            CertFreeCertificateChain(chain);
+            pCertFreeCertificateChain(chain);
         }
     }
 }
@@ -1737,7 +1750,7 @@ static void checkChainPolicyStatus(LPCSTR policy, ChainPolicyCheck *check,
     if (chain)
     {
         CERT_CHAIN_POLICY_STATUS policyStatus = { 0 };
-        BOOL ret = CertVerifyCertificateChainPolicy(policy, chain, NULL,
+        BOOL ret = pCertVerifyCertificateChainPolicy(policy, chain, NULL,
          &policyStatus);
 
         if (check->todo & TODO_POLICY)
@@ -1775,7 +1788,7 @@ static void checkChainPolicyStatus(LPCSTR policy, ChainPolicyCheck *check,
                  "%d: expected %d, got %d\n", testIndex,
                  check->status.lElementIndex, policyStatus.lElementIndex);
         }
-        CertFreeCertificateChain(chain);
+        pCertFreeCertificateChain(chain);
     }
 }
 
@@ -1789,34 +1802,40 @@ static void testVerifyCertChainPolicy(void)
     CERT_CHAIN_POLICY_PARA policyPara = { 0 };
     DWORD i;
 
+    if (!pCertVerifyCertificateChainPolicy)
+    {
+        skip("CertVerifyCertificateChainPolicy() is not available\n");
+        return;
+    }
+
     /* Crash
-    ret = CertVerifyCertificateChainPolicy(NULL, NULL, NULL, NULL);
-    ret = CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, NULL, NULL,
+    ret = pCertVerifyCertificateChainPolicy(NULL, NULL, NULL, NULL);
+    ret = pCertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, NULL, NULL,
      NULL);
-    ret = CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, NULL,
+    ret = pCertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, NULL,
      &chainPara, NULL);
      */
     SetLastError(0xdeadbeef);
-    ret = CertVerifyCertificateChainPolicy(NULL, NULL, NULL, &policyStatus);
+    ret = pCertVerifyCertificateChainPolicy(NULL, NULL, NULL, &policyStatus);
     ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
      "Expected ERROR_FILE_NOT_FOUND, got %08x\n", GetLastError());
     /* Crashes
-    ret = CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, NULL, NULL,
+    ret = pCertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, NULL, NULL,
      &policyStatus);
      */
     cert = CertCreateCertificateContext(X509_ASN_ENCODING, selfSignedCert,
      sizeof(selfSignedCert));
-    CertGetCertificateChain(NULL, cert, NULL, NULL, &chainPara, 0, NULL,
+    pCertGetCertificateChain(NULL, cert, NULL, NULL, &chainPara, 0, NULL,
      &chain);
     /* Crash
-    ret = CertVerifyCertificateChainPolicy(NULL, chain, NULL, NULL);
-    ret = CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, chain, NULL,
+    ret = pCertVerifyCertificateChainPolicy(NULL, chain, NULL, NULL);
+    ret = pCertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, chain, NULL,
      NULL);
-    ret = CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, chain,
+    ret = pCertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, chain,
      &chainPara, NULL);
      */
     /* Size of policy status is apparently ignored, as is pChainPolicyPara */
-    ret = CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, chain, NULL,
+    ret = pCertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, chain, NULL,
      &policyStatus);
     ok(ret, "CertVerifyCertificateChainPolicy failed: %08x\n", GetLastError());
     ok(policyStatus.dwError == CERT_E_UNTRUSTEDROOT,
@@ -1824,7 +1843,7 @@ static void testVerifyCertChainPolicy(void)
     ok(policyStatus.lChainIndex == 0 && policyStatus.lElementIndex == 0,
      "Expected both indexes 0, got %d, %d\n", policyStatus.lChainIndex,
      policyStatus.lElementIndex);
-    ret = CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, chain,
+    ret = pCertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, chain,
      &policyPara, &policyStatus);
     ok(ret, "CertVerifyCertificateChainPolicy failed: %08x\n", GetLastError());
     ok(policyStatus.dwError == CERT_E_UNTRUSTEDROOT,
@@ -1832,7 +1851,7 @@ static void testVerifyCertChainPolicy(void)
     ok(policyStatus.lChainIndex == 0 && policyStatus.lElementIndex == 0,
      "Expected both indexes 0, got %d, %d\n", policyStatus.lChainIndex,
      policyStatus.lElementIndex);
-    CertFreeCertificateChain(chain);
+    pCertFreeCertificateChain(chain);
     CertFreeCertificateContext(cert);
 
     for (i = 0;
@@ -1855,7 +1874,21 @@ static void testVerifyCertChainPolicy(void)
 
 START_TEST(chain)
 {
+    HMODULE hCrypt32 = GetModuleHandleA("crypt32.dll");
+    pCertCreateCertificateChainEngine = (void*)GetProcAddress(hCrypt32, "CertCreateCertificateChainEngine");
+    pCertGetCertificateChain = (void*)GetProcAddress(hCrypt32, "CertGetCertificateChain");
+    pCertFreeCertificateChain = (void*)GetProcAddress(hCrypt32, "CertFreeCertificateChain");
+    pCertFreeCertificateChainEngine = (void*)GetProcAddress(hCrypt32, "CertFreeCertificateChainEngine");
+    pCertVerifyCertificateChainPolicy = (void*)GetProcAddress(hCrypt32, "CertVerifyCertificateChainPolicy");
+
     testCreateCertChainEngine();
-    testVerifyCertChainPolicy();
-    testGetCertChain();
+    if (!pCertGetCertificateChain)
+    {
+        skip("CertGetCertificateChain() is not available\n");
+    }
+    else
+    {
+        testVerifyCertChainPolicy();
+        testGetCertChain();
+    }
 }
diff --git a/dlls/crypt32/tests/crl.c b/dlls/crypt32/tests/crl.c
index 7ecf6d4..3a65c7d 100644
--- a/dlls/crypt32/tests/crl.c
+++ b/dlls/crypt32/tests/crl.c
@@ -29,6 +29,7 @@
 
 #include "wine/test.h"
 
+
 static const BYTE bigCert[] = { 0x30, 0x7a, 0x02, 0x01, 0x01, 0x30, 0x02, 0x06,
  0x00, 0x30, 0x15, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13,
  0x0a, 0x4a, 0x75, 0x61, 0x6e, 0x20, 0x4c, 0x61, 0x6e, 0x67, 0x00, 0x30, 0x22,
@@ -76,11 +77,15 @@ static const BYTE signedCRL[] = { 0x30, 0x45, 0x30, 0x2c, 0x30, 0x02, 0x06,
  0x30, 0x5a, 0x30, 0x02, 0x06, 0x00, 0x03, 0x11, 0x00, 0x0f, 0x0e, 0x0d, 0x0c,
  0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
 
+static BOOL (WINAPI *pCertFindCertificateInCRL)(PCCERT_CONTEXT,PCCRL_CONTEXT,DWORD,void*,PCRL_ENTRY*);
+static PCCRL_CONTEXT (WINAPI *pCertFindCRLInStore)(HCERTSTORE,DWORD,DWORD,DWORD,const void*,PCCRL_CONTEXT);
 static BOOL (WINAPI *pCertIsValidCRLForCertificate)(PCCERT_CONTEXT, PCCRL_CONTEXT, DWORD, void*);
 
 static void init_function_pointers(void)
 {
     HMODULE hdll = GetModuleHandleA("crypt32.dll");
+    pCertFindCertificateInCRL = (void*)GetProcAddress(hdll, "CertFindCertificateInCRL");
+    pCertFindCRLInStore = (void*)GetProcAddress(hdll, "CertFindCRLInStore");
     pCertIsValidCRLForCertificate = (void*)GetProcAddress(hdll, "CertIsValidCRLForCertificate");
 }
 
@@ -205,33 +210,38 @@ static void testFindCRL(void)
     BOOL ret;
 
     if (!store) return;
+    if (!pCertFindCRLInStore)
+    {
+        skip("CertFindCRLInStore() is not available\n");
+        return;
+    }
 
     ret = CertAddEncodedCRLToStore(store, X509_ASN_ENCODING, signedCRL,
      sizeof(signedCRL), CERT_STORE_ADD_ALWAYS, NULL);
     ok(ret, "CertAddEncodedCRLToStore failed: %08x\n", GetLastError());
 
     /* Crashes
-    context = CertFindCRLInStore(NULL, 0, 0, 0, NULL, NULL);
+    context = pCertFindCRLInStore(NULL, 0, 0, 0, NULL, NULL);
      */
 
     /* Find any context */
-    context = CertFindCRLInStore(store, 0, 0, CRL_FIND_ANY, NULL, NULL);
+    context = pCertFindCRLInStore(store, 0, 0, CRL_FIND_ANY, NULL, NULL);
     ok(context != NULL, "Expected a context\n");
     if (context)
         CertFreeCRLContext(context);
     /* Bogus flags are ignored */
-    context = CertFindCRLInStore(store, 0, 1234, CRL_FIND_ANY, NULL, NULL);
+    context = pCertFindCRLInStore(store, 0, 1234, CRL_FIND_ANY, NULL, NULL);
     ok(context != NULL, "Expected a context\n");
     if (context)
         CertFreeCRLContext(context);
     /* CRL encoding type is ignored too */
-    context = CertFindCRLInStore(store, 1234, 0, CRL_FIND_ANY, NULL, NULL);
+    context = pCertFindCRLInStore(store, 1234, 0, CRL_FIND_ANY, NULL, NULL);
     ok(context != NULL, "Expected a context\n");
     if (context)
         CertFreeCRLContext(context);
 
     /* This appears to match any cert */
-    context = CertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_BY, NULL, NULL);
+    context = pCertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_BY, NULL, NULL);
     ok(context != NULL, "Expected a context\n");
     if (context)
         CertFreeCRLContext(context);
@@ -241,7 +251,7 @@ static void testFindCRL(void)
      sizeof(bigCert2));
     ok(cert != NULL, "CertCreateCertificateContext failed: %08x\n",
      GetLastError());
-    context = CertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_BY, cert, NULL);
+    context = pCertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_BY, cert, NULL);
     ok(context == NULL, "Expected no matching context\n");
     CertFreeCertificateContext(cert);
 
@@ -250,7 +260,7 @@ static void testFindCRL(void)
      sizeof(bigCert));
     ok(cert != NULL, "CertCreateCertificateContext failed: %08x\n",
      GetLastError());
-    context = CertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_BY, cert, NULL);
+    context = pCertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_BY, cert, NULL);
     ok(context != NULL, "Expected a context\n");
     if (context)
         CertFreeCRLContext(context);
@@ -600,31 +610,37 @@ static void testFindCertInCRL(void)
     PCCRL_CONTEXT crl;
     PCRL_ENTRY entry;
 
+    if (!pCertFindCertificateInCRL)
+    {
+        skip("CertFindCertificateInCRL() is not available\n");
+        return;
+    }
+
     cert = CertCreateCertificateContext(X509_ASN_ENCODING, bigCert,
      sizeof(bigCert));
     ok(cert != NULL, "CertCreateCertificateContext failed: %08x\n",
      GetLastError());
 
     /* Crash
-    ret = CertFindCertificateInCRL(NULL, NULL, 0, NULL, NULL);
-    ret = CertFindCertificateInCRL(NULL, crl, 0, NULL, NULL);
-    ret = CertFindCertificateInCRL(cert, NULL, 0, NULL, NULL);
-    ret = CertFindCertificateInCRL(cert, crl, 0, NULL, NULL);
-    ret = CertFindCertificateInCRL(NULL, NULL, 0, NULL, &entry);
-    ret = CertFindCertificateInCRL(NULL, crl, 0, NULL, &entry);
-    ret = CertFindCertificateInCRL(cert, NULL, 0, NULL, &entry);
+    ret = pCertFindCertificateInCRL(NULL, NULL, 0, NULL, NULL);
+    ret = pCertFindCertificateInCRL(NULL, crl, 0, NULL, NULL);
+    ret = pCertFindCertificateInCRL(cert, NULL, 0, NULL, NULL);
+    ret = pCertFindCertificateInCRL(cert, crl, 0, NULL, NULL);
+    ret = pCertFindCertificateInCRL(NULL, NULL, 0, NULL, &entry);
+    ret = pCertFindCertificateInCRL(NULL, crl, 0, NULL, &entry);
+    ret = pCertFindCertificateInCRL(cert, NULL, 0, NULL, &entry);
      */
 
     crl = CertCreateCRLContext(X509_ASN_ENCODING, verisignCRL,
      sizeof(verisignCRL));
-    ret = CertFindCertificateInCRL(cert, crl, 0, NULL, &entry);
+    ret = pCertFindCertificateInCRL(cert, crl, 0, NULL, &entry);
     ok(ret, "CertFindCertificateInCRL failed: %08x\n", GetLastError());
     ok(entry == NULL, "Expected not to find an entry in CRL\n");
     CertFreeCRLContext(crl);
 
     crl = CertCreateCRLContext(X509_ASN_ENCODING, v1CRLWithIssuerAndEntry,
      sizeof(v1CRLWithIssuerAndEntry));
-    ret = CertFindCertificateInCRL(cert, crl, 0, NULL, &entry);
+    ret = pCertFindCertificateInCRL(cert, crl, 0, NULL, &entry);
     ok(ret, "CertFindCertificateInCRL failed: %08x\n", GetLastError());
     ok(entry != NULL, "Expected to find an entry in CRL\n");
     CertFreeCRLContext(crl);
@@ -632,7 +648,7 @@ static void testFindCertInCRL(void)
     /* Entry found even though CRL issuer doesn't match cert issuer */
     crl = CertCreateCRLContext(X509_ASN_ENCODING, crlWithDifferentIssuer,
      sizeof(crlWithDifferentIssuer));
-    ret = CertFindCertificateInCRL(cert, crl, 0, NULL, &entry);
+    ret = pCertFindCertificateInCRL(cert, crl, 0, NULL, &entry);
     ok(ret, "CertFindCertificateInCRL failed: %08x\n", GetLastError());
     ok(entry != NULL, "Expected to find an entry in CRL\n");
     CertFreeCRLContext(crl);
diff --git a/dlls/crypt32/tests/encode.c b/dlls/crypt32/tests/encode.c
index a06531c..f55be1c 100644
--- a/dlls/crypt32/tests/encode.c
+++ b/dlls/crypt32/tests/encode.c
@@ -26,6 +26,10 @@
 
 #include "wine/test.h"
 
+
+static BOOL (WINAPI *pCryptDecodeObjectEx)(DWORD,LPCSTR,const BYTE*,DWORD,DWORD,PCRYPT_DECODE_PARA,void*,DWORD*);
+static BOOL (WINAPI *pCryptEncodeObjectEx)(DWORD,LPCSTR,const void*,DWORD,PCRYPT_ENCODE_PARA,void*,DWORD*);
+
 struct encodedInt
 {
     int val;
@@ -90,28 +94,28 @@ static void test_encodeInt(DWORD dwEncoding)
     BYTE *buf = NULL;
 
     /* CryptEncodeObjectEx with NULL bufSize crashes..
-    ret = CryptEncodeObjectEx(3, X509_INTEGER, &ints[0].val, 0, NULL, NULL,
+    ret = pCryptEncodeObjectEx(3, X509_INTEGER, &ints[0].val, 0, NULL, NULL,
      NULL);
      */
     /* check bogus encoding */
-    ret = CryptEncodeObjectEx(0, X509_INTEGER, &ints[0].val, 0, NULL, NULL,
+    ret = pCryptEncodeObjectEx(0, X509_INTEGER, &ints[0].val, 0, NULL, NULL,
      &bufSize);
     ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
      "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
     /* check with NULL integer buffer.  Windows XP incorrectly returns an
      * NTSTATUS.
      */
-    ret = CryptEncodeObjectEx(dwEncoding, X509_INTEGER, NULL, 0, NULL, NULL,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_INTEGER, NULL, 0, NULL, NULL,
      &bufSize);
     ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
      "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
     for (i = 0; i < sizeof(ints) / sizeof(ints[0]); i++)
     {
         /* encode as normal integer */
-        ret = CryptEncodeObjectEx(dwEncoding, X509_INTEGER, &ints[i].val, 0,
+        ret = pCryptEncodeObjectEx(dwEncoding, X509_INTEGER, &ints[i].val, 0,
          NULL, NULL, &bufSize);
         ok(ret, "Expected success, got %d\n", GetLastError());
-        ret = CryptEncodeObjectEx(dwEncoding, X509_INTEGER, &ints[i].val,
+        ret = pCryptEncodeObjectEx(dwEncoding, X509_INTEGER, &ints[i].val,
          CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &bufSize);
         ok(ret, "CryptEncodeObjectEx failed: %d\n", GetLastError());
         if (buf)
@@ -127,10 +131,10 @@ static void test_encodeInt(DWORD dwEncoding)
         /* encode as multibyte integer */
         blob.cbData = sizeof(ints[i].val);
         blob.pbData = (BYTE *)&ints[i].val;
-        ret = CryptEncodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER, &blob,
+        ret = pCryptEncodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER, &blob,
          0, NULL, NULL, &bufSize);
         ok(ret, "Expected success, got %d\n", GetLastError());
-        ret = CryptEncodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER, &blob,
+        ret = pCryptEncodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER, &blob,
          CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &bufSize);
         ok(ret, "CryptEncodeObjectEx failed: %d\n", GetLastError());
         if (buf)
@@ -151,10 +155,10 @@ static void test_encodeInt(DWORD dwEncoding)
     {
         blob.cbData = strlen((const char*)bigInts[i].val);
         blob.pbData = (BYTE *)bigInts[i].val;
-        ret = CryptEncodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER, &blob,
+        ret = pCryptEncodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER, &blob,
          0, NULL, NULL, &bufSize);
         ok(ret, "Expected success, got %d\n", GetLastError());
-        ret = CryptEncodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER, &blob,
+        ret = pCryptEncodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER, &blob,
          CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &bufSize);
         ok(ret, "CryptEncodeObjectEx failed: %d\n", GetLastError());
         if (buf)
@@ -174,10 +178,10 @@ static void test_encodeInt(DWORD dwEncoding)
     {
         blob.cbData = strlen((const char*)bigUInts[i].val);
         blob.pbData = (BYTE*)bigUInts[i].val;
-        ret = CryptEncodeObjectEx(dwEncoding, X509_MULTI_BYTE_UINT, &blob,
+        ret = pCryptEncodeObjectEx(dwEncoding, X509_MULTI_BYTE_UINT, &blob,
          0, NULL, NULL, &bufSize);
         ok(ret, "Expected success, got %d\n", GetLastError());
-        ret = CryptEncodeObjectEx(dwEncoding, X509_MULTI_BYTE_UINT, &blob,
+        ret = pCryptEncodeObjectEx(dwEncoding, X509_MULTI_BYTE_UINT, &blob,
          CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &bufSize);
         ok(ret, "CryptEncodeObjectEx failed: %d\n", GetLastError());
         if (buf)
@@ -207,26 +211,26 @@ static void test_decodeInt(DWORD dwEncoding)
     BOOL ret;
 
     /* CryptDecodeObjectEx with NULL bufSize crashes..
-    ret = CryptDecodeObjectEx(3, X509_INTEGER, &ints[0].encoded, 
+    ret = pCryptDecodeObjectEx(3, X509_INTEGER, &ints[0].encoded, 
      ints[0].encoded[1] + 2, 0, NULL, NULL, NULL);
      */
     /* check bogus encoding */
-    ret = CryptDecodeObjectEx(3, X509_INTEGER, (BYTE *)&ints[0].encoded, 
+    ret = pCryptDecodeObjectEx(3, X509_INTEGER, (BYTE *)&ints[0].encoded, 
      ints[0].encoded[1] + 2, 0, NULL, NULL, &bufSize);
     ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
      "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
     /* check with NULL integer buffer */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_INTEGER, NULL, 0, 0, NULL, NULL,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_INTEGER, NULL, 0, 0, NULL, NULL,
      &bufSize);
     ok(!ret && GetLastError() == CRYPT_E_ASN1_EOD,
      "Expected CRYPT_E_ASN1_EOD, got %08x\n", GetLastError());
     /* check with a valid, but too large, integer */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_INTEGER, bigInt, bigInt[1] + 2,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_INTEGER, bigInt, bigInt[1] + 2,
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(!ret && GetLastError() == CRYPT_E_ASN1_LARGE,
      "Expected CRYPT_E_ASN1_LARGE, got %d\n", GetLastError());
     /* check with a DER-encoded string */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_INTEGER, testStr, testStr[1] + 2,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_INTEGER, testStr, testStr[1] + 2,
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
      "Expected CRYPT_E_ASN1_BADTAG, got %d\n", GetLastError());
@@ -234,12 +238,12 @@ static void test_decodeInt(DWORD dwEncoding)
     {
         /* When the output buffer is NULL, this always succeeds */
         SetLastError(0xdeadbeef);
-        ret = CryptDecodeObjectEx(dwEncoding, X509_INTEGER,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_INTEGER,
          ints[i].encoded, ints[i].encoded[1] + 2, 0, NULL, NULL,
          &bufSize);
         ok(ret && GetLastError() == NOERROR,
          "Expected success and NOERROR, got %d\n", GetLastError());
-        ret = CryptDecodeObjectEx(dwEncoding, X509_INTEGER,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_INTEGER,
          ints[i].encoded, ints[i].encoded[1] + 2,
          CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
         ok(ret, "CryptDecodeObjectEx failed: %d\n", GetLastError());
@@ -254,12 +258,12 @@ static void test_decodeInt(DWORD dwEncoding)
     }
     for (i = 0; i < sizeof(bigInts) / sizeof(bigInts[0]); i++)
     {
-        ret = CryptDecodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER,
          bigInts[i].encoded, bigInts[i].encoded[1] + 2, 0, NULL, NULL,
          &bufSize);
         ok(ret && GetLastError() == NOERROR,
          "Expected success and NOERROR, got %d\n", GetLastError());
-        ret = CryptDecodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER,
          bigInts[i].encoded, bigInts[i].encoded[1] + 2,
          CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
         ok(ret, "CryptDecodeObjectEx failed: %d\n", GetLastError());
@@ -279,12 +283,12 @@ static void test_decodeInt(DWORD dwEncoding)
     }
     for (i = 0; i < sizeof(bigUInts) / sizeof(bigUInts[0]); i++)
     {
-        ret = CryptDecodeObjectEx(dwEncoding, X509_MULTI_BYTE_UINT,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_MULTI_BYTE_UINT,
          bigUInts[i].encoded, bigUInts[i].encoded[1] + 2, 0, NULL, NULL,
          &bufSize);
         ok(ret && GetLastError() == NOERROR,
          "Expected success and NOERROR, got %d\n", GetLastError());
-        ret = CryptDecodeObjectEx(dwEncoding, X509_MULTI_BYTE_UINT,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_MULTI_BYTE_UINT,
          bigUInts[i].encoded, bigUInts[i].encoded[1] + 2,
          CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
         ok(ret, "CryptDecodeObjectEx failed: %d\n", GetLastError());
@@ -303,7 +307,7 @@ static void test_decodeInt(DWORD dwEncoding)
         }
     }
     /* Decode the value 1 with long-form length */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER, longForm,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER, longForm,
      sizeof(longForm), CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -312,7 +316,7 @@ static void test_decodeInt(DWORD dwEncoding)
         LocalFree(buf);
     }
     /* check with extra bytes at the end */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_INTEGER, extraBytes,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_INTEGER, extraBytes,
      sizeof(extraBytes), CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -326,7 +330,7 @@ static void test_decodeInt(DWORD dwEncoding)
      * Under XP it fails with CRYPT_E_ASN1_LARGE, which means there's a limit
      * on the size decoded, but in ME it fails with CRYPT_E_ASN1_EOD or crashes.
      * So this test unfortunately isn't useful.
-    ret = CryptDecodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER, tooBig,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER, tooBig,
      0x7fffffff, CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(!ret && GetLastError() == CRYPT_E_ASN1_LARGE,
      "Expected CRYPT_E_ASN1_LARGE, got %08x\n", GetLastError());
@@ -337,7 +341,7 @@ static void test_decodeInt(DWORD dwEncoding)
     if (0)
     {
     /* a large buffer isn't guaranteed to crash, it depends on memory allocation order */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER, bigBogus,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_MULTI_BYTE_INTEGER, bigBogus,
      0x01ffffff, CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
      "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
@@ -373,7 +377,7 @@ static void test_encodeEnumerated(DWORD dwEncoding)
             BYTE *buf = NULL;
             DWORD bufSize = 0;
 
-            ret = CryptEncodeObjectEx(dwEncoding, enumeratedTypes[i],
+            ret = pCryptEncodeObjectEx(dwEncoding, enumeratedTypes[i],
              &enums[j].val, CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
              &bufSize);
             ok(ret, "CryptEncodeObjectEx failed: %d\n", GetLastError());
@@ -406,7 +410,7 @@ static void test_decodeEnumerated(DWORD dwEncoding)
             DWORD bufSize = sizeof(int);
             int val;
 
-            ret = CryptDecodeObjectEx(dwEncoding, enumeratedTypes[i],
+            ret = pCryptDecodeObjectEx(dwEncoding, enumeratedTypes[i],
              enums[j].encoded, enums[j].encoded[1] + 2, 0, NULL,
              (BYTE *)&val, &bufSize);
             ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -434,7 +438,7 @@ static void testTimeEncoding(DWORD dwEncoding, LPCSTR structType,
 
     ret = SystemTimeToFileTime(&time->sysTime, &ft);
     ok(ret, "SystemTimeToFileTime failed: %d\n", GetLastError());
-    ret = CryptEncodeObjectEx(dwEncoding, structType, &ft,
+    ret = pCryptEncodeObjectEx(dwEncoding, structType, &ft,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     /* years other than 1950-2050 are not allowed for encodings other than
      * X509_CHOICE_OF_TIME.
@@ -505,7 +509,7 @@ static void testTimeDecoding(DWORD dwEncoding, LPCSTR structType,
     DWORD size = sizeof(ft);
     BOOL ret;
 
-    ret = CryptDecodeObjectEx(dwEncoding, structType, time->encodedTime,
+    ret = pCryptDecodeObjectEx(dwEncoding, structType, time->encodedTime,
      time->encodedTime[1] + 2, 0, NULL, &ft, &size);
     /* years other than 1950-2050 are not allowed for encodings other than
      * X509_CHOICE_OF_TIME.
@@ -616,7 +620,7 @@ static void test_decodeFiletime(DWORD dwEncoding)
     ret = SystemTimeToFileTime(&times[0].sysTime, &ft1);
     ok(ret, "SystemTimeToFileTime failed: %d\n", GetLastError());
     size = 1;
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CHOICE_OF_TIME,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CHOICE_OF_TIME,
      times[0].encodedTime, times[0].encodedTime[1] + 2, 0, NULL, &ft2, &size);
     ok(!ret && GetLastError() == ERROR_MORE_DATA,
      "Expected ERROR_MORE_DATA, got %d\n", GetLastError());
@@ -636,7 +640,7 @@ static void test_decodeFiletime(DWORD dwEncoding)
     for (i = 0; i < sizeof(bogusTimes) / sizeof(bogusTimes[0]); i++)
     {
         size = sizeof(ft1);
-        ret = CryptDecodeObjectEx(dwEncoding, X509_CHOICE_OF_TIME,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_CHOICE_OF_TIME,
          bogusTimes[i], bogusTimes[i][1] + 2, 0, NULL, &ft1, &size);
         ok(!ret && GetLastError() == CRYPT_E_ASN1_CORRUPT,
          "Expected CRYPT_E_ASN1_CORRUPT, got %08x\n", GetLastError());
@@ -726,14 +730,14 @@ static void test_encodeName(DWORD dwEncoding)
     BOOL ret;
 
     /* Test with NULL pvStructInfo */
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME, NULL,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME, NULL,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
      "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
     /* Test with empty CERT_NAME_INFO */
     info.cRDN = 0;
     info.rgRDN = NULL;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -744,7 +748,7 @@ static void test_encodeName(DWORD dwEncoding)
     }
     /* Test with bogus CERT_RDN */
     info.cRDN = 1;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
      "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
@@ -753,7 +757,7 @@ static void test_encodeName(DWORD dwEncoding)
     rdn.rgRDNAttr = NULL;
     info.cRDN = 1;
     info.rgRDN = &rdn;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -765,7 +769,7 @@ static void test_encodeName(DWORD dwEncoding)
     /* Test with bogus attr array */
     rdn.cRDNAttr = 1;
     rdn.rgRDNAttr = NULL;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
      "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
@@ -776,7 +780,7 @@ static void test_encodeName(DWORD dwEncoding)
     attrs[0].Value.pbData = (BYTE *)commonName;
     rdn.cRDNAttr = 1;
     rdn.rgRDNAttr = attrs;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret, "Expected failure, got success\n");
      */
@@ -793,7 +797,7 @@ static void test_encodeName(DWORD dwEncoding)
     attrs[1].Value.pbData = (BYTE *)surName;
     rdn.cRDNAttr = 2;
     rdn.rgRDNAttr = attrs;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -807,7 +811,7 @@ static void test_encodeName(DWORD dwEncoding)
     attrs[0].Value.pbData = (LPBYTE)twoRDNs;
     attrs[0].Value.cbData = sizeof(twoRDNs);
     rdn.cRDNAttr = 1;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -820,7 +824,7 @@ static void test_encodeName(DWORD dwEncoding)
     /* CERT_RDN_ANY_TYPE is too vague for X509_NAMEs, check the return */
     rdn.cRDNAttr = 1;
     attrs[0].dwValueType = CERT_RDN_ANY_TYPE;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == E_INVALIDARG,
      "Expected E_INVALIDARG, got %08x\n", GetLastError());
@@ -831,7 +835,7 @@ static void test_encodeName(DWORD dwEncoding)
     info.rgRDN = &rdn;
     buf = NULL;
     size = 0;
-    ret = CryptEncodeObjectEx(X509_ASN_ENCODING, X509_NAME, &info,
+    ret = pCryptEncodeObjectEx(X509_ASN_ENCODING, X509_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (ret)
@@ -867,14 +871,14 @@ static void test_encodeUnicodeName(DWORD dwEncoding)
     BOOL ret;
 
     /* Test with NULL pvStructInfo */
-    ret = CryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME, NULL,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME, NULL,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
      "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
     /* Test with empty CERT_NAME_INFO */
     info.cRDN = 0;
     info.rgRDN = NULL;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -894,7 +898,7 @@ static void test_encodeUnicodeName(DWORD dwEncoding)
     rdn.rgRDNAttr = attrs;
     info.cRDN = 1;
     info.rgRDN = &rdn;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == CRYPT_E_INVALID_PRINTABLE_STRING,
      "Expected CRYPT_E_INVALID_PRINTABLE_STRING, got %08x\n", GetLastError());
@@ -914,7 +918,7 @@ static void test_encodeUnicodeName(DWORD dwEncoding)
     rdn.rgRDNAttr = attrs;
     info.cRDN = 1;
     info.rgRDN = &rdn;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -928,7 +932,7 @@ static void test_encodeUnicodeName(DWORD dwEncoding)
     attrs[0].Value.pbData = (LPBYTE)twoRDNs;
     attrs[0].Value.cbData = sizeof(twoRDNs);
     rdn.cRDNAttr = 1;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -941,7 +945,7 @@ static void test_encodeUnicodeName(DWORD dwEncoding)
     /* Unicode names infer the type for CERT_RDN_ANY_TYPE */
     rdn.cRDNAttr = 1;
     attrs[0].dwValueType = CERT_RDN_ANY_TYPE;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     todo_wine ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -1028,7 +1032,7 @@ static void test_decodeName(DWORD dwEncoding)
 
     /* test empty name */
     bufSize = 0;
-    ret = CryptDecodeObjectEx(dwEncoding, X509_NAME, emptySequence,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_NAME, emptySequence,
      emptySequence[1] + 2,
      CRYPT_DECODE_ALLOC_FLAG | CRYPT_DECODE_SHARE_OID_STRING_FLAG, NULL,
      (BYTE *)&buf, &bufSize);
@@ -1045,7 +1049,7 @@ static void test_decodeName(DWORD dwEncoding)
         LocalFree(buf);
     }
     /* test empty name with indefinite-length encoding */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_NAME, emptyIndefiniteSequence,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_NAME, emptyIndefiniteSequence,
      sizeof(emptyIndefiniteSequence), CRYPT_DECODE_ALLOC_FLAG, NULL,
      (BYTE *)&buf, &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -1059,7 +1063,7 @@ static void test_decodeName(DWORD dwEncoding)
     }
     /* test empty RDN */
     bufSize = 0;
-    ret = CryptDecodeObjectEx(dwEncoding, X509_NAME, emptyRDNs,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_NAME, emptyRDNs,
      emptyRDNs[1] + 2,
      CRYPT_DECODE_ALLOC_FLAG | CRYPT_DECODE_SHARE_OID_STRING_FLAG, NULL,
      (BYTE *)&buf, &bufSize);
@@ -1075,7 +1079,7 @@ static void test_decodeName(DWORD dwEncoding)
     }
     /* test two RDN attrs */
     bufSize = 0;
-    ret = CryptDecodeObjectEx(dwEncoding, X509_NAME, twoRDNs,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_NAME, twoRDNs,
      twoRDNs[1] + 2,
      CRYPT_DECODE_ALLOC_FLAG | CRYPT_DECODE_SHARE_OID_STRING_FLAG, NULL,
      (BYTE *)&buf, &bufSize);
@@ -1099,13 +1103,13 @@ static void test_decodeName(DWORD dwEncoding)
     }
     /* test that two RDN attrs with extra bytes succeeds */
     bufSize = 0;
-    ret = CryptDecodeObjectEx(dwEncoding, X509_NAME, twoRDNsExtraBytes,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_NAME, twoRDNsExtraBytes,
      sizeof(twoRDNsExtraBytes), 0, NULL, NULL, &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
     /* And, a slightly more complicated name */
     buf = NULL;
     bufSize = 0;
-    ret = CryptDecodeObjectEx(X509_ASN_ENCODING, X509_NAME, encodedRDNAttrs,
+    ret = pCryptDecodeObjectEx(X509_ASN_ENCODING, X509_NAME, encodedRDNAttrs,
      sizeof(encodedRDNAttrs), CRYPT_DECODE_ALLOC_FLAG, NULL, &buf, &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
     if (ret)
@@ -1127,7 +1131,7 @@ static void test_decodeUnicodeName(DWORD dwEncoding)
 
     /* test empty name */
     bufSize = 0;
-    ret = CryptDecodeObjectEx(dwEncoding, X509_UNICODE_NAME, emptySequence,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_UNICODE_NAME, emptySequence,
      emptySequence[1] + 2,
      CRYPT_DECODE_ALLOC_FLAG | CRYPT_DECODE_SHARE_OID_STRING_FLAG, NULL,
      (BYTE *)&buf, &bufSize);
@@ -1143,7 +1147,7 @@ static void test_decodeUnicodeName(DWORD dwEncoding)
     }
     /* test empty RDN */
     bufSize = 0;
-    ret = CryptDecodeObjectEx(dwEncoding, X509_UNICODE_NAME, emptyRDNs,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_UNICODE_NAME, emptyRDNs,
      emptyRDNs[1] + 2,
      CRYPT_DECODE_ALLOC_FLAG | CRYPT_DECODE_SHARE_OID_STRING_FLAG, NULL,
      (BYTE *)&buf, &bufSize);
@@ -1159,7 +1163,7 @@ static void test_decodeUnicodeName(DWORD dwEncoding)
     }
     /* test two RDN attrs */
     bufSize = 0;
-    ret = CryptDecodeObjectEx(dwEncoding, X509_UNICODE_NAME, twoRDNsNoNull,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_UNICODE_NAME, twoRDNsNoNull,
      sizeof(twoRDNsNoNull),
      CRYPT_DECODE_ALLOC_FLAG | CRYPT_DECODE_SHARE_OID_STRING_FLAG, NULL,
      (BYTE *)&buf, &bufSize);
@@ -1265,7 +1269,7 @@ static void test_encodeNameValue(DWORD dwEncoding)
     value.dwValueType = CERT_RDN_ENCODED_BLOB;
     value.Value.pbData = printableCommonNameValue;
     value.Value.cbData = sizeof(printableCommonNameValue);
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME_VALUE, &value,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME_VALUE, &value,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -1278,7 +1282,7 @@ static void test_encodeNameValue(DWORD dwEncoding)
     }
     for (i = 0; i < sizeof(nameValues) / sizeof(nameValues[0]); i++)
     {
-        ret = CryptEncodeObjectEx(dwEncoding, X509_NAME_VALUE,
+        ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME_VALUE,
          &nameValues[i].value, CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
          &size);
         ok(ret, "Type %d: CryptEncodeObjectEx failed: %08x\n",
@@ -1303,7 +1307,7 @@ static void test_decodeNameValue(DWORD dwEncoding)
 
     for (i = 0; i < sizeof(nameValues) / sizeof(nameValues[0]); i++)
     {
-        ret = CryptDecodeObjectEx(dwEncoding, X509_NAME_VALUE,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_NAME_VALUE,
          nameValues[i].encoded, nameValues[i].encoded[1] + 2,
          CRYPT_DECODE_ALLOC_FLAG | CRYPT_DECODE_SHARE_OID_STRING_FLAG, NULL,
          (BYTE *)&buf, &bufSize);
@@ -1350,7 +1354,7 @@ static void test_encodeAltName(DWORD dwEncoding)
     char oid[] = "1.2.3";
 
     /* Test with empty info */
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -1361,13 +1365,13 @@ static void test_encodeAltName(DWORD dwEncoding)
     /* Test with an empty entry */
     info.cAltEntry = 1;
     info.rgAltEntry = &entry;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == E_INVALIDARG,
      "Expected E_INVALIDARG, got %08x\n", GetLastError());
     /* Test with an empty pointer */
     entry.dwAltNameChoice = CERT_ALT_NAME_URL;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -1377,7 +1381,7 @@ static void test_encodeAltName(DWORD dwEncoding)
     }
     /* Test with a real URL */
     U(entry).pwszURL = (LPWSTR)url;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -1387,7 +1391,7 @@ static void test_encodeAltName(DWORD dwEncoding)
     }
     /* Now with the URL containing an invalid IA5 char */
     U(entry).pwszURL = (LPWSTR)nihongoURL;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == CRYPT_E_INVALID_IA5_STRING,
      "Expected CRYPT_E_INVALID_IA5_STRING, got %08x\n", GetLastError());
@@ -1397,7 +1401,7 @@ static void test_encodeAltName(DWORD dwEncoding)
      GET_CERT_ALT_NAME_VALUE_ERR_INDEX(size));
     /* Now with the URL missing a scheme */
     U(entry).pwszURL = (LPWSTR)dnsName;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -1407,7 +1411,7 @@ static void test_encodeAltName(DWORD dwEncoding)
     }
     /* Now with a DNS name */
     entry.dwAltNameChoice = CERT_ALT_NAME_DNS_NAME;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -1420,7 +1424,7 @@ static void test_encodeAltName(DWORD dwEncoding)
     entry.dwAltNameChoice = CERT_ALT_NAME_IP_ADDRESS;
     U(entry).IPAddress.cbData = sizeof(localhost);
     U(entry).IPAddress.pbData = (LPBYTE)localhost;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -1431,7 +1435,7 @@ static void test_encodeAltName(DWORD dwEncoding)
     /* Test with OID */
     entry.dwAltNameChoice = CERT_ALT_NAME_REGISTERED_ID;
     U(entry).pszRegisteredID = oid;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -1443,7 +1447,7 @@ static void test_encodeAltName(DWORD dwEncoding)
     entry.dwAltNameChoice = CERT_ALT_NAME_DIRECTORY_NAME;
     U(entry).DirectoryName.cbData = sizeof(encodedCommonName);
     U(entry).DirectoryName.pbData = (LPBYTE)encodedCommonName;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -1465,18 +1469,18 @@ static void test_decodeAltName(DWORD dwEncoding)
     CERT_ALT_NAME_INFO *info;
 
     /* Test some bogus ones first */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME,
      unimplementedType, sizeof(unimplementedType), CRYPT_DECODE_ALLOC_FLAG,
      NULL, (BYTE *)&buf, &bufSize);
     ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
      "Expected CRYPT_E_ASN1_BADTAG, got %08x\n", GetLastError());
-    ret = CryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME,
      bogusType, sizeof(bogusType), CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
      &bufSize);
     ok(!ret && GetLastError() == CRYPT_E_ASN1_CORRUPT,
      "Expected CRYPT_E_ASN1_CORRUPT, got %08x\n", GetLastError());
     /* Now expected cases */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, emptySequence,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, emptySequence,
      emptySequence[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
      &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -1488,7 +1492,7 @@ static void test_decodeAltName(DWORD dwEncoding)
          info->cAltEntry);
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, emptyURL,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, emptyURL,
      emptyURL[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
      &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -1505,10 +1509,10 @@ static void test_decodeAltName(DWORD dwEncoding)
          "Expected empty URL\n");
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME,
      emptyURLExtraBytes, sizeof(emptyURLExtraBytes), 0, NULL, NULL, &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
-    ret = CryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, encodedURL,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, encodedURL,
      encodedURL[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
      &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -1524,7 +1528,7 @@ static void test_decodeAltName(DWORD dwEncoding)
         ok(!lstrcmpW(U(info->rgAltEntry[0]).pwszURL, url), "Unexpected URL\n");
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, encodedDnsName,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, encodedDnsName,
      encodedDnsName[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
      &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -1541,7 +1545,7 @@ static void test_decodeAltName(DWORD dwEncoding)
          "Unexpected DNS name\n");
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, encodedIPAddr,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, encodedIPAddr,
      encodedIPAddr[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
      &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -1561,7 +1565,7 @@ static void test_decodeAltName(DWORD dwEncoding)
          sizeof(localhost)), "Unexpected IP address value\n");
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, encodedOidName,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME, encodedOidName,
      sizeof(encodedOidName), CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
      &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -1578,7 +1582,7 @@ static void test_decodeAltName(DWORD dwEncoding)
            "Expected OID 1.2.3, got %s\n", U(info->rgAltEntry[0]).pszRegisteredID);
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ALTERNATE_NAME,
      encodedDirectoryName, sizeof(encodedDirectoryName),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -1677,7 +1681,7 @@ static void test_encodeUnicodeNameValue(DWORD dwEncoding)
     BOOL ret;
     CERT_NAME_VALUE value;
 
-    ret = CryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, NULL,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, NULL,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
      "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
@@ -1685,23 +1689,23 @@ static void test_encodeUnicodeNameValue(DWORD dwEncoding)
     value.dwValueType = 0; /* aka CERT_RDN_ANY_TYPE */
     value.Value.pbData = NULL;
     value.Value.cbData = 0;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, &value,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, &value,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == CRYPT_E_NOT_CHAR_STRING,
      "Expected CRYPT_E_NOT_CHAR_STRING, got %08x\n", GetLastError());
     value.dwValueType = CERT_RDN_ENCODED_BLOB;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, &value,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, &value,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == CRYPT_E_NOT_CHAR_STRING,
      "Expected CRYPT_E_NOT_CHAR_STRING, got %08x\n", GetLastError());
     value.dwValueType = CERT_RDN_ANY_TYPE;
     value.Value.pbData = (LPBYTE)oneW;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, &value,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, &value,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == CRYPT_E_NOT_CHAR_STRING,
      "Expected CRYPT_E_NOT_CHAR_STRING, got %08x\n", GetLastError());
     value.Value.cbData = sizeof(oneW);
-    ret = CryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, &value,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, &value,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == CRYPT_E_NOT_CHAR_STRING,
      "Expected CRYPT_E_NOT_CHAR_STRING, got %08x\n", GetLastError());
@@ -1709,7 +1713,7 @@ static void test_encodeUnicodeNameValue(DWORD dwEncoding)
     value.dwValueType = CERT_RDN_ENCODED_BLOB;
     value.Value.pbData = oneUniversal;
     value.Value.cbData = sizeof(oneUniversal);
-    ret = CryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, &value,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, &value,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == CRYPT_E_NOT_CHAR_STRING,
      "Expected CRYPT_E_NOT_CHAR_STRING, got %08x\n", GetLastError());
@@ -1719,7 +1723,7 @@ static void test_encodeUnicodeNameValue(DWORD dwEncoding)
     {
         value.Value.pbData = (LPBYTE)unicodeErrors[i].str;
         value.dwValueType = unicodeErrors[i].valueType;
-        ret = CryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, &value,
+        ret = pCryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, &value,
          CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
         ok(!ret && GetLastError() == unicodeErrors[i].error,
          "Value type %d: expected %08x, got %08x\n", value.dwValueType,
@@ -1734,7 +1738,7 @@ static void test_encodeUnicodeNameValue(DWORD dwEncoding)
     {
         value.Value.pbData = (LPBYTE)unicodeResults[i].str;
         value.dwValueType = unicodeResults[i].valueType;
-        ret = CryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, &value,
+        ret = pCryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, &value,
          CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
         ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
         if (buf)
@@ -1755,7 +1759,7 @@ static void test_encodeUnicodeNameValue(DWORD dwEncoding)
     {
         value.Value.pbData = (LPBYTE)unicodeWeirdness[i].str;
         value.dwValueType = unicodeWeirdness[i].valueType;
-        ret = CryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, &value,
+        ret = pCryptEncodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE, &value,
          CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
         ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
         if (buf)
@@ -1787,7 +1791,7 @@ static void test_decodeUnicodeNameValue(DWORD dwEncoding)
         BOOL ret;
         DWORD size = 0;
 
-        ret = CryptDecodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_UNICODE_NAME_VALUE,
          unicodeResults[i].encoded.pbData, unicodeResults[i].encoded.cbData,
          CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
         ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -1841,7 +1845,7 @@ static void test_encodeOctets(DWORD dwEncoding)
 
         blob.cbData = strlen((const char*)octets[i].val);
         blob.pbData = (BYTE*)octets[i].val;
-        ret = CryptEncodeObjectEx(dwEncoding, X509_OCTET_STRING, &blob,
+        ret = pCryptEncodeObjectEx(dwEncoding, X509_OCTET_STRING, &blob,
          CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
         ok(ret, "CryptEncodeObjectEx failed: %d\n", GetLastError());
         if (buf)
@@ -1867,7 +1871,7 @@ static void test_decodeOctets(DWORD dwEncoding)
         BOOL ret;
         DWORD bufSize = 0;
 
-        ret = CryptDecodeObjectEx(dwEncoding, X509_OCTET_STRING,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_OCTET_STRING,
          (BYTE *)octets[i].encoded, octets[i].encoded[1] + 2,
          CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
         ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -1929,7 +1933,7 @@ static void test_encodeBits(DWORD dwEncoding)
         blob.cbData = sizeof(bytesToEncode);
         blob.pbData = (BYTE *)bytesToEncode;
         blob.cUnusedBits = bits[i].cUnusedBits;
-        ret = CryptEncodeObjectEx(dwEncoding, X509_BITS, &blob,
+        ret = pCryptEncodeObjectEx(dwEncoding, X509_BITS, &blob,
          CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
         ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
         if (buf)
@@ -1956,7 +1960,7 @@ static void test_decodeBits(DWORD dwEncoding)
     /* normal cases */
     for (i = 0; i < sizeof(bits) / sizeof(bits[0]); i++)
     {
-        ret = CryptDecodeObjectEx(dwEncoding, X509_BITS, bits[i].encoded,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_BITS, bits[i].encoded,
          bits[i].encoded[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
          &bufSize);
         ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -1979,7 +1983,7 @@ static void test_decodeBits(DWORD dwEncoding)
     /* special case: check that something that's valid in BER but not in DER
      * decodes successfully
      */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_BITS, ber, ber[1] + 2,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_BITS, ber, ber[1] + 2,
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -2043,7 +2047,7 @@ static void test_encodeBasicConstraints(DWORD dwEncoding)
     /* First test with the simpler info2 */
     for (i = 0; i < sizeof(constraints2) / sizeof(constraints2[0]); i++)
     {
-        ret = CryptEncodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS2,
+        ret = pCryptEncodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS2,
          &constraints2[i].info, CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
          &bufSize);
         ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
@@ -2061,7 +2065,7 @@ static void test_encodeBasicConstraints(DWORD dwEncoding)
     info.SubjectType.cbData = 0;
     info.fPathLenConstraint = FALSE;
     info.cSubtreesConstraint = 0;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -2076,7 +2080,7 @@ static void test_encodeBasicConstraints(DWORD dwEncoding)
      */
     info.cSubtreesConstraint = 1;
     info.rgSubtreesConstraint = &nameBlob;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -2104,7 +2108,7 @@ static void test_decodeBasicConstraints(DWORD dwEncoding)
     /* First test with simpler info2 */
     for (i = 0; i < sizeof(constraints2) / sizeof(constraints2[0]); i++)
     {
-        ret = CryptDecodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS2,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS2,
          constraints2[i].encoded, constraints2[i].encoded[1] + 2,
          CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
         ok(ret, "CryptDecodeObjectEx failed for item %d: %08x\n", i,
@@ -2121,17 +2125,17 @@ static void test_decodeBasicConstraints(DWORD dwEncoding)
     }
     /* Check with the order of encoded elements inverted */
     buf = (PBYTE)1;
-    ret = CryptDecodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS2,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS2,
      inverted, inverted[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
      &bufSize);
     ok(!ret && GetLastError() == CRYPT_E_ASN1_CORRUPT,
      "Expected CRYPT_E_ASN1_CORRUPT, got %08x\n", GetLastError());
     ok(!buf, "Expected buf to be set to NULL\n");
     /* Check with a non-DER bool */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS2,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS2,
      badBool.encoded, badBool.encoded[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL,
      (BYTE *)&buf, &bufSize);
-    ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
+    ok(ret, "pCryptDecodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
     {
         CERT_BASIC_CONSTRAINTS2_INFO *info =
@@ -2141,13 +2145,13 @@ static void test_decodeBasicConstraints(DWORD dwEncoding)
         LocalFree(buf);
     }
     /* Check with a non-basic constraints value */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS2,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS2,
      (LPBYTE)encodedCommonName, encodedCommonName[1] + 2,
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(!ret && GetLastError() == CRYPT_E_ASN1_CORRUPT,
      "Expected CRYPT_E_ASN1_CORRUPT, got %08x\n", GetLastError());
     /* Now check with the more complex CERT_BASIC_CONSTRAINTS_INFO */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS,
      emptyConstraint, sizeof(emptyConstraint), CRYPT_DECODE_ALLOC_FLAG, NULL,
      (BYTE *)&buf, &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -2160,7 +2164,7 @@ static void test_decodeBasicConstraints(DWORD dwEncoding)
         ok(info->cSubtreesConstraint == 0, "Expected no subtree constraints\n");
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_BASIC_CONSTRAINTS,
      constraintWithDomainName, sizeof(constraintWithDomainName),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -2228,7 +2232,7 @@ static void test_encodeRsaPublicKey(DWORD dwEncoding)
     memcpy(toEncode + sizeof(BLOBHEADER) + sizeof(RSAPUBKEY), modulus1,
      sizeof(modulus1));
 
-    ret = CryptEncodeObjectEx(dwEncoding, RSA_CSP_PUBLICKEYBLOB,
+    ret = pCryptEncodeObjectEx(dwEncoding, RSA_CSP_PUBLICKEYBLOB,
      toEncode, CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
      &bufSize);
     ok(!ret && GetLastError() == E_INVALIDARG,
@@ -2236,7 +2240,7 @@ static void test_encodeRsaPublicKey(DWORD dwEncoding)
     /* Now with a bogus reserved field */
     hdr->bType = PUBLICKEYBLOB;
     hdr->reserved = 1;
-    ret = CryptEncodeObjectEx(dwEncoding, RSA_CSP_PUBLICKEYBLOB,
+    ret = pCryptEncodeObjectEx(dwEncoding, RSA_CSP_PUBLICKEYBLOB,
      toEncode, CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
      &bufSize);
     if (buf)
@@ -2249,7 +2253,7 @@ static void test_encodeRsaPublicKey(DWORD dwEncoding)
     /* Now with a bogus blob version */
     hdr->reserved = 0;
     hdr->bVersion = 0;
-    ret = CryptEncodeObjectEx(dwEncoding, RSA_CSP_PUBLICKEYBLOB,
+    ret = pCryptEncodeObjectEx(dwEncoding, RSA_CSP_PUBLICKEYBLOB,
      toEncode, CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
      &bufSize);
     if (buf)
@@ -2262,7 +2266,7 @@ static void test_encodeRsaPublicKey(DWORD dwEncoding)
     /* And with a bogus alg ID */
     hdr->bVersion = CUR_BLOB_VERSION;
     hdr->aiKeyAlg = CALG_DES;
-    ret = CryptEncodeObjectEx(dwEncoding, RSA_CSP_PUBLICKEYBLOB,
+    ret = pCryptEncodeObjectEx(dwEncoding, RSA_CSP_PUBLICKEYBLOB,
      toEncode, CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
      &bufSize);
     if (buf)
@@ -2274,11 +2278,11 @@ static void test_encodeRsaPublicKey(DWORD dwEncoding)
     }
     /* Check a couple of RSA-related OIDs */
     hdr->aiKeyAlg = CALG_RSA_KEYX;
-    ret = CryptEncodeObjectEx(dwEncoding, szOID_RSA_RSA,
+    ret = pCryptEncodeObjectEx(dwEncoding, szOID_RSA_RSA,
      toEncode, CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
      "Expected ERROR_FILE_NOT_FOUND, got %08x\n", GetLastError());
-    ret = CryptEncodeObjectEx(dwEncoding, szOID_RSA_SHA1RSA,
+    ret = pCryptEncodeObjectEx(dwEncoding, szOID_RSA_SHA1RSA,
      toEncode, CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
      "Expected ERROR_FILE_NOT_FOUND, got %08x\n", GetLastError());
@@ -2288,7 +2292,7 @@ static void test_encodeRsaPublicKey(DWORD dwEncoding)
     {
         memcpy(toEncode + sizeof(BLOBHEADER) + sizeof(RSAPUBKEY),
          rsaPubKeys[i].modulus, rsaPubKeys[i].modulusLen);
-        ret = CryptEncodeObjectEx(dwEncoding, RSA_CSP_PUBLICKEYBLOB,
+        ret = pCryptEncodeObjectEx(dwEncoding, RSA_CSP_PUBLICKEYBLOB,
          toEncode, CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
         ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
         if (buf)
@@ -2311,18 +2315,18 @@ static void test_decodeRsaPublicKey(DWORD dwEncoding)
     BOOL ret;
 
     /* Try with a bad length */
-    ret = CryptDecodeObjectEx(dwEncoding, RSA_CSP_PUBLICKEYBLOB,
+    ret = pCryptDecodeObjectEx(dwEncoding, RSA_CSP_PUBLICKEYBLOB,
      rsaPubKeys[0].encoded, rsaPubKeys[0].encoded[1],
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(!ret && GetLastError() == CRYPT_E_ASN1_EOD,
      "Expected CRYPT_E_ASN1_EOD, got %08x\n", CRYPT_E_ASN1_EOD);
     /* Try with a couple of RSA-related OIDs */
-    ret = CryptDecodeObjectEx(dwEncoding, szOID_RSA_RSA,
+    ret = pCryptDecodeObjectEx(dwEncoding, szOID_RSA_RSA,
      rsaPubKeys[0].encoded, rsaPubKeys[0].encoded[1] + 2,
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
      "Expected ERROR_FILE_NOT_FOUND, got %08x\n", GetLastError());
-    ret = CryptDecodeObjectEx(dwEncoding, szOID_RSA_SHA1RSA,
+    ret = pCryptDecodeObjectEx(dwEncoding, szOID_RSA_SHA1RSA,
      rsaPubKeys[0].encoded, rsaPubKeys[0].encoded[1] + 2,
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
@@ -2331,7 +2335,7 @@ static void test_decodeRsaPublicKey(DWORD dwEncoding)
     for (i = 0; i < sizeof(rsaPubKeys) / sizeof(rsaPubKeys[0]); i++)
     {
         bufSize = 0;
-        ret = CryptDecodeObjectEx(dwEncoding, RSA_CSP_PUBLICKEYBLOB,
+        ret = pCryptDecodeObjectEx(dwEncoding, RSA_CSP_PUBLICKEYBLOB,
          rsaPubKeys[i].encoded, rsaPubKeys[i].encoded[1] + 2,
          CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
         ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -2394,7 +2398,7 @@ static void test_encodeSequenceOfAny(DWORD dwEncoding)
     seq.cValue = sizeof(ints) / sizeof(ints[0]);
     seq.rgValue = blobs;
 
-    ret = CryptEncodeObjectEx(dwEncoding, X509_SEQUENCE_OF_ANY, &seq,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_SEQUENCE_OF_ANY, &seq,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -2408,7 +2412,7 @@ static void test_encodeSequenceOfAny(DWORD dwEncoding)
      */
     blobs[0].cbData = times[0].encodedTime[1] + 2;
     blobs[0].pbData = (BYTE *)times[0].encodedTime;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_SEQUENCE_OF_ANY, &seq,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_SEQUENCE_OF_ANY, &seq,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -2426,7 +2430,7 @@ static void test_decodeSequenceOfAny(DWORD dwEncoding)
     BYTE *buf = NULL;
     DWORD bufSize = 0;
 
-    ret = CryptDecodeObjectEx(dwEncoding, X509_SEQUENCE_OF_ANY, intSequence,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_SEQUENCE_OF_ANY, intSequence,
      intSequence[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -2446,7 +2450,7 @@ static void test_decodeSequenceOfAny(DWORD dwEncoding)
         }
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_SEQUENCE_OF_ANY, mixedSequence,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_SEQUENCE_OF_ANY, mixedSequence,
      mixedSequence[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
      &bufSize);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -2502,7 +2506,7 @@ static void test_encodeExtensions(DWORD dwEncoding)
         BYTE *buf = NULL;
         DWORD bufSize = 0;
 
-        ret = CryptEncodeObjectEx(dwEncoding, X509_EXTENSIONS, &exts[i].exts,
+        ret = pCryptEncodeObjectEx(dwEncoding, X509_EXTENSIONS, &exts[i].exts,
          CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &bufSize);
         ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
         if (buf)
@@ -2526,7 +2530,7 @@ static void test_decodeExtensions(DWORD dwEncoding)
         BYTE *buf = NULL;
         DWORD bufSize = 0;
 
-        ret = CryptDecodeObjectEx(dwEncoding, X509_EXTENSIONS,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_EXTENSIONS,
          exts[i].encoded, exts[i].encoded[1] + 2, CRYPT_DECODE_ALLOC_FLAG,
          NULL, (BYTE *)&buf, &bufSize);
         ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -2629,7 +2633,7 @@ static void test_encodePublicKeyInfo(DWORD dwEncoding)
         BYTE *buf = NULL;
         DWORD bufSize = 0;
 
-        ret = CryptEncodeObjectEx(dwEncoding, X509_PUBLIC_KEY_INFO,
+        ret = pCryptEncodeObjectEx(dwEncoding, X509_PUBLIC_KEY_INFO,
          &pubKeys[i].info, CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf,
          &bufSize);
         ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
@@ -2686,7 +2690,7 @@ static void test_decodePublicKeyInfo(DWORD dwEncoding)
     for (i = 0; i < sizeof(pubKeys) / sizeof(pubKeys[0]); i++)
     {
         /* The NULL form decodes to the decoded member */
-        ret = CryptDecodeObjectEx(dwEncoding, X509_PUBLIC_KEY_INFO,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_PUBLIC_KEY_INFO,
          pubKeys[i].encoded, pubKeys[i].encoded[1] + 2, CRYPT_DECODE_ALLOC_FLAG,
          NULL, (BYTE *)&buf, &bufSize);
         ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -2697,7 +2701,7 @@ static void test_decodePublicKeyInfo(DWORD dwEncoding)
             LocalFree(buf);
         }
         /* The non-NULL form decodes to the original */
-        ret = CryptDecodeObjectEx(dwEncoding, X509_PUBLIC_KEY_INFO,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_PUBLIC_KEY_INFO,
          pubKeys[i].encodedNoNull, pubKeys[i].encodedNoNull[1] + 2,
          CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
         ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -2708,7 +2712,7 @@ static void test_decodePublicKeyInfo(DWORD dwEncoding)
         }
     }
     /* Test with bogus (not valid DER) parameters */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_PUBLIC_KEY_INFO,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_PUBLIC_KEY_INFO,
      bogusPubKeyInfo, bogusPubKeyInfo[1] + 2, CRYPT_DECODE_ALLOC_FLAG,
      NULL, (BYTE *)&buf, &bufSize);
     ok(!ret && GetLastError() == CRYPT_E_ASN1_CORRUPT,
@@ -2801,12 +2805,12 @@ static void test_encodeCertToBeSigned(DWORD dwEncoding)
     CERT_EXTENSION ext;
 
     /* Test with NULL pvStructInfo */
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, NULL,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, NULL,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
      "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
     /* Test with a V1 cert */
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -2818,7 +2822,7 @@ static void test_encodeCertToBeSigned(DWORD dwEncoding)
     }
     /* Test v2 cert */
     info.dwVersion = CERT_V2;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -2829,7 +2833,7 @@ static void test_encodeCertToBeSigned(DWORD dwEncoding)
     }
     /* Test v3 cert */
     info.dwVersion = CERT_V3;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -2844,7 +2848,7 @@ static void test_encodeCertToBeSigned(DWORD dwEncoding)
     info.dwVersion = CERT_V1;
     info.cExtension = 1;
     info.rgExtension = &criticalExt;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -2856,7 +2860,7 @@ static void test_encodeCertToBeSigned(DWORD dwEncoding)
     /* test v1 cert with a serial number */
     info.SerialNumber.cbData = sizeof(serialNum);
     info.SerialNumber.pbData = (BYTE *)serialNum;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -2869,7 +2873,7 @@ static void test_encodeCertToBeSigned(DWORD dwEncoding)
     info.Issuer.pbData = (BYTE *)encodedCommonName;
     info.Subject.cbData = sizeof(encodedCommonName);
     info.Subject.pbData = (BYTE *)encodedCommonName;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -2881,7 +2885,7 @@ static void test_encodeCertToBeSigned(DWORD dwEncoding)
     info.SubjectPublicKeyInfo.Algorithm.pszObjId = oid_rsa_rsa;
     info.SubjectPublicKeyInfo.PublicKey.cbData = sizeof(aKey);
     info.SubjectPublicKeyInfo.PublicKey.pbData = (LPBYTE)aKey;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -2904,7 +2908,7 @@ static void test_encodeCertToBeSigned(DWORD dwEncoding)
     ext.Value.pbData = (BYTE *)octetCommonNameValue;
     info.cExtension = 1;
     info.rgExtension = &ext;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -2923,11 +2927,11 @@ static void test_decodeCertToBeSigned(DWORD dwEncoding)
     DWORD size = 0, i;
 
     /* Test with NULL pbEncoded */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, NULL, 0,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, NULL, 0,
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == CRYPT_E_ASN1_EOD,
      "Expected CRYPT_E_ASN1_EOD, got %08x\n", GetLastError());
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, NULL, 1,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, NULL, 1,
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
      "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
@@ -2937,13 +2941,13 @@ static void test_decodeCertToBeSigned(DWORD dwEncoding)
      */
     for (i = 0; i < sizeof(corruptCerts) / sizeof(corruptCerts[0]); i++)
     {
-        ret = CryptDecodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED,
          corruptCerts[i], corruptCerts[i][1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL,
          (BYTE *)&buf, &size);
         ok(!ret, "Expected failure\n");
     }
     /* Now check with serial number, subject and issuer specified */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, bigCert,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, bigCert,
      sizeof(bigCert), CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -2967,7 +2971,7 @@ static void test_decodeCertToBeSigned(DWORD dwEncoding)
         LocalFree(buf);
     }
     /* Check again with pub key specified */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED,
      v1CertWithPubKey, sizeof(v1CertWithPubKey), CRYPT_DECODE_ALLOC_FLAG, NULL,
      (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -3029,7 +3033,7 @@ static void test_encodeCert(DWORD dwEncoding)
     BYTE *buf = NULL;
     DWORD bufSize = 0;
 
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &bufSize);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -3046,7 +3050,7 @@ static void test_decodeCert(DWORD dwEncoding)
     BYTE *buf = NULL;
     DWORD size = 0;
 
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CERT, signedBigCert,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT, signedBigCert,
      sizeof(signedBigCert), CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -3064,7 +3068,7 @@ static void test_decodeCert(DWORD dwEncoding)
         LocalFree(buf);
     }
     /* A signed cert decodes as a CERT_INFO too */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, signedBigCert,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED, signedBigCert,
      sizeof(signedBigCert), CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -3116,14 +3120,14 @@ static void test_encodeCRLDistPoints(DWORD dwEncoding)
     DWORD size = 0;
 
     /* Test with an empty info */
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == E_INVALIDARG,
      "Expected E_INVALIDARG, got %08x\n", GetLastError());
     /* Test with one empty dist point */
     info.cDistPoint = 1;
     info.rgDistPoint = &point;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -3137,7 +3141,7 @@ static void test_encodeCRLDistPoints(DWORD dwEncoding)
     U(entry).pwszURL = (LPWSTR)nihongoURL;
     U(point.DistPointName).FullName.cAltEntry = 1;
     U(point.DistPointName).FullName.rgAltEntry = &entry;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == CRYPT_E_INVALID_IA5_STRING,
      "Expected CRYPT_E_INVALID_IA5_STRING, got %08x\n", GetLastError());
@@ -3147,7 +3151,7 @@ static void test_encodeCRLDistPoints(DWORD dwEncoding)
      GET_CERT_ALT_NAME_VALUE_ERR_INDEX(size));
     /* A dist point with (just) a valid name */
     U(entry).pwszURL = (LPWSTR)url;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -3159,7 +3163,7 @@ static void test_encodeCRLDistPoints(DWORD dwEncoding)
     point.DistPointName.dwDistPointNameChoice = CRL_DIST_POINT_NO_NAME;
     point.ReasonFlags.cbData = sizeof(crlReason);
     point.ReasonFlags.pbData = (LPBYTE)&crlReason;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -3171,7 +3175,7 @@ static void test_encodeCRLDistPoints(DWORD dwEncoding)
     point.ReasonFlags.cbData = 0;
     point.CRLIssuer.cAltEntry = 1;
     point.CRLIssuer.rgAltEntry = &entry;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -3181,7 +3185,7 @@ static void test_encodeCRLDistPoints(DWORD dwEncoding)
     }
     /* A dist point with both a name and an issuer */
     point.DistPointName.dwDistPointNameChoice = CRL_DIST_POINT_FULL_NAME;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -3201,7 +3205,7 @@ static void test_decodeCRLDistPoints(DWORD dwEncoding)
     PCRL_DIST_POINT point;
     PCERT_ALT_NAME_ENTRY entry;
 
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS,
      emptyDistPoint, emptyDistPoint[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL,
      (BYTE *)&buf, &size);
     if (ret)
@@ -3219,7 +3223,7 @@ static void test_decodeCRLDistPoints(DWORD dwEncoding)
         ok(point->CRLIssuer.cAltEntry == 0, "Expected no issuer\n");
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS,
      distPointWithUrl, distPointWithUrl[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL,
      (BYTE *)&buf, &size);
     if (ret)
@@ -3245,7 +3249,7 @@ static void test_decodeCRLDistPoints(DWORD dwEncoding)
         ok(point->CRLIssuer.cAltEntry == 0, "Expected no issuer\n");
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS,
      distPointWithReason, distPointWithReason[1] + 2, CRYPT_DECODE_ALLOC_FLAG,
      NULL, (BYTE *)&buf, &size);
     if (ret)
@@ -3267,7 +3271,7 @@ static void test_decodeCRLDistPoints(DWORD dwEncoding)
         ok(point->CRLIssuer.cAltEntry == 0, "Expected no issuer\n");
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CRL_DIST_POINTS,
      distPointWithUrlAndIssuer, distPointWithUrlAndIssuer[1] + 2,
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (ret)
@@ -3314,7 +3318,7 @@ static void test_encodeCRLIssuingDistPoint(DWORD dwEncoding)
     CRL_ISSUING_DIST_POINT point = { { 0 } };
     CERT_ALT_NAME_ENTRY entry;
 
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT, NULL,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT, NULL,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (!ret && GetLastError() == ERROR_FILE_NOT_FOUND)
     {
@@ -3323,7 +3327,7 @@ static void test_encodeCRLIssuingDistPoint(DWORD dwEncoding)
     }
     ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
      "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT, &point,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT, &point,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -3335,7 +3339,7 @@ static void test_encodeCRLIssuingDistPoint(DWORD dwEncoding)
     /* nonsensical flags */
     point.fOnlyContainsUserCerts = TRUE;
     point.fOnlyContainsCACerts = TRUE;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT, &point,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT, &point,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -3347,14 +3351,14 @@ static void test_encodeCRLIssuingDistPoint(DWORD dwEncoding)
     /* unimplemented name type */
     point.fOnlyContainsCACerts = point.fOnlyContainsUserCerts = FALSE;
     point.DistPointName.dwDistPointNameChoice = CRL_DIST_POINT_ISSUER_RDN_NAME;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT, &point,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT, &point,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == E_INVALIDARG,
      "Expected E_INVALIDARG, got %08x\n", GetLastError());
     /* empty name */
     point.DistPointName.dwDistPointNameChoice = CRL_DIST_POINT_FULL_NAME;
     U(point.DistPointName).FullName.cAltEntry = 0;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT, &point,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT, &point,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -3368,7 +3372,7 @@ static void test_encodeCRLIssuingDistPoint(DWORD dwEncoding)
     U(entry).pwszURL = (LPWSTR)url;
     U(point.DistPointName).FullName.cAltEntry = 1;
     U(point.DistPointName).FullName.rgAltEntry = &entry;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT, &point,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT, &point,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -3453,7 +3457,7 @@ static void test_decodeCRLIssuingDistPoint(DWORD dwEncoding)
     DWORD size = 0;
     CRL_ISSUING_DIST_POINT point = { { 0 } };
 
-    ret = CryptDecodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT,
      emptySequence, emptySequence[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL,
      (BYTE *)&buf, &size);
     if (!ret && GetLastError() == ERROR_FILE_NOT_FOUND)
@@ -3467,7 +3471,7 @@ static void test_decodeCRLIssuingDistPoint(DWORD dwEncoding)
         compareCRLIssuingDistPoints(&point, (PCRL_ISSUING_DIST_POINT)buf);
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT,
      badFlagsIDP, badFlagsIDP[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL,
      (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -3477,7 +3481,7 @@ static void test_decodeCRLIssuingDistPoint(DWORD dwEncoding)
         compareCRLIssuingDistPoints(&point, (PCRL_ISSUING_DIST_POINT)buf);
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT,
      emptyNameIDP, emptyNameIDP[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL,
      (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -3489,7 +3493,7 @@ static void test_decodeCRLIssuingDistPoint(DWORD dwEncoding)
         compareCRLIssuingDistPoints(&point, (PCRL_ISSUING_DIST_POINT)buf);
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ISSUING_DIST_POINT,
      urlIDP, urlIDP[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
     if (ret)
@@ -3568,7 +3572,7 @@ static void test_encodeCRLToBeSigned(DWORD dwEncoding)
     CERT_EXTENSION ext;
 
     /* Test with a V1 CRL */
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -3579,7 +3583,7 @@ static void test_encodeCRLToBeSigned(DWORD dwEncoding)
     }
     /* Test v2 CRL */
     info.dwVersion = CRL_V2;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -3593,7 +3597,7 @@ static void test_encodeCRLToBeSigned(DWORD dwEncoding)
     info.dwVersion = CRL_V1;
     info.Issuer.cbData = sizeof(encodedCommonName);
     info.Issuer.pbData = (BYTE *)encodedCommonName;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -3604,13 +3608,13 @@ static void test_encodeCRLToBeSigned(DWORD dwEncoding)
     }
     /* v1 CRL with a name and a NULL entry pointer */
     info.cCRLEntry = 1;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
      "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
     /* now set an empty entry */
     info.rgCRLEntry = &entry;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -3623,7 +3627,7 @@ static void test_encodeCRLToBeSigned(DWORD dwEncoding)
     /* an entry with a serial number */
     entry.SerialNumber.cbData = sizeof(serialNum);
     entry.SerialNumber.pbData = (BYTE *)serialNum;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -3636,9 +3640,9 @@ static void test_encodeCRLToBeSigned(DWORD dwEncoding)
     /* an entry with an extension */
     entry.cExtension = 1;
     entry.rgExtension = &criticalExt;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
-    ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
+    ok(ret, "pCryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
     {
         ok(size == sizeof(v1CRLWithEntryExt), "Wrong size %d\n", size);
@@ -3649,7 +3653,7 @@ static void test_encodeCRLToBeSigned(DWORD dwEncoding)
     entry.cExtension = 0;
     info.cExtension = 1;
     info.rgExtension = &criticalExt;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -3661,7 +3665,7 @@ static void test_encodeCRLToBeSigned(DWORD dwEncoding)
     /* a v2 CRL with an extension, this time non-critical */
     info.dwVersion = CRL_V2;
     info.rgExtension = &nonCriticalExt;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -3676,7 +3680,7 @@ static void test_encodeCRLToBeSigned(DWORD dwEncoding)
     ext.Value.cbData = sizeof(urlIDP);
     ext.Value.pbData = (LPBYTE)urlIDP;
     entry.rgExtension = &ext;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -4241,14 +4245,14 @@ static void test_decodeCRLToBeSigned(DWORD dwEncoding)
 
     for (i = 0; i < sizeof(corruptCRLs) / sizeof(corruptCRLs[0]); i++)
     {
-        ret = CryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
          corruptCRLs[i], corruptCRLs[i][1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL,
          (BYTE *)&buf, &size);
         ok(!ret && (GetLastError() == CRYPT_E_ASN1_CORRUPT),
          "Expected CRYPT_E_ASN1_CORRUPT, got %08x\n", GetLastError());
     }
     /* at a minimum, a CRL must contain an issuer: */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
      v1CRLWithIssuer, v1CRLWithIssuer[1] + 2, CRYPT_DECODE_ALLOC_FLAG, NULL,
      (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -4266,13 +4270,13 @@ static void test_decodeCRLToBeSigned(DWORD dwEncoding)
         LocalFree(buf);
     }
     /* check decoding with an empty CRL entry */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
      v1CRLWithIssuerAndEmptyEntry, v1CRLWithIssuerAndEmptyEntry[1] + 2,
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == CRYPT_E_ASN1_CORRUPT,
      "Expected CRYPT_E_ASN1_CORRUPT, got %08x\n", GetLastError());
     /* with a real CRL entry */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
      v1CRLWithIssuerAndEntry, v1CRLWithIssuerAndEntry[1] + 2,
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -4299,7 +4303,7 @@ static void test_decodeCRLToBeSigned(DWORD dwEncoding)
         LocalFree(buf);
     }
     /* a real CRL from verisign that has extensions */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
      verisignCRL, sizeof(verisignCRL), CRYPT_DECODE_ALLOC_FLAG,
      NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -4318,7 +4322,7 @@ static void test_decodeCRLToBeSigned(DWORD dwEncoding)
         LocalFree(buf);
     }
     /* another real CRL from verisign that has lots of entries */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
      verisignCRLWithLotsOfEntries, sizeof(verisignCRLWithLotsOfEntries),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -4334,7 +4338,7 @@ static void test_decodeCRLToBeSigned(DWORD dwEncoding)
         LocalFree(buf);
     }
     /* and finally, with an extension */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
      v1CRLWithExt, sizeof(v1CRLWithExt), CRYPT_DECODE_ALLOC_FLAG,
      NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -4362,7 +4366,7 @@ static void test_decodeCRLToBeSigned(DWORD dwEncoding)
          info->cExtension);
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
      v2CRLWithExt, sizeof(v2CRLWithExt), CRYPT_DECODE_ALLOC_FLAG,
      NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -4375,7 +4379,7 @@ static void test_decodeCRLToBeSigned(DWORD dwEncoding)
         LocalFree(buf);
     }
     /* And again, with an issuing dist point */
-    ret = CryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_CRL_TO_BE_SIGNED,
      v2CRLWithIssuingDistPoint, sizeof(v2CRLWithIssuingDistPoint),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -4405,7 +4409,7 @@ static void test_encodeEnhancedKeyUsage(DWORD dwEncoding)
 
     /* Test with empty usage */
     usage.cUsageIdentifier = 0;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ENHANCED_KEY_USAGE, &usage,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ENHANCED_KEY_USAGE, &usage,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -4417,7 +4421,7 @@ static void test_encodeEnhancedKeyUsage(DWORD dwEncoding)
     /* Test with a few usages */
     usage.cUsageIdentifier = sizeof(keyUsages) / sizeof(keyUsages[0]);
     usage.rgpszUsageIdentifier = (LPSTR *)keyUsages;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_ENHANCED_KEY_USAGE, &usage,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_ENHANCED_KEY_USAGE, &usage,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -4434,7 +4438,7 @@ static void test_decodeEnhancedKeyUsage(DWORD dwEncoding)
     LPBYTE buf = NULL;
     DWORD size = 0;
 
-    ret = CryptDecodeObjectEx(dwEncoding, X509_ENHANCED_KEY_USAGE,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ENHANCED_KEY_USAGE,
      emptySequence, sizeof(emptySequence), CRYPT_DECODE_ALLOC_FLAG, NULL,
      (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -4448,7 +4452,7 @@ static void test_decodeEnhancedKeyUsage(DWORD dwEncoding)
          usage->cUsageIdentifier);
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_ENHANCED_KEY_USAGE,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_ENHANCED_KEY_USAGE,
      encodedUsage, sizeof(encodedUsage), CRYPT_DECODE_ALLOC_FLAG, NULL,
      (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -4485,7 +4489,7 @@ static void test_encodeAuthorityKeyId(DWORD dwEncoding)
     DWORD size = 0;
 
     /* Test with empty id */
-    ret = CryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -4497,7 +4501,7 @@ static void test_encodeAuthorityKeyId(DWORD dwEncoding)
     /* With just a key id */
     info.KeyId.cbData = sizeof(keyId);
     info.KeyId.pbData = keyId;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -4510,7 +4514,7 @@ static void test_encodeAuthorityKeyId(DWORD dwEncoding)
     info.KeyId.cbData = 0;
     info.CertIssuer.cbData = sizeof(encodedCommonName);
     info.CertIssuer.pbData = (BYTE *)encodedCommonName;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -4524,7 +4528,7 @@ static void test_encodeAuthorityKeyId(DWORD dwEncoding)
     info.CertIssuer.cbData = 0;
     info.CertSerialNumber.cbData = sizeof(serialNum);
     info.CertSerialNumber.pbData = (BYTE *)serialNum;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -4542,7 +4546,7 @@ static void test_decodeAuthorityKeyId(DWORD dwEncoding)
     LPBYTE buf = NULL;
     DWORD size = 0;
 
-    ret = CryptDecodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID,
      emptySequence, sizeof(emptySequence), CRYPT_DECODE_ALLOC_FLAG, NULL,
      (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -4557,7 +4561,7 @@ static void test_decodeAuthorityKeyId(DWORD dwEncoding)
         ok(info->CertSerialNumber.cbData == 0, "Expected no serial number\n");
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID,
      authorityKeyIdWithId, sizeof(authorityKeyIdWithId),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -4574,7 +4578,7 @@ static void test_decodeAuthorityKeyId(DWORD dwEncoding)
         ok(info->CertSerialNumber.cbData == 0, "Expected no serial number\n");
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID,
      authorityKeyIdWithIssuer, sizeof(authorityKeyIdWithIssuer),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -4592,7 +4596,7 @@ static void test_decodeAuthorityKeyId(DWORD dwEncoding)
         ok(info->CertSerialNumber.cbData == 0, "Expected no serial number\n");
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID,
      authorityKeyIdWithSerial, sizeof(authorityKeyIdWithSerial),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -4625,7 +4629,7 @@ static void test_encodeAuthorityKeyId2(DWORD dwEncoding)
     DWORD size = 0;
 
     /* Test with empty id */
-    ret = CryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -4637,7 +4641,7 @@ static void test_encodeAuthorityKeyId2(DWORD dwEncoding)
     /* With just a key id */
     info.KeyId.cbData = sizeof(keyId);
     info.KeyId.pbData = keyId;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -4651,16 +4655,16 @@ static void test_encodeAuthorityKeyId2(DWORD dwEncoding)
     info.KeyId.cbData = 0;
     info.AuthorityCertIssuer.cAltEntry = 1;
     info.AuthorityCertIssuer.rgAltEntry = &entry;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == E_INVALIDARG,
      "Expected E_INVALIDARG, got %08x\n", GetLastError());
     /* With an issuer name */
     entry.dwAltNameChoice = CERT_ALT_NAME_URL;
     U(entry).pwszURL = (LPWSTR)url;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
-    ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
+    ok(ret, "pCryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
     {
         ok(size == sizeof(authorityKeyIdWithIssuerUrl), "Unexpected size %d\n",
@@ -4673,7 +4677,7 @@ static void test_encodeAuthorityKeyId2(DWORD dwEncoding)
     info.AuthorityCertIssuer.cAltEntry = 0;
     info.AuthorityCertSerialNumber.cbData = sizeof(serialNum);
     info.AuthorityCertSerialNumber.pbData = (BYTE *)serialNum;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
@@ -4691,7 +4695,7 @@ static void test_decodeAuthorityKeyId2(DWORD dwEncoding)
     LPBYTE buf = NULL;
     DWORD size = 0;
 
-    ret = CryptDecodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2,
      emptySequence, sizeof(emptySequence), CRYPT_DECODE_ALLOC_FLAG, NULL,
      (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -4708,7 +4712,7 @@ static void test_decodeAuthorityKeyId2(DWORD dwEncoding)
          "Expected no serial number\n");
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2,
      authorityKeyIdWithId, sizeof(authorityKeyIdWithId),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -4727,7 +4731,7 @@ static void test_decodeAuthorityKeyId2(DWORD dwEncoding)
          "Expected no serial number\n");
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2,
      authorityKeyIdWithIssuerUrl, sizeof(authorityKeyIdWithIssuerUrl),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -4750,7 +4754,7 @@ static void test_decodeAuthorityKeyId2(DWORD dwEncoding)
          "Expected no serial number\n");
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2,
+    ret = pCryptDecodeObjectEx(dwEncoding, X509_AUTHORITY_KEY_ID2,
      authorityKeyIdWithSerial, sizeof(authorityKeyIdWithSerial),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
@@ -4789,17 +4793,17 @@ static void test_encodePKCSContentInfo(DWORD dwEncoding)
     char oid1[] = "1.2.3";
 
     SetLastError(0xdeadbeef);
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS_CONTENT_INFO, NULL,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS_CONTENT_INFO, NULL,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
      "Expected STATUS_ACCESS_VIOLATION, got %x\n", GetLastError());
     SetLastError(0xdeadbeef);
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS_CONTENT_INFO, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS_CONTENT_INFO, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == E_INVALIDARG,
      "Expected E_INVALIDARG, got %x\n", GetLastError());
     info.pszObjId = oid1;
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS_CONTENT_INFO, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS_CONTENT_INFO, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %x\n", GetLastError());
     if (buf)
@@ -4810,7 +4814,7 @@ static void test_encodePKCSContentInfo(DWORD dwEncoding)
     }
     info.Content.pbData = bogusDER;
     info.Content.cbData = sizeof(bogusDER);
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS_CONTENT_INFO, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS_CONTENT_INFO, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed; %x\n", GetLastError());
     if (buf)
@@ -4821,7 +4825,7 @@ static void test_encodePKCSContentInfo(DWORD dwEncoding)
     }
     info.Content.pbData = (BYTE *)ints[0].encoded;
     info.Content.cbData = ints[0].encoded[1] + 2;
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS_CONTENT_INFO, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS_CONTENT_INFO, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -4868,7 +4872,7 @@ static void test_decodePKCSContentInfo(DWORD dwEncoding)
     DWORD size = 0;
     CRYPT_CONTENT_INFO *info;
 
-    ret = CryptDecodeObjectEx(dwEncoding, PKCS_CONTENT_INFO,
+    ret = pCryptDecodeObjectEx(dwEncoding, PKCS_CONTENT_INFO,
      emptyPKCSContentInfo, sizeof(emptyPKCSContentInfo),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %x\n", GetLastError());
@@ -4882,12 +4886,12 @@ static void test_decodePKCSContentInfo(DWORD dwEncoding)
          info->Content.cbData);
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, PKCS_CONTENT_INFO,
+    ret = pCryptDecodeObjectEx(dwEncoding, PKCS_CONTENT_INFO,
      emptyPKCSContentInfoExtraBytes, sizeof(emptyPKCSContentInfoExtraBytes),
      0, NULL, NULL, &size);
     ok(ret, "CryptDecodeObjectEx failed: %x\n", GetLastError());
     SetLastError(0xdeadbeef);
-    ret = CryptDecodeObjectEx(dwEncoding, PKCS_CONTENT_INFO,
+    ret = pCryptDecodeObjectEx(dwEncoding, PKCS_CONTENT_INFO,
      bogusPKCSContentInfo, sizeof(bogusPKCSContentInfo),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     /* Native fails with CRYPT_E_ASN1_EOD, accept also CRYPT_E_ASN1_CORRUPT as
@@ -4897,7 +4901,7 @@ static void test_decodePKCSContentInfo(DWORD dwEncoding)
      GetLastError() == CRYPT_E_ASN1_CORRUPT),
      "Expected CRYPT_E_ASN1_EOD or CRYPT_E_ASN1_CORRUPT, got %x\n",
      GetLastError());
-    ret = CryptDecodeObjectEx(dwEncoding, PKCS_CONTENT_INFO,
+    ret = pCryptDecodeObjectEx(dwEncoding, PKCS_CONTENT_INFO,
      intPKCSContentInfo, sizeof(intPKCSContentInfo),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %x\n", GetLastError());
@@ -4913,7 +4917,7 @@ static void test_decodePKCSContentInfo(DWORD dwEncoding)
          info->Content.cbData), "Unexpected value\n");
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, PKCS_CONTENT_INFO,
+    ret = pCryptDecodeObjectEx(dwEncoding, PKCS_CONTENT_INFO,
      indefiniteSignedPKCSContent, sizeof(indefiniteSignedPKCSContent),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %x\n", GetLastError());
@@ -4946,17 +4950,17 @@ static void test_encodePKCSAttribute(DWORD dwEncoding)
     char oid[] = "1.2.3";
 
     SetLastError(0xdeadbeef);
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTE, NULL,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTE, NULL,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
      "Expected STATUS_ACCESS_VIOLATION, got %x\n", GetLastError());
     SetLastError(0xdeadbeef);
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTE, &attr,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTE, &attr,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == E_INVALIDARG,
      "Expected E_INVALIDARG, got %x\n", GetLastError());
     attr.pszObjId = oid;
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTE, &attr,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTE, &attr,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %x\n", GetLastError());
     if (buf)
@@ -4969,7 +4973,7 @@ static void test_encodePKCSAttribute(DWORD dwEncoding)
     blob.pbData = bogusDER;
     attr.cValue = 1;
     attr.rgValue = &blob;
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTE, &attr,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTE, &attr,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %x\n", GetLastError());
     if (buf)
@@ -4980,7 +4984,7 @@ static void test_encodePKCSAttribute(DWORD dwEncoding)
     }
     blob.pbData = (BYTE *)ints[0].encoded;
     blob.cbData = ints[0].encoded[1] + 2;
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTE, &attr,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTE, &attr,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -4997,7 +5001,7 @@ static void test_decodePKCSAttribute(DWORD dwEncoding)
     DWORD size = 0;
     CRYPT_ATTRIBUTE *attr;
 
-    ret = CryptDecodeObjectEx(dwEncoding, PKCS_ATTRIBUTE,
+    ret = pCryptDecodeObjectEx(dwEncoding, PKCS_ATTRIBUTE,
      emptyPKCSAttr, sizeof(emptyPKCSAttr),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %x\n", GetLastError());
@@ -5011,7 +5015,7 @@ static void test_decodePKCSAttribute(DWORD dwEncoding)
         LocalFree(buf);
     }
     SetLastError(0xdeadbeef);
-    ret = CryptDecodeObjectEx(dwEncoding, PKCS_ATTRIBUTE,
+    ret = pCryptDecodeObjectEx(dwEncoding, PKCS_ATTRIBUTE,
      bogusPKCSAttr, sizeof(bogusPKCSAttr),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     /* Native fails with CRYPT_E_ASN1_EOD, accept also CRYPT_E_ASN1_CORRUPT as
@@ -5021,7 +5025,7 @@ static void test_decodePKCSAttribute(DWORD dwEncoding)
      GetLastError() == CRYPT_E_ASN1_CORRUPT),
      "Expected CRYPT_E_ASN1_EOD or CRYPT_E_ASN1_CORRUPT, got %x\n",
      GetLastError());
-    ret = CryptDecodeObjectEx(dwEncoding, PKCS_ATTRIBUTE,
+    ret = pCryptDecodeObjectEx(dwEncoding, PKCS_ATTRIBUTE,
      intPKCSAttr, sizeof(intPKCSAttr),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %x\n", GetLastError());
@@ -5056,7 +5060,7 @@ static void test_encodePKCSAttributes(DWORD dwEncoding)
     DWORD size = 0;
     char oid1[] = "1.2.3", oid2[] = "1.5.6";
 
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTES, &attributes,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTES, &attributes,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %x\n", GetLastError());
     if (buf)
@@ -5068,12 +5072,12 @@ static void test_encodePKCSAttributes(DWORD dwEncoding)
     attributes.cAttr = 1;
     attributes.rgAttr = attr;
     SetLastError(0xdeadbeef);
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTES, &attributes,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTES, &attributes,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == E_INVALIDARG,
      "Expected E_INVALIDARG, got %x\n", GetLastError());
     attr[0].pszObjId = oid1;
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTES, &attributes,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTES, &attributes,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
     {
@@ -5087,7 +5091,7 @@ static void test_encodePKCSAttributes(DWORD dwEncoding)
     blob.pbData = (BYTE *)ints[0].encoded;
     blob.cbData = ints[0].encoded[1] + 2;
     attributes.cAttr = 2;
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTES, &attributes,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS_ATTRIBUTES, &attributes,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %x\n", GetLastError());
     if (buf)
@@ -5105,7 +5109,7 @@ static void test_decodePKCSAttributes(DWORD dwEncoding)
     DWORD size = 0;
     CRYPT_ATTRIBUTES *attributes;
 
-    ret = CryptDecodeObjectEx(dwEncoding, PKCS_ATTRIBUTES,
+    ret = pCryptDecodeObjectEx(dwEncoding, PKCS_ATTRIBUTES,
      emptyPKCSAttributes, sizeof(emptyPKCSAttributes),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %x\n", GetLastError());
@@ -5116,7 +5120,7 @@ static void test_decodePKCSAttributes(DWORD dwEncoding)
          attributes->cAttr);
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, PKCS_ATTRIBUTES,
+    ret = pCryptDecodeObjectEx(dwEncoding, PKCS_ATTRIBUTES,
      singlePKCSAttributes, sizeof(singlePKCSAttributes),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %x\n", GetLastError());
@@ -5131,7 +5135,7 @@ static void test_decodePKCSAttributes(DWORD dwEncoding)
          "Expected no attributes, got %d\n", attributes->rgAttr[0].cValue);
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, PKCS_ATTRIBUTES,
+    ret = pCryptDecodeObjectEx(dwEncoding, PKCS_ATTRIBUTES,
      doublePKCSAttributes, sizeof(doublePKCSAttributes),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %x\n", GetLastError());
@@ -5206,7 +5210,7 @@ static void test_encodePKCSSignerInfo(DWORD dwEncoding)
     CRYPT_ATTRIBUTE attr = { oid_common_name, 1, &commonName };
 
     SetLastError(0xdeadbeef);
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == E_INVALIDARG,
      "Expected E_INVALIDARG, got %08x\n", GetLastError());
@@ -5217,7 +5221,7 @@ static void test_encodePKCSSignerInfo(DWORD dwEncoding)
     info.Issuer.cbData = sizeof(encodedCommonNameNoNull);
     info.Issuer.pbData = encodedCommonNameNoNull;
     SetLastError(0xdeadbeef);
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (!(dwEncoding & PKCS_7_ASN_ENCODING))
         ok(!ret && GetLastError() == E_INVALIDARG,
@@ -5238,7 +5242,7 @@ static void test_encodePKCSSignerInfo(DWORD dwEncoding)
     info.SerialNumber.cbData = sizeof(serialNum);
     info.SerialNumber.pbData = (BYTE *)serialNum;
     SetLastError(0xdeadbeef);
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (!(dwEncoding & PKCS_7_ASN_ENCODING))
         ok(!ret && GetLastError() == E_INVALIDARG,
@@ -5260,7 +5264,7 @@ static void test_encodePKCSSignerInfo(DWORD dwEncoding)
     }
     info.HashAlgorithm.pszObjId = oid1;
     SetLastError(0xdeadbeef);
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (!(dwEncoding & PKCS_7_ASN_ENCODING))
         ok(!ret && GetLastError() == E_INVALIDARG,
@@ -5282,7 +5286,7 @@ static void test_encodePKCSSignerInfo(DWORD dwEncoding)
     }
     info.HashEncryptionAlgorithm.pszObjId = oid2;
     SetLastError(0xdeadbeef);
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (!(dwEncoding & PKCS_7_ASN_ENCODING))
         ok(!ret && GetLastError() == E_INVALIDARG,
@@ -5305,7 +5309,7 @@ static void test_encodePKCSSignerInfo(DWORD dwEncoding)
     info.EncryptedHash.cbData = sizeof(hash);
     info.EncryptedHash.pbData = (BYTE *)hash;
     SetLastError(0xdeadbeef);
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (!(dwEncoding & PKCS_7_ASN_ENCODING))
         ok(!ret && GetLastError() == E_INVALIDARG,
@@ -5328,7 +5332,7 @@ static void test_encodePKCSSignerInfo(DWORD dwEncoding)
     info.AuthAttrs.cAttr = 1;
     info.AuthAttrs.rgAttr = &attr;
     SetLastError(0xdeadbeef);
-    ret = CryptEncodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO, &info,
+    ret = pCryptEncodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO, &info,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (!(dwEncoding & PKCS_7_ASN_ENCODING))
         ok(!ret && GetLastError() == E_INVALIDARG,
@@ -5359,12 +5363,12 @@ static void test_decodePKCSSignerInfo(DWORD dwEncoding)
 
     /* A PKCS signer can't be decoded without a serial number. */
     SetLastError(0xdeadbeef);
-    ret = CryptDecodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO,
+    ret = pCryptDecodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO,
      minimalPKCSSigner, sizeof(minimalPKCSSigner),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == CRYPT_E_ASN1_CORRUPT,
      "Expected CRYPT_E_ASN1_CORRUPT, got %x\n", GetLastError());
-    ret = CryptDecodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO,
+    ret = pCryptDecodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO,
      PKCSSignerWithSerial, sizeof(PKCSSignerWithSerial),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptDecodeObjectEx failed: %x\n", GetLastError());
@@ -5383,7 +5387,7 @@ static void test_decodePKCSSignerInfo(DWORD dwEncoding)
          "Unexpected value\n");
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO,
+    ret = pCryptDecodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO,
      PKCSSignerWithHashAlgo, sizeof(PKCSSignerWithHashAlgo),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
@@ -5403,7 +5407,7 @@ static void test_decodePKCSSignerInfo(DWORD dwEncoding)
          "Expected 1.2.3, got %s\n", info->HashAlgorithm.pszObjId);
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO,
+    ret = pCryptDecodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO,
      PKCSSignerWithHashAndEncryptionAlgo,
      sizeof(PKCSSignerWithHashAndEncryptionAlgo), CRYPT_DECODE_ALLOC_FLAG,
      NULL, (BYTE *)&buf, &size);
@@ -5426,7 +5430,7 @@ static void test_decodePKCSSignerInfo(DWORD dwEncoding)
          "Expected 1.5.6, got %s\n", info->HashEncryptionAlgorithm.pszObjId);
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO,
+    ret = pCryptDecodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO,
      PKCSSignerWithHash, sizeof(PKCSSignerWithHash),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
@@ -5452,7 +5456,7 @@ static void test_decodePKCSSignerInfo(DWORD dwEncoding)
          "Unexpected value\n");
         LocalFree(buf);
     }
-    ret = CryptDecodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO,
+    ret = pCryptDecodeObjectEx(dwEncoding, PKCS7_SIGNER_INFO,
      PKCSSignerWithAuthAttr, sizeof(PKCSSignerWithAuthAttr),
      CRYPT_DECODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     if (buf)
@@ -5503,7 +5507,7 @@ static void test_encodeNameConstraints(DWORD dwEncoding)
     LPBYTE buf;
     DWORD size;
 
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS, &constraints,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS, &constraints,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (ret)
@@ -5515,12 +5519,12 @@ static void test_encodeNameConstraints(DWORD dwEncoding)
     constraints.cPermittedSubtree = 1;
     constraints.rgPermittedSubtree = &permitted;
     SetLastError(0xdeadbeef);
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS, &constraints,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS, &constraints,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(!ret && GetLastError() == E_INVALIDARG,
      "Expected E_INVALIDARG, got %08x\n", GetLastError());
     permitted.Base.dwAltNameChoice = CERT_ALT_NAME_DNS_NAME;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS, &constraints,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS, &constraints,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (ret)
@@ -5534,7 +5538,7 @@ static void test_encodeNameConstraints(DWORD dwEncoding)
     constraints.cExcludedSubtree = 1;
     constraints.rgExcludedSubtree = &excluded;
     excluded.Base.dwAltNameChoice = CERT_ALT_NAME_DNS_NAME;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS, &constraints,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS, &constraints,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (ret)
@@ -5545,7 +5549,7 @@ static void test_encodeNameConstraints(DWORD dwEncoding)
         LocalFree(buf);
     }
     U(excluded.Base).pwszURL = (LPWSTR)url;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS, &constraints,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS, &constraints,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (ret)
@@ -5559,7 +5563,7 @@ static void test_encodeNameConstraints(DWORD dwEncoding)
     U(permitted.Base).IPAddress.cbData = sizeof(encodedIPAddr);
     U(permitted.Base).IPAddress.pbData = (LPBYTE)encodedIPAddr;
     constraints.cPermittedSubtree = 1;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS, &constraints,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS, &constraints,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (ret)
@@ -5571,7 +5575,7 @@ static void test_encodeNameConstraints(DWORD dwEncoding)
         LocalFree(buf);
     }
     permitted.dwMinimum = 5;
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS, &constraints,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS, &constraints,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (ret)
@@ -5585,7 +5589,7 @@ static void test_encodeNameConstraints(DWORD dwEncoding)
     permitted.fMaximum = TRUE;
     permitted.dwMaximum = 3;
     SetLastError(0xdeadbeef);
-    ret = CryptEncodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS, &constraints,
+    ret = pCryptEncodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS, &constraints,
      CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&buf, &size);
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (ret)
@@ -5652,7 +5656,7 @@ static void test_decodeNameConstraints(DWORD dwEncoding)
     {
         DWORD size;
 
-        ret = CryptDecodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS,
+        ret = pCryptDecodeObjectEx(dwEncoding, X509_NAME_CONSTRAINTS,
          encodedNameConstraints[i].encoded.pbData,
          encodedNameConstraints[i].encoded.cbData,
          CRYPT_DECODE_ALLOC_FLAG, NULL, &constraints, &size);
@@ -5852,8 +5856,18 @@ START_TEST(encode)
 {
     static const DWORD encodings[] = { X509_ASN_ENCODING, PKCS_7_ASN_ENCODING,
      X509_ASN_ENCODING | PKCS_7_ASN_ENCODING };
+    HMODULE hCrypt32;
     DWORD i;
 
+    hCrypt32 = GetModuleHandleA("crypt32.dll");
+    pCryptDecodeObjectEx = (void*)GetProcAddress(hCrypt32, "CryptDecodeObjectEx");
+    pCryptEncodeObjectEx = (void*)GetProcAddress(hCrypt32, "CryptEncodeObjectEx");
+    if (!pCryptDecodeObjectEx || !pCryptEncodeObjectEx)
+    {
+        skip("CryptDecodeObjectEx() is not available\n");
+        return;
+    }
+
     for (i = 0; i < sizeof(encodings) / sizeof(encodings[0]); i++)
     {
         test_encodeInt(encodings[i]);
diff --git a/dlls/crypt32/tests/oid.c b/dlls/crypt32/tests/oid.c
index f4f11f0..b4950fc 100644
--- a/dlls/crypt32/tests/oid.c
+++ b/dlls/crypt32/tests/oid.c
@@ -27,6 +27,10 @@
 
 #include "wine/test.h"
 
+
+static BOOL (WINAPI *pCryptEnumOIDInfo)(DWORD,DWORD,void*,PFN_CRYPT_ENUM_OID_INFO);
+
+
 struct OIDToAlgID
 {
     LPCSTR oid;
@@ -471,14 +475,20 @@ static void test_enumOIDInfo(void)
     BOOL ret;
     DWORD count = 0;
 
+    if (!pCryptEnumOIDInfo)
+    {
+        skip("CryptEnumOIDInfo() is not available\n");
+        return;
+    }
+
     /* This crashes
-    ret = CryptEnumOIDInfo(7, 0, NULL, NULL);
+    ret = pCryptEnumOIDInfo(7, 0, NULL, NULL);
      */
 
     /* Silly tests, check that more than one thing is enumerated */
-    ret = CryptEnumOIDInfo(0, 0, &count, countOidInfo);
+    ret = pCryptEnumOIDInfo(0, 0, &count, countOidInfo);
     ok(ret && count > 0, "Expected more than item enumerated\n");
-    ret = CryptEnumOIDInfo(0, 0, NULL, noOidInfo);
+    ret = pCryptEnumOIDInfo(0, 0, NULL, noOidInfo);
     ok(!ret, "Expected FALSE\n");
 }
 
@@ -532,6 +542,9 @@ static void test_findOIDInfo(void)
 
 START_TEST(oid)
 {
+    HMODULE hCrypt32 = GetModuleHandleA("crypt32.dll");
+    pCryptEnumOIDInfo = (void*)GetProcAddress(hCrypt32, "CryptEnumOIDInfo");
+
     testOIDToAlgID();
     testAlgIDToOID();
     test_enumOIDInfo();
diff --git a/dlls/crypt32/tests/protectdata.c b/dlls/crypt32/tests/protectdata.c
index 64ffa68..0dfad9a 100644
--- a/dlls/crypt32/tests/protectdata.c
+++ b/dlls/crypt32/tests/protectdata.c
@@ -27,6 +27,9 @@
 
 #include "wine/test.h"
 
+static BOOL (WINAPI *pCryptProtectData)(DATA_BLOB*,LPCWSTR,DATA_BLOB*,PVOID,CRYPTPROTECT_PROMPTSTRUCT*,DWORD,DATA_BLOB*);
+static BOOL (WINAPI *pCryptUnprotectData)(DATA_BLOB*,LPWSTR*,DATA_BLOB*,PVOID,CRYPTPROTECT_PROMPTSTRUCT*,DWORD,DATA_BLOB*);
+
 static char  secret[]     = "I am a super secret string that no one can see!";
 static char  secret2[]    = "I am a super secret string indescribable string";
 static char  key[]        = "Wibble wibble wibble";
@@ -49,13 +52,13 @@ static void test_cryptprotectdata(void)
     entropy.cbData=strlen(key)+1;
 
     SetLastError(0xDEADBEEF);
-    protected = CryptProtectData(NULL,desc,NULL,NULL,NULL,0,&cipher);
+    protected = pCryptProtectData(NULL,desc,NULL,NULL,NULL,0,&cipher);
     ok(!protected, "Encrypting without plain data source.\n");
     r = GetLastError();
     ok(r == ERROR_INVALID_PARAMETER, "Wrong (%u) GetLastError seen\n",r);
 
     SetLastError(0xDEADBEEF);
-    protected = CryptProtectData(&plain,desc,NULL,NULL,NULL,0,NULL);
+    protected = pCryptProtectData(&plain,desc,NULL,NULL,NULL,0,NULL);
     ok(!protected, "Encrypting without cipher destination.\n");
     r = GetLastError();
     ok(r == ERROR_INVALID_PARAMETER, "Wrong (%u) GetLastError seen\n",r);
@@ -65,7 +68,7 @@ static void test_cryptprotectdata(void)
 
     /* without entropy */
     SetLastError(0xDEADBEEF);
-    protected = CryptProtectData(&plain,desc,NULL,NULL,NULL,0,&cipher);
+    protected = pCryptProtectData(&plain,desc,NULL,NULL,NULL,0,&cipher);
     ok(protected, "Encrypting without entropy.\n");
     r = GetLastError();
     ok(r == ERROR_SUCCESS, "Wrong (%u) GetLastError seen\n",r);
@@ -75,7 +78,7 @@ static void test_cryptprotectdata(void)
 
     /* with entropy */
     SetLastError(0xDEADBEEF);
-    protected = CryptProtectData(&plain,desc,&entropy,NULL,NULL,0,&cipher_entropy);
+    protected = pCryptProtectData(&plain,desc,&entropy,NULL,NULL,0,&cipher_entropy);
     ok(protected, "Encrypting with entropy.\n");
     r = GetLastError();
     ok(r == ERROR_SUCCESS, "Wrong (%u) GetLastError seen\n",r);
@@ -87,7 +90,7 @@ static void test_cryptprotectdata(void)
     plain.pbData=(void*)secret2;
     plain.cbData=strlen(secret2)+1;
     SetLastError(0xDEADBEEF);
-    protected = CryptProtectData(&plain,NULL,&entropy,NULL,NULL,0,&cipher_no_desc);
+    protected = pCryptProtectData(&plain,NULL,&entropy,NULL,NULL,0,&cipher_no_desc);
     ok(protected, "Encrypting with entropy and no description.\n");
     r = GetLastError();
     ok(r == ERROR_SUCCESS, "Wrong (%u) GetLastError seen\n",r);
@@ -111,13 +114,13 @@ static void test_cryptunprotectdata(void)
     plain.cbData=0;
 
     SetLastError(0xDEADBEEF);
-    okay = CryptUnprotectData(&cipher,NULL,NULL,NULL,NULL,0,NULL);
+    okay = pCryptUnprotectData(&cipher,NULL,NULL,NULL,NULL,0,NULL);
     ok(!okay,"Decrypting without destination\n");
     r = GetLastError();
     ok(r == ERROR_INVALID_PARAMETER, "Wrong (%u) GetLastError seen\n",r);
 
     SetLastError(0xDEADBEEF);
-    okay = CryptUnprotectData(NULL,NULL,NULL,NULL,NULL,0,&plain);
+    okay = pCryptUnprotectData(NULL,NULL,NULL,NULL,NULL,0,&plain);
     ok(!okay,"Decrypting without source\n");
     r = GetLastError();
     ok(r == ERROR_INVALID_PARAMETER, "Wrong (%u) GetLastError seen\n",r);
@@ -126,7 +129,7 @@ static void test_cryptunprotectdata(void)
     plain.cbData=0;
 
     SetLastError(0xDEADBEEF);
-    okay = CryptUnprotectData(&cipher_entropy,NULL,NULL,NULL,NULL,0,&plain);
+    okay = pCryptUnprotectData(&cipher_entropy,NULL,NULL,NULL,NULL,0,&plain);
     ok(!okay,"Decrypting without needed entropy\n");
     r = GetLastError();
     ok(r == ERROR_INVALID_DATA, "Wrong (%u) GetLastError seen\n", r);
@@ -137,7 +140,7 @@ static void test_cryptunprotectdata(void)
 
     /* without entropy */
     SetLastError(0xDEADBEEF);
-    okay = CryptUnprotectData(&cipher,&data_desc,NULL,NULL,NULL,0,&plain);
+    okay = pCryptUnprotectData(&cipher,&data_desc,NULL,NULL,NULL,0,&plain);
     ok(okay,"Decrypting without entropy\n");
     r = GetLastError();
     ok(r == ERROR_SUCCESS, "Wrong (%u) GetLastError seen\n",r);
@@ -157,14 +160,14 @@ static void test_cryptunprotectdata(void)
 
     /* with wrong entropy */
     SetLastError(0xDEADBEEF);
-    okay = CryptUnprotectData(&cipher_entropy,&data_desc,&cipher_entropy,NULL,NULL,0,&plain);
+    okay = pCryptUnprotectData(&cipher_entropy,&data_desc,&cipher_entropy,NULL,NULL,0,&plain);
     ok(!okay,"Decrypting with wrong entropy\n");
     r = GetLastError();
     ok(r == ERROR_INVALID_DATA, "Wrong (%u) GetLastError seen\n",r);
 
     /* with entropy */
     SetLastError(0xDEADBEEF);
-    okay = CryptUnprotectData(&cipher_entropy,&data_desc,&entropy,NULL,NULL,0,&plain);
+    okay = pCryptUnprotectData(&cipher_entropy,&data_desc,&entropy,NULL,NULL,0,&plain);
     ok(okay,"Decrypting with entropy\n");
     r = GetLastError();
     ok(r == ERROR_SUCCESS, "Wrong (%u) GetLastError seen\n",r);
@@ -184,7 +187,7 @@ static void test_cryptunprotectdata(void)
 
     /* with entropy but no description */
     SetLastError(0xDEADBEEF);
-    okay = CryptUnprotectData(&cipher_no_desc,&data_desc,&entropy,NULL,NULL,0,&plain);
+    okay = pCryptUnprotectData(&cipher_no_desc,&data_desc,&entropy,NULL,NULL,0,&plain);
     ok(okay,"Decrypting with entropy and no description\n");
     r = GetLastError();
     ok(r == ERROR_SUCCESS, "Wrong (%u) GetLastError seen\n",r);
@@ -204,8 +207,17 @@ static void test_cryptunprotectdata(void)
 
 START_TEST(protectdata)
 {
-    protected=FALSE;
+    HMODULE hCrypt32 = GetModuleHandleA("crypt32.dll");
+    hCrypt32 = GetModuleHandleA("crypt32.dll");
+    pCryptProtectData = (void*)GetProcAddress(hCrypt32, "CryptProtectData");
+    pCryptUnprotectData = (void*)GetProcAddress(hCrypt32, "CryptUnprotectData");
+    if (!pCryptProtectData || !pCryptUnprotectData)
+    {
+        skip("Crypt(Un)ProtectData() is not available\n");
+        return;
+    }
 
+    protected=FALSE;
     test_cryptprotectdata();
     test_cryptunprotectdata();
 
diff --git a/dlls/crypt32/tests/store.c b/dlls/crypt32/tests/store.c
index 05ea5e0..95c8054 100644
--- a/dlls/crypt32/tests/store.c
+++ b/dlls/crypt32/tests/store.c
@@ -94,6 +94,15 @@ static const BYTE bigCert2[] = { 0x30, 0x7a, 0x02, 0x01, 0x01, 0x30, 0x02, 0x06,
  0x00, 0xa3, 0x16, 0x30, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01,
  0x01, 0xff, 0x04, 0x08, 0x30, 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x01 };
 
+
+static BOOL (WINAPI *pCertAddStoreToCollection)(HCERTSTORE,HCERTSTORE,DWORD,DWORD);
+static BOOL (WINAPI *pCertControlStore)(HCERTSTORE,DWORD,DWORD,void const*);
+static PCCRL_CONTEXT (WINAPI *pCertEnumCRLsInStore)(HCERTSTORE,PCCRL_CONTEXT);
+static BOOL (WINAPI *pCertEnumSystemStore)(DWORD,void*,void*,PFN_CERT_ENUM_SYSTEM_STORE);
+static BOOL (WINAPI *pCertGetStoreProperty)(HCERTSTORE,DWORD,void*,DWORD*);
+static void (WINAPI *pCertRemoveStoreFromCollection)(HCERTSTORE,HCERTSTORE);
+static BOOL (WINAPI *pCertSetStoreProperty)(HCERTSTORE,DWORD,DWORD,const void*);
+
 static void testMemStore(void)
 {
     HCERTSTORE store1, store2;
@@ -274,6 +283,12 @@ static void testCollectionStore(void)
     PCCERT_CONTEXT context;
     BOOL ret;
 
+    if (!pCertAddStoreToCollection)
+    {
+        skip("CertAddStoreToCollection() is not available\n");
+        return;
+    }
+
     collection = CertOpenStore(CERT_STORE_PROV_COLLECTION, 0, 0,
      CERT_STORE_CREATE_NEW_FLAG, NULL);
 
@@ -290,7 +305,7 @@ static void testCollectionStore(void)
      bigCert, sizeof(bigCert), CERT_STORE_ADD_ALWAYS, NULL);
     ok(ret, "CertAddEncodedCertificateToStore failed: %08x\n", GetLastError());
     /* Add the memory store to the collection, without allowing adding */
-    ret = CertAddStoreToCollection(collection, store1, 0, 0);
+    ret = pCertAddStoreToCollection(collection, store1, 0, 0);
     ok(ret, "CertAddStoreToCollection failed: %08x\n", GetLastError());
     /* Verify the cert is in the collection */
     context = CertEnumCertificatesInStore(collection, NULL);
@@ -310,26 +325,26 @@ static void testCollectionStore(void)
     store2 = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
      CERT_STORE_CREATE_NEW_FLAG, NULL);
     /* Try adding a store to a non-collection store */
-    ret = CertAddStoreToCollection(store1, store2,
+    ret = pCertAddStoreToCollection(store1, store2,
      CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG, 0);
     ok(!ret && GetLastError() == E_INVALIDARG,
      "Expected E_INVALIDARG, got %08x\n", GetLastError());
     /* Try adding some bogus stores */
     /* This crashes in Windows
-    ret = CertAddStoreToCollection(0, store2,
+    ret = pCertAddStoreToCollection(0, store2,
      CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG, 0);
      */
     /* This "succeeds"... */
-    ret = CertAddStoreToCollection(collection, 0,
+    ret = pCertAddStoreToCollection(collection, 0,
      CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG, 0);
     ok(ret, "CertAddStoreToCollection failed: %08x\n", GetLastError());
     /* while this crashes.
-    ret = CertAddStoreToCollection(collection, 1,
+    ret = pCertAddStoreToCollection(collection, 1,
      CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG, 0);
      */
 
     /* Add it to the collection, this time allowing adding */
-    ret = CertAddStoreToCollection(collection, store2,
+    ret = pCertAddStoreToCollection(collection, store2,
      CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG, 0);
     ok(ret, "CertAddStoreToCollection failed: %08x\n", GetLastError());
     /* Check that adding to the collection is allowed */
@@ -397,7 +412,7 @@ static void testCollectionStore(void)
     /* Adding a collection to a collection is legal */
     collection2 = CertOpenStore(CERT_STORE_PROV_COLLECTION, 0, 0,
      CERT_STORE_CREATE_NEW_FLAG, NULL);
-    ret = CertAddStoreToCollection(collection2, collection,
+    ret = pCertAddStoreToCollection(collection2, collection,
      CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG, 0);
     ok(ret, "CertAddStoreToCollection failed: %08x\n", GetLastError());
     /* check the contents of collection2 */
@@ -457,10 +472,10 @@ static void testCollectionStore(void)
      CERT_STORE_CREATE_NEW_FLAG, NULL);
     ok(collection != 0, "CertOpenStore failed: %08x\n", GetLastError());
 
-    ret = CertAddStoreToCollection(collection, store1,
+    ret = pCertAddStoreToCollection(collection, store1,
      CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG, 0);
     ok(ret, "CertAddStoreToCollection failed: %08x\n", GetLastError());
-    ret = CertAddStoreToCollection(collection, store2,
+    ret = pCertAddStoreToCollection(collection, store2,
      CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG, 0);
     ok(ret, "CertAddStoreToCollection failed: %08x\n", GetLastError());
 
@@ -528,25 +543,32 @@ static void testCollectionStore(void)
         ok(context == NULL, "Unexpected cert\n");
     }
 
-    /* Finally, test removing stores from the collection.  No return value, so
-     * it's a bit funny to test.
-     */
-    /* This crashes
-    CertRemoveStoreFromCollection(NULL, NULL);
-     */
-    /* This "succeeds," no crash, no last error set */
-    SetLastError(0xdeadbeef);
-    CertRemoveStoreFromCollection(store2, collection);
-    ok(GetLastError() == 0xdeadbeef,
-     "Didn't expect an error to be set: %08x\n", GetLastError());
-
-    /* After removing store2, the collection should be empty */
-    SetLastError(0xdeadbeef);
-    CertRemoveStoreFromCollection(collection, store2);
-    ok(GetLastError() == 0xdeadbeef,
-     "Didn't expect an error to be set: %08x\n", GetLastError());
-    context = CertEnumCertificatesInStore(collection, NULL);
-    ok(!context, "Unexpected cert\n");
+    if (!pCertRemoveStoreFromCollection)
+    {
+        skip("CertRemoveStoreFromCollection() is not available\n");
+    }
+    else
+    {
+        /* Finally, test removing stores from the collection.  No return
+         *  value, so it's a bit funny to test.
+         */
+        /* This crashes
+         * pCertRemoveStoreFromCollection(NULL, NULL);
+         */
+        /* This "succeeds," no crash, no last error set */
+        SetLastError(0xdeadbeef);
+        pCertRemoveStoreFromCollection(store2, collection);
+        ok(GetLastError() == 0xdeadbeef,
+           "Didn't expect an error to be set: %08x\n", GetLastError());
+
+        /* After removing store2, the collection should be empty */
+        SetLastError(0xdeadbeef);
+        pCertRemoveStoreFromCollection(collection, store2);
+        ok(GetLastError() == 0xdeadbeef,
+           "Didn't expect an error to be set: %08x\n", GetLastError());
+        context = CertEnumCertificatesInStore(collection, NULL);
+        ok(!context, "Unexpected cert\n");
+    }
 
     CertCloseStore(collection, 0);
     CertCloseStore(store2, 0);
@@ -614,6 +636,13 @@ static void testRegStore(void)
     todo_wine ok(store != 0, "CertOpenStore failed: %08x\n", GetLastError());
     CertCloseStore(store, 0);
 
+    /* It looks like the remainder pretty much needs CertControlStore() */
+    if (!pCertControlStore)
+    {
+        skip("CertControlStore() is not available\n");
+        return;
+    }
+
     rc = RegCreateKeyExA(HKEY_CURRENT_USER, tempKey, 0, NULL, 0, KEY_ALL_ACCESS,
      NULL, &key, NULL);
     ok(!rc, "RegCreateKeyExA failed: %d\n", rc);
@@ -637,7 +666,7 @@ static void testRegStore(void)
         ok(ret, "CertAddEncodedCertificateToStore failed: %08x\n",
          GetLastError());
         /* so flush the cache to force a commit.. */
-        ret = CertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
+        ret = pCertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
         ok(ret, "CertControlStore failed: %08x\n", GetLastError());
         /* and check that the expected subkey was written. */
         size = sizeof(hash);
@@ -696,7 +725,7 @@ static void testRegStore(void)
         ok(context != NULL, "Expected a cert context\n");
         if (context)
             CertDeleteCertificateFromStore(context);
-        ret = CertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
+        ret = pCertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
         ok(ret, "CertControlStore failed: %08x\n", GetLastError());
 
         /* Add a serialized cert with a bogus hash directly to the registry */
@@ -733,7 +762,7 @@ static void testRegStore(void)
              sizeof(buf));
             ok(!rc, "RegSetValueExA failed: %d\n", rc);
 
-            ret = CertControlStore(store, 0, CERT_STORE_CTRL_RESYNC, NULL);
+            ret = pCertControlStore(store, 0, CERT_STORE_CTRL_RESYNC, NULL);
             ok(ret, "CertControlStore failed: %08x\n", GetLastError());
 
             /* Make sure the bogus hash cert gets loaded. */
@@ -790,7 +819,7 @@ static void testRegStore(void)
              sizeof(buf));
             ok(!rc, "RegSetValueExA failed: %d\n", rc);
 
-            ret = CertControlStore(store, 0, CERT_STORE_CTRL_RESYNC, NULL);
+            ret = pCertControlStore(store, 0, CERT_STORE_CTRL_RESYNC, NULL);
             ok(ret, "CertControlStore failed: %08x\n", GetLastError());
 
             /* and make sure just one cert still gets loaded. */
@@ -811,7 +840,7 @@ static void testRegStore(void)
              sizeof(buf));
             ok(!rc, "RegSetValueExA failed: %d\n", rc);
 
-            ret = CertControlStore(store, 0, CERT_STORE_CTRL_RESYNC, NULL);
+            ret = pCertControlStore(store, 0, CERT_STORE_CTRL_RESYNC, NULL);
             ok(ret, "CertControlStore failed: %08x\n", GetLastError());
 
             /* and make sure two certs get loaded. */
@@ -893,10 +922,12 @@ static void testSystemRegStore(void)
      CERT_STORE_CREATE_NEW_FLAG, NULL);
     if (memStore)
     {
-        BOOL ret = CertAddStoreToCollection(store, memStore, 0, 0);
-
-        ok(!ret && GetLastError() == E_INVALIDARG,
-         "Expected E_INVALIDARG, got %08x\n", GetLastError());
+        if (pCertAddStoreToCollection)
+        {
+            BOOL ret = pCertAddStoreToCollection(store, memStore, 0, 0);
+            ok(!ret && GetLastError() == E_INVALIDARG,
+               "Expected E_INVALIDARG, got %08x\n", GetLastError());
+        }
         CertCloseStore(memStore, 0);
     }
     CertCloseStore(store, 0);
@@ -984,10 +1015,12 @@ static void testSystemStore(void)
         /* Check that it's a collection store */
         if (memStore)
         {
-            BOOL ret = CertAddStoreToCollection(store, memStore, 0, 0);
-
-            /* FIXME: this'll fail on NT4, but what error will it give? */
-            ok(ret, "CertAddStoreToCollection failed: %08x\n", GetLastError());
+            if (pCertAddStoreToCollection)
+            {
+                BOOL ret = pCertAddStoreToCollection(store, memStore, 0, 0);
+                /* FIXME: this'll fail on NT4, but what error will it give? */
+                ok(ret, "CertAddStoreToCollection failed: %08x\n", GetLastError());
+            }
             CertCloseStore(memStore, 0);
         }
         CertCloseStore(store, 0);
@@ -1073,7 +1106,13 @@ static void testFileStore(void)
     BOOL ret;
     PCCERT_CONTEXT cert;
     HANDLE file;
- 
+
+    if (!pCertControlStore)
+    {
+        skip("CertControlStore() is not available\n");
+        return;
+    }
+
     store = CertOpenStore(CERT_STORE_PROV_FILE, 0, 0, 0, NULL);
     ok(!store && GetLastError() == ERROR_INVALID_HANDLE,
      "Expected ERROR_INVALID_HANDLE, got %08x\n", GetLastError());
@@ -1109,7 +1148,7 @@ static void testFileStore(void)
         /* apparently allows adding certificates.. */
         ok(ret, "CertAddEncodedCertificateToStore failed: %d\n", ret);
         /* but not commits.. */
-        ret = CertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
+        ret = pCertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
         ok(!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED,
          "Expected ERROR_CALL_NOT_IMPLEMENTED, got %08x\n", GetLastError());
         /* It still has certs in memory.. */
@@ -1133,7 +1172,7 @@ static void testFileStore(void)
         ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
          bigCert, sizeof(bigCert), CERT_STORE_ADD_ALWAYS, NULL);
         ok(ret, "CertAddEncodedCertificateToStore failed: %d\n", ret);
-        ret = CertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
+        ret = pCertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
         ok(!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED,
          "Expected ERROR_CALL_NOT_IMPLEMENTED, got %08x\n", GetLastError());
         CertCloseStore(store, 0);
@@ -1148,7 +1187,7 @@ static void testFileStore(void)
         ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
          bigCert, sizeof(bigCert), CERT_STORE_ADD_ALWAYS, NULL);
         ok(ret, "CertAddEncodedCertificateToStore failed: %d\n", ret);
-        ret = CertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
+        ret = pCertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
         ok(!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED,
          "Expected ERROR_CALL_NOT_IMPLEMENTED, got %08x\n", GetLastError());
         CertCloseStore(store, 0);
@@ -1164,7 +1203,7 @@ static void testFileStore(void)
         ok(ret, "CertAddEncodedCertificateToStore failed: %08x\n",
          GetLastError());
         /* with commits enabled, commit is allowed */
-        ret = CertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
+        ret = pCertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
         ok(ret, "CertControlStore failed: %d\n", ret);
         compareFile(filename, serializedStoreWithCert,
          sizeof(serializedStoreWithCert));
@@ -1248,8 +1287,11 @@ static void testFileNameStore(void)
          GetLastError());
         cert = CertEnumCertificatesInStore(store, cert);
         ok(!cert, "Expected only one cert\n");
-        crl = CertEnumCRLsInStore(store, NULL);
-        ok(!crl, "Expected no CRLs\n");
+        if (pCertEnumCRLsInStore)
+        {
+            crl = pCertEnumCRLsInStore(store, NULL);
+            ok(!crl, "Expected no CRLs\n");
+        }
 
         CertCloseStore(store, 0);
         DeleteFileW(filename);
@@ -1269,8 +1311,11 @@ static void testFileNameStore(void)
          GetLastError());
         cert = CertEnumCertificatesInStore(store, cert);
         ok(!cert, "Expected only one cert\n");
-        crl = CertEnumCRLsInStore(store, NULL);
-        ok(!crl, "Expected no CRLs\n");
+        if (pCertEnumCRLsInStore)
+        {
+            crl = pCertEnumCRLsInStore(store, NULL);
+            ok(!crl, "Expected no CRLs\n");
+        }
 
         CertCloseStore(store, 0);
         DeleteFileW(filename);
@@ -1290,10 +1335,13 @@ static void testFileNameStore(void)
          GetLastError());
         cert = CertEnumCertificatesInStore(store, cert);
         ok(!cert, "Expected only one cert\n");
-        crl = CertEnumCRLsInStore(store, NULL);
-        ok(crl != NULL, "CertEnumCRLsInStore failed: %08x\n", GetLastError());
-        crl = CertEnumCRLsInStore(store, crl);
-        ok(!crl, "Expected only one CRL\n");
+        if (pCertEnumCRLsInStore)
+        {
+            crl = pCertEnumCRLsInStore(store, NULL);
+            ok(crl != NULL, "CertEnumCRLsInStore failed: %08x\n", GetLastError());
+            crl = pCertEnumCRLsInStore(store, crl);
+            ok(!crl, "Expected only one CRL\n");
+        }
 
         CertCloseStore(store, 0);
         /* Don't delete it this time, the next test uses it */
@@ -1416,13 +1464,16 @@ static void testMessageStore(void)
         } while (cert);
         ok(count == 0, "Expected 0 certificates, got %d\n", count);
 
-        count = 0;
-        do {
-            crl = CertEnumCRLsInStore(store, crl);
-            if (crl)
-                count++;
-        } while (crl);
-        ok(count == 0, "Expected 0 CRLs, got %d\n", count);
+        if (pCertEnumCRLsInStore)
+        {
+            count = 0;
+            do {
+                crl = pCertEnumCRLsInStore(store, crl);
+                if (crl)
+                    count++;
+            } while (crl);
+            ok(count == 0, "Expected 0 CRLs, got %d\n", count);
+        }
 
         /* Can add certs to a message store */
         ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
@@ -1464,13 +1515,16 @@ static void testMessageStore(void)
         } while (cert);
         ok(count == 1, "Expected 1 certificate, got %d\n", count);
 
-        count = 0;
-        do {
-            crl = CertEnumCRLsInStore(store, crl);
-            if (crl)
-                count++;
-        } while (crl);
-        ok(count == 1, "Expected 1 CRL, got %d\n", count);
+        if (pCertEnumCRLsInStore)
+        {
+            count = 0;
+            do {
+                crl = pCertEnumCRLsInStore(store, crl);
+                if (crl)
+                    count++;
+            } while (crl);
+            ok(count == 1, "Expected 1 CRL, got %d\n", count);
+        }
         CertCloseStore(store, 0);
     }
     /* Encoding appears to be ignored */
@@ -1534,17 +1588,23 @@ static void testCertEnumSystemStore(void)
     BOOL ret;
     struct EnumSystemStoreInfo info = { FALSE, 0 };
 
+    if (!pCertEnumSystemStore)
+    {
+        skip("CertEnumSystemStore() is not available\n");
+        return;
+    }
+
     SetLastError(0xdeadbeef);
-    ret = CertEnumSystemStore(0, NULL, NULL, NULL);
+    ret = pCertEnumSystemStore(0, NULL, NULL, NULL);
     ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
      "Expected ERROR_FILE_NOT_FOUND, got %08x\n", GetLastError());
     /* Crashes
-    ret = CertEnumSystemStore(CERT_SYSTEM_STORE_LOCAL_MACHINE, NULL, NULL,
+    ret = pCertEnumSystemStore(CERT_SYSTEM_STORE_LOCAL_MACHINE, NULL, NULL,
      NULL);
      */
 
     SetLastError(0xdeadbeef);
-    ret = CertEnumSystemStore(CERT_SYSTEM_STORE_LOCAL_MACHINE, NULL, &info,
+    ret = pCertEnumSystemStore(CERT_SYSTEM_STORE_LOCAL_MACHINE, NULL, &info,
      enumSystemStoreCB);
     /* Callback returning FALSE stops enumeration */
     ok(!ret, "Expected CertEnumSystemStore to stop\n");
@@ -1553,7 +1613,7 @@ static void testCertEnumSystemStore(void)
 
     info.goOn = TRUE;
     info.storeCount = 0;
-    ret = CertEnumSystemStore(CERT_SYSTEM_STORE_LOCAL_MACHINE, NULL, &info,
+    ret = pCertEnumSystemStore(CERT_SYSTEM_STORE_LOCAL_MACHINE, NULL, &info,
      enumSystemStoreCB);
     ok(ret, "CertEnumSystemStore failed: %08x\n", GetLastError());
     /* There should always be at least My, Root, and CA stores */
@@ -1568,52 +1628,58 @@ static void testStoreProperty(void)
     DWORD propID, size = 0, state;
     CRYPT_DATA_BLOB blob;
 
+    if (!pCertGetStoreProperty || !pCertSetStoreProperty)
+    {
+        skip("CertGet/SetStoreProperty() is not available\n");
+        return;
+    }
+
     /* Crash
-    ret = CertGetStoreProperty(NULL, 0, NULL, NULL);
-    ret = CertGetStoreProperty(NULL, 0, NULL, &size);
-    ret = CertGetStoreProperty(store, 0, NULL, NULL);
+    ret = pCertGetStoreProperty(NULL, 0, NULL, NULL);
+    ret = pCertGetStoreProperty(NULL, 0, NULL, &size);
+    ret = pCertGetStoreProperty(store, 0, NULL, NULL);
      */
 
     store = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
      CERT_STORE_CREATE_NEW_FLAG, NULL);
     /* Check a missing prop ID */
     SetLastError(0xdeadbeef);
-    ret = CertGetStoreProperty(store, 0, NULL, &size);
+    ret = pCertGetStoreProperty(store, 0, NULL, &size);
     ok(!ret && GetLastError() == CRYPT_E_NOT_FOUND,
      "Expected CRYPT_E_NOT_FOUND, got %08x\n", GetLastError());
     /* Contrary to MSDN, CERT_ACCESS_STATE_PROP_ID is supported for stores.. */
     size = sizeof(state);
-    ret = CertGetStoreProperty(store, CERT_ACCESS_STATE_PROP_ID, &state, &size);
+    ret = pCertGetStoreProperty(store, CERT_ACCESS_STATE_PROP_ID, &state, &size);
     ok(ret, "CertGetStoreProperty failed for CERT_ACCESS_STATE_PROP_ID: %08x\n",
      GetLastError());
     ok(!state, "Expected a non-persisted store\n");
     /* and CERT_STORE_LOCALIZED_NAME_PROP_ID isn't supported by default. */
     size = 0;
-    ret = CertGetStoreProperty(store, CERT_STORE_LOCALIZED_NAME_PROP_ID, NULL,
+    ret = pCertGetStoreProperty(store, CERT_STORE_LOCALIZED_NAME_PROP_ID, NULL,
      &size);
     ok(!ret && GetLastError() == CRYPT_E_NOT_FOUND,
      "Expected CRYPT_E_NOT_FOUND, got %08x\n", GetLastError());
     /* Delete an arbitrary property on a store */
-    ret = CertSetStoreProperty(store, CERT_FIRST_USER_PROP_ID, 0, NULL);
+    ret = pCertSetStoreProperty(store, CERT_FIRST_USER_PROP_ID, 0, NULL);
     ok(ret, "CertSetStoreProperty failed: %08x\n", GetLastError());
     /* Set an arbitrary property on a store */
     blob.pbData = (LPBYTE)&state;
     blob.cbData = sizeof(state);
-    ret = CertSetStoreProperty(store, CERT_FIRST_USER_PROP_ID, 0, &blob);
+    ret = pCertSetStoreProperty(store, CERT_FIRST_USER_PROP_ID, 0, &blob);
     ok(ret, "CertSetStoreProperty failed: %08x\n", GetLastError());
     /* Get an arbitrary property that's been set */
-    ret = CertGetStoreProperty(store, CERT_FIRST_USER_PROP_ID, NULL, &size);
+    ret = pCertGetStoreProperty(store, CERT_FIRST_USER_PROP_ID, NULL, &size);
     ok(ret, "CertGetStoreProperty failed: %08x\n", GetLastError());
     ok(size == sizeof(state), "Unexpected data size %d\n", size);
-    ret = CertGetStoreProperty(store, CERT_FIRST_USER_PROP_ID, &propID, &size);
+    ret = pCertGetStoreProperty(store, CERT_FIRST_USER_PROP_ID, &propID, &size);
     ok(ret, "CertGetStoreProperty failed: %08x\n", GetLastError());
     ok(propID == state, "CertGetStoreProperty got the wrong value\n");
     /* Delete it again */
-    ret = CertSetStoreProperty(store, CERT_FIRST_USER_PROP_ID, 0, NULL);
+    ret = pCertSetStoreProperty(store, CERT_FIRST_USER_PROP_ID, 0, NULL);
     ok(ret, "CertSetStoreProperty failed: %08x\n", GetLastError());
     /* And check that it's missing */
     SetLastError(0xdeadbeef);
-    ret = CertGetStoreProperty(store, CERT_FIRST_USER_PROP_ID, NULL, &size);
+    ret = pCertGetStoreProperty(store, CERT_FIRST_USER_PROP_ID, NULL, &size);
     ok(!ret && GetLastError() == CRYPT_E_NOT_FOUND,
      "Expected CRYPT_E_NOT_FOUND, got %08x\n", GetLastError());
     CertCloseStore(store, 0);
@@ -1621,13 +1687,13 @@ static void testStoreProperty(void)
     /* Recheck on the My store.. */
     store = CertOpenSystemStoreW(0, MyW);
     size = sizeof(state);
-    ret = CertGetStoreProperty(store, CERT_ACCESS_STATE_PROP_ID, &state, &size);
+    ret = pCertGetStoreProperty(store, CERT_ACCESS_STATE_PROP_ID, &state, &size);
     ok(ret, "CertGetStoreProperty failed for CERT_ACCESS_STATE_PROP_ID: %08x\n",
      GetLastError());
     ok(state, "Expected a persisted store\n");
     SetLastError(0xdeadbeef);
     size = 0;
-    ret = CertGetStoreProperty(store, CERT_STORE_LOCALIZED_NAME_PROP_ID, NULL,
+    ret = pCertGetStoreProperty(store, CERT_STORE_LOCALIZED_NAME_PROP_ID, NULL,
      &size);
     ok(!ret && GetLastError() == CRYPT_E_NOT_FOUND,
      "Expected CRYPT_E_NOT_FOUND, got %08x\n", GetLastError());
@@ -1807,7 +1873,7 @@ static DWORD countCRLsInStore(HCERTSTORE store)
     DWORD crls = 0;
 
     do {
-        crl = CertEnumCRLsInStore(store, crl);
+        crl = pCertEnumCRLsInStore(store, crl);
         if (crl)
             crls++;
     } while (crl);
@@ -1869,8 +1935,11 @@ static void test_I_UpdateStore(void)
     ok(ret, "I_CertUpdateStore failed: %08x\n", GetLastError());
     certs = countCertsInStore(store1);
     ok(certs == 1, "Expected 1 cert, got %d\n", certs);
-    certs = countCRLsInStore(store1);
-    ok(certs == 1, "Expected 1 CRL, got %d\n", certs);
+    if (pCertEnumCRLsInStore)
+    {
+        certs = countCRLsInStore(store1);
+        ok(certs == 1, "Expected 1 CRL, got %d\n", certs);
+    }
 
     CertDeleteCertificateFromStore(cert);
     /* If a context is deleted from store2, I_CertUpdateStore delets it
@@ -1888,6 +1957,17 @@ static void test_I_UpdateStore(void)
 
 START_TEST(store)
 {
+    HMODULE hdll;
+
+    hdll = GetModuleHandleA("Crypt32.dll");
+    pCertAddStoreToCollection = (void*)GetProcAddress(hdll, "CertAddStoreToCollection");
+    pCertControlStore = (void*)GetProcAddress(hdll, "CertControlStore");
+    pCertEnumCRLsInStore = (void*)GetProcAddress(hdll, "CertEnumCRLsInStore");
+    pCertEnumSystemStore = (void*)GetProcAddress(hdll, "CertEnumSystemStore");
+    pCertGetStoreProperty = (void*)GetProcAddress(hdll, "CertGetStoreProperty");
+    pCertRemoveStoreFromCollection = (void*)GetProcAddress(hdll, "CertRemoveStoreFromCollection");
+    pCertSetStoreProperty = (void*)GetProcAddress(hdll, "CertSetStoreProperty");
+
     /* various combinations of CertOpenStore */
     testMemStore();
     testCollectionStore();
-- 
1.5.3.4




More information about the wine-patches mailing list