Module: wine Branch: master Commit: c19b967cd8561357ee7a519a937454e703a10bd8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=c19b967cd8561357ee7a519a93...
Author: Maarten Lankhorst maarten@codeweavers.com Date: Tue Oct 14 22:31:15 2008 +0200
setupapi: Implement installing catalog files.
---
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;