https://git.reactos.org/?p=reactos.git;a=commitdiff;h=88179a5d0f277c9e758ec…
commit 88179a5d0f277c9e758ecfe26f2c9242d89a56d1
Author: Amine Khaldi <amine.khaldi(a)reactos.org>
AuthorDate: Sat Oct 26 22:56:11 2019 +0100
Commit: Amine Khaldi <amine.khaldi(a)reactos.org>
CommitDate: Sat Oct 26 22:56:11 2019 +0100
[FUSION] Sync with Wine Staging 4.18. CORE-16441
---
dll/win32/fusion/CMakeLists.txt | 2 +-
dll/win32/fusion/asmcache.c | 44 ++++++++++++-----------
dll/win32/fusion/asmenum.c | 58 ++++++++++++++++--------------
dll/win32/fusion/asmname.c | 30 ++++++++--------
dll/win32/fusion/assembly.c | 44 ++++++++---------------
dll/win32/fusion/fusion.c | 20 ++++++-----
dll/win32/fusion/fusion_1_1/CMakeLists.txt | 2 +-
dll/win32/fusion/fusion_2_0/CMakeLists.txt | 2 +-
dll/win32/fusion/fusionpriv.h | 3 ++
dll/win32/fusion/precomp.h | 1 -
media/doc/README.WINE | 2 +-
11 files changed, 102 insertions(+), 106 deletions(-)
diff --git a/dll/win32/fusion/CMakeLists.txt b/dll/win32/fusion/CMakeLists.txt
index 7e151d9db52..5a19f11ac93 100644
--- a/dll/win32/fusion/CMakeLists.txt
+++ b/dll/win32/fusion/CMakeLists.txt
@@ -21,7 +21,7 @@ add_library(fusion MODULE
set_module_type(fusion win32dll)
target_link_libraries(fusion fusion_common uuid wine)
-add_importlibs(fusion advapi32 dbghelp shlwapi user32 msvcrt kernel32 ntdll)
+add_importlibs(fusion bcrypt advapi32 dbghelp shlwapi user32 msvcrt kernel32 ntdll)
add_pch(fusion_common precomp.h COMMON_SOURCE)
add_cd_file(TARGET fusion DESTINATION
reactos/Microsoft.NET/Framework/v1.0.3705 FOR all)
add_cd_file(TARGET fusion DESTINATION reactos/system32 FOR all)
diff --git a/dll/win32/fusion/asmcache.c b/dll/win32/fusion/asmcache.c
index deca5f4c37b..cf16eb851b7 100644
--- a/dll/win32/fusion/asmcache.c
+++ b/dll/win32/fusion/asmcache.c
@@ -22,6 +22,9 @@
#include <stdio.h>
#define COBJMACROS
+#ifdef __REACTOS__
+#define WIN32_NO_STATUS
+#endif
#include "windef.h"
#include "winbase.h"
@@ -37,7 +40,6 @@
#include "fusionpriv.h"
#include "wine/debug.h"
-#include "wine/unicode.h"
WINE_DEFAULT_DEBUG_CHANNEL(fusion);
@@ -63,11 +65,11 @@ static BOOL create_full_path(LPCWSTR path)
BOOL ret = TRUE;
int len;
- if (!(new_path = heap_alloc((strlenW(path) + 1) * sizeof(WCHAR)))) return FALSE;
+ if (!(new_path = heap_alloc((lstrlenW(path) + 1) * sizeof(WCHAR)))) return FALSE;
- strcpyW(new_path, path);
+ lstrcpyW(new_path, path);
- while ((len = strlenW(new_path)) && new_path[len - 1] == '\\')
+ while ((len = lstrlenW(new_path)) && new_path[len - 1] == '\\')
new_path[len - 1] = 0;
while (!CreateDirectoryW(new_path, NULL))
@@ -84,7 +86,7 @@ static BOOL create_full_path(LPCWSTR path)
break;
}
- if(!(slash = strrchrW(new_path, '\\')))
+ if(!(slash = wcsrchr(new_path, '\\')))
{
ret = FALSE;
break;
@@ -116,14 +118,14 @@ static BOOL get_assembly_directory(LPWSTR dir, DWORD size, const
char *version,
if (!strcmp(version, "v4.0.30319"))
{
- strcpyW(dir + len, dotnet);
+ lstrcpyW(dir + len, dotnet);
len += ARRAY_SIZE(dotnet) - 1;
- strcpyW(dir + len, gac + 1);
+ lstrcpyW(dir + len, gac + 1);
len += ARRAY_SIZE(gac) - 2;
}
else
{
- strcpyW(dir + len, gac);
+ lstrcpyW(dir + len, gac);
len += ARRAY_SIZE(gac) - 1;
}
switch (architecture)
@@ -132,15 +134,15 @@ static BOOL get_assembly_directory(LPWSTR dir, DWORD size, const
char *version,
break;
case peMSIL:
- strcpyW(dir + len, msil);
+ lstrcpyW(dir + len, msil);
break;
case peI386:
- strcpyW(dir + len, x86);
+ lstrcpyW(dir + len, x86);
break;
case peAMD64:
- strcpyW(dir + len, amd64);
+ lstrcpyW(dir + len, amd64);
break;
default:
@@ -267,11 +269,11 @@ static HRESULT WINAPI
IAssemblyCacheImpl_UninstallAssembly(IAssemblyCache *iface
if (DeleteFileW( path ))
{
- if ((p = strrchrW( path, '\\' )))
+ if ((p = wcsrchr( path, '\\' )))
{
*p = 0;
RemoveDirectoryW( path );
- if ((p = strrchrW( path, '\\' )))
+ if ((p = wcsrchr( path, '\\' )))
{
*p = 0;
RemoveDirectoryW( path );
@@ -393,13 +395,13 @@ static HRESULT copy_file( const WCHAR *src_dir, DWORD src_len, const
WCHAR *dst_
const WCHAR *filename )
{
WCHAR *src_file, *dst_file;
- DWORD len = strlenW( filename );
+ DWORD len = lstrlenW( filename );
HRESULT hr = S_OK;
if (!(src_file = heap_alloc( (src_len + len + 1) * sizeof(WCHAR) )))
return E_OUTOFMEMORY;
memcpy( src_file, src_dir, src_len * sizeof(WCHAR) );
- strcpyW( src_file + src_len, filename );
+ lstrcpyW( src_file + src_len, filename );
if (!(dst_file = heap_alloc( (dst_len + len + 1) * sizeof(WCHAR) )))
{
@@ -407,7 +409,7 @@ static HRESULT copy_file( const WCHAR *src_dir, DWORD src_len, const
WCHAR *dst_
return E_OUTOFMEMORY;
}
memcpy( dst_file, dst_dir, dst_len * sizeof(WCHAR) );
- strcpyW( dst_file + dst_len, filename );
+ lstrcpyW( dst_file + dst_len, filename );
if (!CopyFileW( src_file, dst_file, FALSE )) hr = HRESULT_FROM_WIN32( GetLastError()
);
heap_free( src_file );
@@ -442,7 +444,7 @@ static HRESULT WINAPI
IAssemblyCacheImpl_InstallAssembly(IAssemblyCache *iface,
if (!pszManifestFilePath || !*pszManifestFilePath)
return E_INVALIDARG;
- if (!(extension = strrchrW(pszManifestFilePath, '.')))
+ if (!(extension = wcsrchr(pszManifestFilePath, '.')))
return HRESULT_FROM_WIN32(ERROR_INVALID_NAME);
if (lstrcmpiW(extension, ext_exe) && lstrcmpiW(extension, ext_dll))
@@ -483,16 +485,16 @@ static HRESULT WINAPI
IAssemblyCacheImpl_InstallAssembly(IAssemblyCache *iface,
architecture = assembly_get_architecture(assembly);
get_assembly_directory(asmdir, MAX_PATH, clr_version, architecture);
- dst_len += strlenW(asmdir) + strlenW(name) + strlenW(version) + strlenW(token);
+ dst_len += lstrlenW(asmdir) + lstrlenW(name) + lstrlenW(version) + lstrlenW(token);
if (!(dst_dir = heap_alloc(dst_len * sizeof(WCHAR))))
{
hr = E_OUTOFMEMORY;
goto done;
}
if (!strcmp(clr_version, "v4.0.30319"))
- dst_len = sprintfW(dst_dir, format_v40, asmdir, name, version, token);
+ dst_len = swprintf(dst_dir, format_v40, asmdir, name, version, token);
else
- dst_len = sprintfW(dst_dir, format, asmdir, name, version, token);
+ dst_len = swprintf(dst_dir, format, asmdir, name, version, token);
create_full_path(dst_dir);
@@ -500,7 +502,7 @@ static HRESULT WINAPI
IAssemblyCacheImpl_InstallAssembly(IAssemblyCache *iface,
if (FAILED(hr))
goto done;
- if ((p = strrchrW(asmpath, '\\')))
+ if ((p = wcsrchr(asmpath, '\\')))
{
filename = p + 1;
src_dir = asmpath;
diff --git a/dll/win32/fusion/asmenum.c b/dll/win32/fusion/asmenum.c
index ba86818a2c6..49acfb1f1bb 100644
--- a/dll/win32/fusion/asmenum.c
+++ b/dll/win32/fusion/asmenum.c
@@ -20,6 +20,11 @@
#include <stdarg.h>
+#ifdef __REACTOS__
+#include <wchar.h>
+#define WIN32_NO_STATUS
+#endif
+
#define COBJMACROS
#define NONAMELESSUNION
#define NONAMELESSSTRUCT
@@ -34,7 +39,6 @@
#include "fusionpriv.h"
#include "wine/debug.h"
-#include "wine/unicode.h"
#include "wine/list.h"
WINE_DEFAULT_DEBUG_CHANNEL(fusion);
@@ -187,9 +191,9 @@ static void build_file_mask(IAssemblyName *name, int depth, const
WCHAR *path,
if (!name)
{
if (prefix && depth == 1)
- sprintfW(buf, star_prefix_fmt, path, prefix);
+ swprintf(buf, star_prefix_fmt, path, prefix);
else
- sprintfW(buf, star_fmt, path);
+ swprintf(buf, star_fmt, path);
return;
}
if (depth == 0)
@@ -198,9 +202,9 @@ static void build_file_mask(IAssemblyName *name, int depth, const
WCHAR *path,
*disp = '\0';
hr = IAssemblyName_GetName(name, &size, disp);
if (SUCCEEDED(hr))
- sprintfW(buf, ss_fmt, path, disp);
+ swprintf(buf, ss_fmt, path, disp);
else
- sprintfW(buf, ss_fmt, path, star);
+ swprintf(buf, ss_fmt, path, star);
}
else if (depth == 1)
{
@@ -219,7 +223,7 @@ static void build_file_mask(IAssemblyName *name, int depth, const
WCHAR *path,
if (!major_size || !minor_size || !build_size || !revision_size) verptr = star;
else
{
- sprintfW(version, ver_fmt, major, minor, build, revision);
+ swprintf(version, ver_fmt, major, minor, build, revision);
verptr = version;
}
@@ -234,9 +238,9 @@ static void build_file_mask(IAssemblyName *name, int depth, const
WCHAR *path,
}
if (prefix)
- sprintfW(buf, ssss_fmt, path, prefix, verptr, pubkeyptr);
+ swprintf(buf, ssss_fmt, path, prefix, verptr, pubkeyptr);
else
- sprintfW(buf, sss_fmt, path, verptr, pubkeyptr);
+ swprintf(buf, sss_fmt, path, verptr, pubkeyptr);
}
}
@@ -254,7 +258,7 @@ static int compare_assembly_names(ASMNAME *asmname1, ASMNAME
*asmname2)
size = sizeof(name2);
IAssemblyName_GetProperty(asmname2->name, ASM_NAME_NAME, name2, &size);
- if ((ret = strcmpiW(name1, name2))) return ret;
+ if ((ret = wcsicmp(name1, name2))) return ret;
for (i = ASM_NAME_MAJOR_VERSION; i < ASM_NAME_CULTURE; i++)
{
@@ -277,7 +281,7 @@ static int compare_assembly_names(ASMNAME *asmname1, ASMNAME
*asmname2)
token_to_str(token1, token_str1);
token_to_str(token2, token_str2);
- if ((ret = strcmpiW(token_str1, token_str2))) return ret;
+ if ((ret = wcsicmp(token_str1, token_str2))) return ret;
return 0;
}
@@ -331,7 +335,7 @@ static HRESULT enum_gac_assemblies(struct list *assemblies,
IAssemblyName *name,
if (depth == 0)
{
if (name)
- ptr = strrchrW(buf, '\\') + 1;
+ ptr = wcsrchr(buf, '\\') + 1;
else
ptr = ffd.cFileName;
@@ -341,19 +345,19 @@ static HRESULT enum_gac_assemblies(struct list *assemblies,
IAssemblyName *name,
{
const WCHAR *token, *version = ffd.cFileName;
- sprintfW(asmpath, path_fmt, path, ffd.cFileName, parent);
- ptr = strstrW(ffd.cFileName, dblunder);
+ swprintf(asmpath, path_fmt, path, ffd.cFileName, parent);
+ ptr = wcsstr(ffd.cFileName, dblunder);
*ptr = '\0';
token = ptr + 2;
if (prefix)
{
- unsigned int prefix_len = strlenW(prefix);
- if (strlenW(ffd.cFileName) >= prefix_len &&
- !memicmpW(ffd.cFileName, prefix, prefix_len))
+ unsigned int prefix_len = lstrlenW(prefix);
+ if (lstrlenW(ffd.cFileName) >= prefix_len &&
+ !_wcsnicmp(ffd.cFileName, prefix, prefix_len))
version += prefix_len;
}
- sprintfW(disp, name_fmt, parent, version, token);
+ swprintf(disp, name_fmt, parent, version, token);
if (!(asmname = heap_alloc(sizeof(*asmname))))
{
@@ -381,7 +385,7 @@ static HRESULT enum_gac_assemblies(struct list *assemblies,
IAssemblyName *name,
continue;
}
- sprintfW(buf, ss_fmt, path, ffd.cFileName);
+ swprintf(buf, ss_fmt, path, ffd.cFileName);
hr = enum_gac_assemblies(assemblies, name, depth + 1, prefix, buf);
if (FAILED(hr))
break;
@@ -408,21 +412,21 @@ static HRESULT enumerate_gac(IAssemblyEnumImpl *asmenum,
IAssemblyName *pName)
if (FAILED(hr))
return hr;
- strcpyW(path, buf);
+ lstrcpyW(path, buf);
GetNativeSystemInfo(&info);
if (info.u.s.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
{
- strcpyW(path + size - 1, gac_64);
+ lstrcpyW(path + size - 1, gac_64);
hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, v40, path);
if (FAILED(hr))
return hr;
}
- strcpyW(path + size - 1, gac_32);
+ lstrcpyW(path + size - 1, gac_32);
hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, v40, path);
if (FAILED(hr))
return hr;
- strcpyW(path + size - 1, gac_msil);
+ lstrcpyW(path + size - 1, gac_msil);
hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, v40, path);
if (FAILED(hr))
return hr;
@@ -432,25 +436,25 @@ static HRESULT enumerate_gac(IAssemblyEnumImpl *asmenum,
IAssemblyName *pName)
if (FAILED(hr))
return hr;
- strcpyW(path, buf);
+ lstrcpyW(path, buf);
if (info.u.s.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
{
- strcpyW(path + size - 1, gac_64);
+ lstrcpyW(path + size - 1, gac_64);
hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, NULL, path);
if (FAILED(hr))
return hr;
}
- strcpyW(path + size - 1, gac_32);
+ lstrcpyW(path + size - 1, gac_32);
hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, NULL, path);
if (FAILED(hr))
return hr;
- strcpyW(path + size - 1, gac_msil);
+ lstrcpyW(path + size - 1, gac_msil);
hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, NULL, path);
if (FAILED(hr))
return hr;
- strcpyW(path + size - 1, gac);
+ lstrcpyW(path + size - 1, gac);
hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, NULL, path);
if (FAILED(hr))
return hr;
diff --git a/dll/win32/fusion/asmname.c b/dll/win32/fusion/asmname.c
index c5d07009a39..61774308809 100644
--- a/dll/win32/fusion/asmname.c
+++ b/dll/win32/fusion/asmname.c
@@ -23,6 +23,9 @@
#define COBJMACROS
#define INITGUID
+#ifdef __REACTOS__
+#define WIN32_NO_STATUS
+#endif
#include "windef.h"
#include "winbase.h"
@@ -34,7 +37,6 @@
#include "strsafe.h"
#include "wine/debug.h"
-#include "wine/unicode.h"
#include "fusionpriv.h"
WINE_DEFAULT_DEBUG_CHANNEL(fusion);
@@ -277,7 +279,7 @@ static HRESULT WINAPI IAssemblyNameImpl_GetDisplayName(IAssemblyName
*iface,
if (!name->displayname || !*name->displayname)
return FUSION_E_INVALID_NAME;
- size = strlenW(name->displayname) + 1;
+ size = lstrlenW(name->displayname) + 1;
if (*pccDisplayName < size)
{
@@ -285,7 +287,7 @@ static HRESULT WINAPI IAssemblyNameImpl_GetDisplayName(IAssemblyName
*iface,
return E_NOT_SUFFICIENT_BUFFER;
}
- if (szDisplayName) strcpyW(szDisplayName, name->displayname);
+ if (szDisplayName) lstrcpyW(szDisplayName, name->displayname);
*pccDisplayName = size;
return S_OK;
@@ -417,7 +419,7 @@ static HRESULT WINAPI IAssemblyNameImpl_GetName(IAssemblyName *iface,
TRACE("(%p, %p, %p)\n", iface, lpcwBuffer, pwzName);
if (name->name)
- len = strlenW(name->name) + 1;
+ len = lstrlenW(name->name) + 1;
else
len = 0;
@@ -427,7 +429,7 @@ static HRESULT WINAPI IAssemblyNameImpl_GetName(IAssemblyName *iface,
return E_NOT_SUFFICIENT_BUFFER;
}
if (!name->name) lpcwBuffer[0] = 0;
- else strcpyW(pwzName, name->name);
+ else lstrcpyW(pwzName, name->name);
*lpcwBuffer = len;
return S_OK;
@@ -465,7 +467,7 @@ static HRESULT WINAPI IAssemblyNameImpl_IsEqual(IAssemblyName *iface,
if (!pName) return S_FALSE;
if (flags & ~ASM_CMPF_IL_ALL) FIXME("unsupported flags\n");
- if ((flags & ASM_CMPF_NAME) && strcmpW(name1->name, name2->name))
return S_FALSE;
+ if ((flags & ASM_CMPF_NAME) && lstrcmpW(name1->name, name2->name))
return S_FALSE;
if (name1->versize && name2->versize)
{
if ((flags & ASM_CMPF_MAJOR_VERSION) &&
@@ -483,7 +485,7 @@ static HRESULT WINAPI IAssemblyNameImpl_IsEqual(IAssemblyName *iface,
if ((flags & ASM_CMPF_CULTURE) &&
name1->culture && name2->culture &&
- strcmpW(name1->culture, name2->culture)) return S_FALSE;
+ lstrcmpW(name1->culture, name2->culture)) return S_FALSE;
return S_OK;
}
@@ -560,10 +562,10 @@ static HRESULT parse_version(IAssemblyNameImpl *name, LPWSTR
version)
if (!*beg)
return S_OK;
- end = strchrW(beg, '.');
+ end = wcschr(beg, '.');
if (end) *end = '\0';
- name->version[i] = atolW(beg);
+ name->version[i] = wcstol(beg, NULL, 10);
name->versize++;
if (!end && i < 3)
@@ -700,11 +702,11 @@ static HRESULT parse_display_name(IAssemblyNameImpl *name, LPCWSTR
szAssemblyNam
goto done;
}
- ptr = strchrW(str, ',');
+ ptr = wcschr(str, ',');
if (ptr) *ptr = '\0';
/* no ',' but ' ' only */
- if( !ptr && strchrW(str, ' ') )
+ if( !ptr && wcschr(str, ' ') )
{
hr = FUSION_E_INVALID_NAME;
goto done;
@@ -723,7 +725,7 @@ static HRESULT parse_display_name(IAssemblyNameImpl *name, LPCWSTR
szAssemblyNam
str = ptr + 1;
while (!done)
{
- ptr = strchrW(str, '=');
+ ptr = wcschr(str, '=');
if (!ptr)
{
hr = FUSION_E_INVALID_NAME;
@@ -737,9 +739,9 @@ static HRESULT parse_display_name(IAssemblyNameImpl *name, LPCWSTR
szAssemblyNam
goto done;
}
- if (!(ptr2 = strchrW(ptr, ',')))
+ if (!(ptr2 = wcschr(ptr, ',')))
{
- if (!(ptr2 = strchrW(ptr, '\0')))
+ if (!(ptr2 = wcschr(ptr, '\0')))
{
hr = FUSION_E_INVALID_NAME;
goto done;
diff --git a/dll/win32/fusion/assembly.c b/dll/win32/fusion/assembly.c
index ec380ef442b..a80a25655a2 100644
--- a/dll/win32/fusion/assembly.c
+++ b/dll/win32/fusion/assembly.c
@@ -21,11 +21,13 @@
#include <stdarg.h>
#include <stdio.h>
+#include "ntstatus.h"
+#define WIN32_NO_STATUS
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "winver.h"
-#include "wincrypt.h"
+#include "bcrypt.h"
#include "dbghelp.h"
#include "ole2.h"
#include "fusion.h"
@@ -33,7 +35,6 @@
#include "fusionpriv.h"
#include "wine/debug.h"
-#include "wine/unicode.h"
#define TableFromToken(tk) (TypeFromToken(tk) >> 24)
#define TokenFromTable(idx) (idx << 24)
@@ -748,10 +749,10 @@ HRESULT assembly_get_name(ASSEMBLY *assembly, LPWSTR *name)
HRESULT assembly_get_path(const ASSEMBLY *assembly, LPWSTR *path)
{
- WCHAR *cpy = heap_alloc((strlenW(assembly->path) + 1) * sizeof(WCHAR));
+ WCHAR *cpy = heap_alloc((lstrlenW(assembly->path) + 1) * sizeof(WCHAR));
*path = cpy;
if (cpy)
- strcpyW(cpy, assembly->path);
+ lstrcpyW(cpy, assembly->path);
else
return E_OUTOFMEMORY;
@@ -775,10 +776,10 @@ HRESULT assembly_get_version(ASSEMBLY *assembly, LPWSTR *version)
if (!asmtbl)
return E_FAIL;
- if (!(*version = heap_alloc(sizeof(format) + 4 * strlen("65535") *
sizeof(WCHAR))))
+ if (!(*version = heap_alloc(24 * sizeof(WCHAR))))
return E_OUTOFMEMORY;
- sprintfW(*version, format, asmtbl->MajorVersion, asmtbl->MinorVersion,
+ swprintf(*version, format, asmtbl->MajorVersion, asmtbl->MinorVersion,
asmtbl->BuildNumber, asmtbl->RevisionNumber);
return S_OK;
@@ -807,9 +808,8 @@ HRESULT assembly_get_pubkey_token(ASSEMBLY *assembly, LPWSTR *token)
{
ULONG i, size;
LONG offset;
- BYTE *hashdata, *pubkey, *ptr;
- HCRYPTPROV crypt;
- HCRYPTHASH hash;
+ BYTE hashdata[20], *pubkey, *ptr;
+ BCRYPT_ALG_HANDLE alg;
BYTE tokbytes[BYTES_PER_TOKEN];
HRESULT hr = E_FAIL;
LPWSTR tok;
@@ -833,29 +833,16 @@ HRESULT assembly_get_pubkey_token(ASSEMBLY *assembly, LPWSTR
*token)
pubkey = assembly_get_blob(assembly, idx, &size);
- if (!CryptAcquireContextA(&crypt, NULL, NULL, PROV_RSA_FULL,
- CRYPT_VERIFYCONTEXT))
+ if (BCryptOpenAlgorithmProvider(&alg, BCRYPT_SHA1_ALGORITHM,
MS_PRIMITIVE_PROVIDER, 0) != STATUS_SUCCESS)
return E_FAIL;
- if (!CryptCreateHash(crypt, CALG_SHA1, 0, 0, &hash))
- return E_FAIL;
-
- if (!CryptHashData(hash, pubkey, size, 0))
- return E_FAIL;
-
- size = 0;
- if (!CryptGetHashParam(hash, HP_HASHVAL, NULL, &size, 0))
- return E_FAIL;
-
- if (!(hashdata = heap_alloc(size)))
+ if (BCryptHash(alg, NULL, 0, pubkey, size, hashdata, sizeof(hashdata)) !=
STATUS_SUCCESS)
{
- hr = E_OUTOFMEMORY;
+ hr = E_FAIL;
goto done;
}
- if (!CryptGetHashParam(hash, HP_HASHVAL, hashdata, &size, 0))
- goto done;
-
+ size = sizeof(hashdata);
for (i = size - 1; i >= size - 8; i--)
tokbytes[size - i - 1] = hashdata[i];
@@ -871,10 +858,7 @@ HRESULT assembly_get_pubkey_token(ASSEMBLY *assembly, LPWSTR *token)
hr = S_OK;
done:
- heap_free(hashdata);
- CryptDestroyHash(hash);
- CryptReleaseContext(crypt, 0);
-
+ BCryptCloseAlgorithmProvider(alg, 0);
return hr;
}
diff --git a/dll/win32/fusion/fusion.c b/dll/win32/fusion/fusion.c
index a57d7e067c5..802021129af 100644
--- a/dll/win32/fusion/fusion.c
+++ b/dll/win32/fusion/fusion.c
@@ -19,6 +19,9 @@
*/
#include <stdarg.h>
+#ifdef __REACTOS__
+#include <wchar.h>
+#endif
#define COBJMACROS
@@ -28,7 +31,6 @@
#include "ole2.h"
#include "fusion.h"
#include "wine/debug.h"
-#include "wine/unicode.h"
WINE_DEFAULT_DEBUG_CHANNEL(fusion);
@@ -128,7 +130,7 @@ HRESULT WINAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR
pwzCachePath,
return E_INVALIDARG;
len = GetWindowsDirectoryW(windir, MAX_PATH);
- strcpyW(path, windir);
+ lstrcpyW(path, windir);
switch (dwCacheFlags)
{
@@ -138,14 +140,14 @@ HRESULT WINAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR
pwzCachePath,
if (FAILED(hr))
return hr;
- len = sprintfW(path, zapfmt, windir, assembly + 1, nativeimg, version);
+ len = swprintf(path, zapfmt, windir, assembly + 1, nativeimg, version);
break;
}
case ASM_CACHE_GAC:
{
- strcpyW(path + len, assembly);
+ lstrcpyW(path + len, assembly);
len += ARRAY_SIZE(assembly) - 1;
- strcpyW(path + len, gac);
+ lstrcpyW(path + len, gac);
len += ARRAY_SIZE(gac) - 1;
break;
}
@@ -155,13 +157,13 @@ HRESULT WINAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR
pwzCachePath,
return E_FAIL;
}
case ASM_CACHE_ROOT:
- strcpyW(path + len, assembly);
+ lstrcpyW(path + len, assembly);
len += ARRAY_SIZE(assembly) - 1;
break;
case ASM_CACHE_ROOT_EX:
- strcpyW(path + len, dotnet);
+ lstrcpyW(path + len, dotnet);
len += ARRAY_SIZE(dotnet) - 1;
- strcpyW(path + len, assembly);
+ lstrcpyW(path + len, assembly);
len += ARRAY_SIZE(assembly) - 1;
break;
default:
@@ -172,7 +174,7 @@ HRESULT WINAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR
pwzCachePath,
if (*pcchPath <= len || !pwzCachePath)
hr = E_NOT_SUFFICIENT_BUFFER;
else if (pwzCachePath)
- strcpyW(pwzCachePath, path);
+ lstrcpyW(pwzCachePath, path);
*pcchPath = len;
return hr;
diff --git a/dll/win32/fusion/fusion_1_1/CMakeLists.txt
b/dll/win32/fusion/fusion_1_1/CMakeLists.txt
index 802fecf8c34..7a36802d264 100644
--- a/dll/win32/fusion/fusion_1_1/CMakeLists.txt
+++ b/dll/win32/fusion/fusion_1_1/CMakeLists.txt
@@ -9,5 +9,5 @@ add_library(fusion_1_1 MODULE
set_module_type(fusion_1_1 win32dll)
target_link_libraries(fusion_1_1 fusion_common uuid wine)
set_target_properties(fusion_1_1 PROPERTIES OUTPUT_NAME "fusion"
PDB_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
-add_importlibs(fusion_1_1 advapi32 dbghelp shlwapi user32 msvcrt kernel32 ntdll)
+add_importlibs(fusion_1_1 bcrypt advapi32 dbghelp shlwapi user32 msvcrt kernel32 ntdll)
add_cd_file(TARGET fusion_1_1 DESTINATION
reactos/Microsoft.NET/Framework/v1.1.4322 FOR
all)
diff --git a/dll/win32/fusion/fusion_2_0/CMakeLists.txt
b/dll/win32/fusion/fusion_2_0/CMakeLists.txt
index 035da8ed61c..b91372f9fa7 100644
--- a/dll/win32/fusion/fusion_2_0/CMakeLists.txt
+++ b/dll/win32/fusion/fusion_2_0/CMakeLists.txt
@@ -9,5 +9,5 @@ add_library(fusion_2_0 MODULE
set_module_type(fusion_2_0 win32dll)
target_link_libraries(fusion_2_0 fusion_common uuid wine)
set_target_properties(fusion_2_0 PROPERTIES OUTPUT_NAME "fusion"
PDB_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
-add_importlibs(fusion_2_0 advapi32 dbghelp shlwapi user32 msvcrt kernel32 ntdll)
+add_importlibs(fusion_2_0 bcrypt advapi32 dbghelp shlwapi user32 msvcrt kernel32 ntdll)
add_cd_file(TARGET fusion_2_0 DESTINATION
reactos/Microsoft.NET/Framework/v2.0.50727 FOR
all)
diff --git a/dll/win32/fusion/fusionpriv.h b/dll/win32/fusion/fusionpriv.h
index 24c932d156c..ea5953a6a79 100644
--- a/dll/win32/fusion/fusionpriv.h
+++ b/dll/win32/fusion/fusionpriv.h
@@ -23,6 +23,9 @@
#include <stdarg.h>
+#include "ntstatus.h"
+#define WIN32_NO_STATUS
+#include "windef.h"
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
diff --git a/dll/win32/fusion/precomp.h b/dll/win32/fusion/precomp.h
index de2c9a84b0d..5a1353f3877 100644
--- a/dll/win32/fusion/precomp.h
+++ b/dll/win32/fusion/precomp.h
@@ -2,7 +2,6 @@
#ifndef _WINE_FUSION_PRECOMP_H_
#define _WINE_FUSION_PRECOMP_H_
-#define WIN32_NO_STATUS
#define _INC_WINDOWS
#define COM_NO_WINDOWS_H
diff --git a/media/doc/README.WINE b/media/doc/README.WINE
index 343cfdc7633..fdc5b31dc7f 100644
--- a/media/doc/README.WINE
+++ b/media/doc/README.WINE
@@ -68,7 +68,7 @@ dll/win32/dbghelp # Synced to WineStaging-3.9
dll/win32/dciman32 # Synced to WineStaging-3.3
dll/win32/faultrep # Synced to WineStaging-4.18
dll/win32/fontsub # Synced to WineStaging-2.9
-dll/win32/fusion # Synced to WineStaging-3.17
+dll/win32/fusion # Synced to WineStaging-4.18
dll/win32/gdiplus # Synced to WineStaging-4.0
dll/win32/hhctrl.ocx # Synced to WineStaging-4.0
dll/win32/hlink # Synced to WineStaging-4.0