[PATCH] setupapi: Implement installing catalog files

Maarten Lankhorst maarten at codeweavers.com
Tue Oct 14 15:31:15 CDT 2008


---
 dlls/setupapi/Makefile.in |    2 +-
 dlls/setupapi/misc.c      |   32 +++++++++++++++++++++++++++-----
 2 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/dlls/setupapi/Makefile.in b/dlls/setupapi/Makefile.in
index 3145003..1f633a4 100644
--- a/dlls/setupapi/Makefile.in
+++ b/dlls/setupapi/Makefile.in
@@ -6,7 +6,7 @@ VPATH     = @srcdir@
 MODULE    = setupapi.dll
 IMPORTLIB = setupapi
 IMPORTS   = uuid user32 version advapi32 rpcrt4 kernel32 ntdll
-DELAYIMPORTS = shell32
+DELAYIMPORTS = shell32 wintrust
 
 C_SRCS = \
 	devinst.c \
diff --git a/dlls/setupapi/misc.c b/dlls/setupapi/misc.c
index 62abc85..7109be9 100644
--- a/dlls/setupapi/misc.c
+++ b/dlls/setupapi/misc.c
@@ -28,13 +28,14 @@
 #include "winreg.h"
 #include "setupapi.h"
 #include "lzexpand.h"
+#include "softpub.h"
+#include "mscat.h"
 
 #include "wine/unicode.h"
 #include "wine/debug.h"
 
 #include "setupapi_private.h"
 
-
 WINE_DEFAULT_DEBUG_CHANNEL(setupapi);
 
 /* arbitrary limit not related to what native actually uses */
@@ -1052,17 +1053,38 @@ BOOL WINAPI SetupCopyOEMInfW( PCWSTR source, PCWSTR location,
                            sizeof(catalog_file)/sizeof(catalog_file[0]), NULL ))
     {
         WCHAR source_cat[MAX_PATH];
-        strcpyW( source_cat, source );
+        HCATADMIN handle;
+        HCATINFO cat;
+        GUID msguid = DRIVER_ACTION_VERIFY;
 
+        SetupCloseInfFile( hinf );
+
+        strcpyW( source_cat, source );
         p = strrchrW( source_cat, '\\' );
         if (p) p++;
         else p = source_cat;
-
         strcpyW( p, catalog_file );
 
-        FIXME("install catalog file %s\n", debugstr_w( source_cat ));
+        TRACE("installing catalog file %s\n", debugstr_w( source_cat ));
+
+        if (!CryptCATAdminAcquireContext(&handle, &msguid, 0))
+        {
+            ERR("Could not acquire security context\n");
+            return FALSE;
+        }
+
+        if (!(cat = CryptCATAdminAddCatalog(handle, source_cat, catalog_file, 0)))
+        {
+            ERR("Could not add catalog\n");
+            CryptCATAdminReleaseContext(handle, 0);
+            return FALSE;
+        }
+
+        CryptCATAdminReleaseCatalogContext(handle, cat, 0);
+        CryptCATAdminReleaseContext(handle, 0);
     }
-    SetupCloseInfFile( hinf );
+    else
+        SetupCloseInfFile( hinf );
 
     if (!(ret = CopyFileW( source, target, (style & SP_COPY_NOOVERWRITE) != 0 )))
         return ret;
-- 
1.5.6.5


--------------070805070802080203090507--



More information about the wine-patches mailing list