Hans Leidekker : wintrust: Implement CryptCATAdminAddCatalog, CryptCATAdminReleaseCatalogContext and CryptCATAdminReleaseContext.

Alexandre Julliard julliard at winehq.org
Thu Dec 18 08:08:59 CST 2008


Module: wine
Branch: master
Commit: 02f805347d2904f8037f1ea6c460b06f1755829a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=02f805347d2904f8037f1ea6c460b06f1755829a

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Thu Dec 18 14:22:26 2008 +0100

wintrust: Implement CryptCATAdminAddCatalog, CryptCATAdminReleaseCatalogContext and CryptCATAdminReleaseContext.

Based on work done by Maarten Lankhorst.

---

 dlls/wintrust/crypt.c |   83 ++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 76 insertions(+), 7 deletions(-)

diff --git a/dlls/wintrust/crypt.c b/dlls/wintrust/crypt.c
index b69647d..b03740c 100644
--- a/dlls/wintrust/crypt.c
+++ b/dlls/wintrust/crypt.c
@@ -37,6 +37,7 @@
 WINE_DEFAULT_DEBUG_CHANNEL(wintrust);
 
 #define CATADMIN_MAGIC 0x43415441 /* 'CATA' */
+#define CATINFO_MAGIC  0x43415449 /* 'CATI' */
 
 struct catadmin
 {
@@ -44,6 +45,12 @@ struct catadmin
     WCHAR path[MAX_PATH];
 };
 
+struct catinfo
+{
+    DWORD magic;
+    WCHAR file[MAX_PATH];
+};
+
 /***********************************************************************
  *      CryptCATAdminAcquireContext (WINTRUST.@)
  *
@@ -114,9 +121,53 @@ BOOL WINAPI CryptCATAdminAcquireContext(HCATADMIN *catAdmin,
 HCATINFO WINAPI CryptCATAdminAddCatalog(HCATADMIN catAdmin, PWSTR catalogFile,
                                         PWSTR selectBaseName, DWORD flags)
 {
-    FIXME("%p %s %s %d\n", catAdmin, debugstr_w(catalogFile),
+    static const WCHAR slashW[] = {'\\',0};
+    struct catadmin *ca = catAdmin;
+    struct catinfo *ci;
+    WCHAR *target;
+    DWORD len;
+
+    TRACE("%p %s %s %d\n", catAdmin, debugstr_w(catalogFile),
           debugstr_w(selectBaseName), flags);
-    return (HCATINFO) 0xdeeeaaadL;
+
+    if (!selectBaseName)
+    {
+        FIXME("NULL basename not handled\n");
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+    if (!ca || ca->magic != CATADMIN_MAGIC || !catalogFile || flags)
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+
+    len = strlenW(ca->path) + strlenW(selectBaseName) + 2;
+    if (!(target = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR))))
+    {
+        SetLastError(ERROR_OUTOFMEMORY);
+        return FALSE;
+    }
+    strcpyW(target, ca->path);
+    strcatW(target, slashW);
+    strcatW(target, selectBaseName);
+
+    if (!CopyFileW(catalogFile, target, FALSE))
+    {
+        HeapFree(GetProcessHeap(), 0, target);
+        return NULL;
+    }
+    if (!(ci = HeapAlloc(GetProcessHeap(), 0, sizeof(*ci))))
+    {
+        HeapFree(GetProcessHeap(), 0, target);
+        SetLastError(ERROR_OUTOFMEMORY);
+        return FALSE;
+    }
+    ci->magic = CATINFO_MAGIC;
+    strcpyW(ci->file, selectBaseName);
+
+    HeapFree(GetProcessHeap(), 0, target);
+    return ci;
 }
 
 /***********************************************************************
@@ -156,15 +207,25 @@ HCATINFO WINAPI CryptCATAdminEnumCatalogFromHash(HCATADMIN hCatAdmin,
  *
  * RETURNS
  *   Success: TRUE.
- *   Failure: FAIL.
+ *   Failure: FALSE.
  *
  */
 BOOL WINAPI CryptCATAdminReleaseCatalogContext(HCATADMIN hCatAdmin,
                                                HCATINFO hCatInfo,
                                                DWORD dwFlags)
 {
-    FIXME("%p %p %x\n", hCatAdmin, hCatInfo, dwFlags);
-    return TRUE;
+    struct catinfo *ci = hCatInfo;
+    struct catadmin *ca = hCatAdmin;
+
+    TRACE("%p %p %x\n", hCatAdmin, hCatInfo, dwFlags);
+
+    if (!ca || ca->magic != CATADMIN_MAGIC || !ci || ci->magic != CATINFO_MAGIC)
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+    ci->magic = 0;
+    return HeapFree(GetProcessHeap(), 0, ci);
 }
 
 /***********************************************************************
@@ -178,7 +239,7 @@ BOOL WINAPI CryptCATAdminReleaseCatalogContext(HCATADMIN hCatAdmin,
  *
  * RETURNS
  *   Success: TRUE.
- *   Failure: FAIL.
+ *   Failure: FALSE.
  *
  */
 BOOL WINAPI CryptCATAdminReleaseContext(HCATADMIN hCatAdmin, DWORD dwFlags )
@@ -213,7 +274,15 @@ BOOL WINAPI CryptCATAdminReleaseContext(HCATADMIN hCatAdmin, DWORD dwFlags )
  */
 BOOL WINAPI CryptCATAdminRemoveCatalog(HCATADMIN hCatAdmin, LPCWSTR pwszCatalogFile, DWORD dwFlags)
 {
-    FIXME("%p %s %x\n", hCatAdmin, debugstr_w(pwszCatalogFile), dwFlags);
+    struct catadmin *ca = hCatAdmin;
+
+    TRACE("%p %s %x\n", hCatAdmin, debugstr_w(pwszCatalogFile), dwFlags);
+
+    if (!ca || ca->magic != CATADMIN_MAGIC)
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
     return DeleteFileW(pwszCatalogFile);
 }
 




More information about the wine-cvs mailing list