[PATCH 2/2] Cert(Un)RegisterSystemStore semi-stub

Donat Enikeev donat at enikeev.net
Wed Oct 12 04:32:12 CDT 2016


Per bug https://bugs.winehq.org/show_bug.cgi?id=40314
---
 dlls/crypt32/crypt32.spec |  2 ++
 dlls/crypt32/store.c      | 65 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 67 insertions(+)

diff --git a/dlls/crypt32/crypt32.spec b/dlls/crypt32/crypt32.spec
index 0d2a477..b5ce48c 100644
--- a/dlls/crypt32/crypt32.spec
+++ b/dlls/crypt32/crypt32.spec
@@ -78,6 +78,7 @@
 @ stdcall CertRDNValueToStrA(long ptr ptr long)
 @ stdcall CertRDNValueToStrW(long ptr ptr long)
 @ stdcall CertRegisterPhysicalStore(ptr long wstr ptr ptr)
+@ stdcall CertRegisterSystemStore(ptr long ptr ptr)
 @ stdcall CertRemoveEnhancedKeyUsageIdentifier(ptr str)
 @ stdcall CertRemoveStoreFromCollection(ptr ptr)
 @ stdcall CertSaveStore(ptr long long long ptr long)
@@ -190,6 +191,7 @@
 @ stdcall CryptUnprotectMemory(ptr long long)
 @ stdcall CryptUnregisterDefaultOIDFunction(long str wstr)
 @ stdcall CryptUnregisterOIDFunction(long str str)
+@ stdcall CertUnregisterSystemStore(ptr long)
 @ stub CryptUnregisterOIDInfo
 @ stdcall CryptVerifyCertificateSignature(long long ptr long ptr)
 @ stdcall CryptVerifyCertificateSignatureEx(long long long ptr long ptr long ptr)
diff --git a/dlls/crypt32/store.c b/dlls/crypt32/store.c
index d5d7443..735d59c 100644
--- a/dlls/crypt32/store.c
+++ b/dlls/crypt32/store.c
@@ -1390,6 +1390,71 @@ BOOL WINAPI CertRegisterPhysicalStore(const void *pvSystemStore, DWORD dwFlags,
     return FALSE;
 }
 
+BOOL WINAPI CertRegisterSystemStore(const void *pvSystemStore, DWORD dwFlags,
+  PCERT_SYSTEM_STORE_INFO pStoreInfo, void *pvReserved)
+{
+    LONG rc;
+    BOOL ret = FALSE;
+    HKEY parent_key, store_key;
+
+    if (dwFlags & CERT_SYSTEM_STORE_RELOCATE_FLAG )
+    {
+        FIXME("(%p, %08x, %p, %p): flag not supported\n", pvSystemStore, dwFlags, pStoreInfo, pvReserved);
+        return FALSE;
+    }
+
+    TRACE("(%s, %08x, %p, %p)\n", debugstr_w(pvSystemStore), dwFlags, pStoreInfo, pvReserved);
+
+    rc = CRYPT_OpenParentStore(dwFlags, NULL, &parent_key);
+    if (!rc)
+    {
+        rc = RegOpenKeyExW(parent_key, pvSystemStore, 0, KEY_READ, &store_key);
+        if (rc)
+        {
+            rc = RegCreateKeyExW(parent_key, pvSystemStore, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &store_key, NULL);
+            if (!rc)
+                ret = TRUE;
+        } else
+            ret = TRUE;
+        RegCloseKey(store_key);
+    }
+
+    RegCloseKey(parent_key);
+
+    return ret;
+}
+
+BOOL WINAPI CertUnregisterSystemStore(const void *pvSystemStore, DWORD dwFlags)
+{
+    LONG rc;
+    BOOL ret = FALSE;
+    HKEY parent_key, store_key;
+
+    if (dwFlags & CERT_SYSTEM_STORE_RELOCATE_FLAG)
+    {
+        FIXME("(%p, %08x): flag not supported\n", pvSystemStore, dwFlags);
+        return FALSE;
+    }
+
+    TRACE("(%s, %08x)\n", debugstr_w(pvSystemStore), dwFlags);
+
+    rc = CRYPT_OpenParentStore(dwFlags, NULL, &parent_key);
+    if (!rc)
+    {
+        rc = RegOpenKeyExW(parent_key, pvSystemStore, 0, KEY_READ, &store_key);
+        if (!rc)
+        {
+            rc = RegDeleteTreeW(parent_key, pvSystemStore);
+            if (!rc)
+                ret = TRUE;
+        }
+        RegCloseKey(store_key);
+    }
+
+    RegCloseKey(parent_key);
+    return ret;
+}
+
 static void EmptyStore_addref(WINECRYPT_CERTSTORE *store)
 {
     TRACE("(%p)\n", store);
-- 
2.7.4




More information about the wine-patches mailing list