Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51850 Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- v4: - Load the wdscore dll in tests (Thanks Stefan Dösinger). - Remove unnecessary 0 in i386 and x86_64 assembly code.
I had to resend this patch even though Giovanni Mascellani signed off on it. I'm not sure if it would be acceptable to add their signature in the file.
The other patches in this patchset depend on this one. --- configure.ac | 1 + dlls/wdscore/Makefile.in | 3 ++ dlls/wdscore/main.c | 54 ++++++++++++++++++++++++++++ dlls/wdscore/tests/Makefile.in | 4 +++ dlls/wdscore/tests/main.c | 65 ++++++++++++++++++++++++++++++++++ dlls/wdscore/wdscore.spec | 2 +- 6 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 dlls/wdscore/main.c create mode 100644 dlls/wdscore/tests/Makefile.in create mode 100644 dlls/wdscore/tests/main.c
diff --git a/configure.ac b/configure.ac index b42cb8a5346..a50881cc2fb 100644 --- a/configure.ac +++ b/configure.ac @@ -3347,6 +3347,7 @@ WINE_CONFIG_MAKEFILE(dlls/wbemdisp/tests) WINE_CONFIG_MAKEFILE(dlls/wbemprox) WINE_CONFIG_MAKEFILE(dlls/wbemprox/tests) WINE_CONFIG_MAKEFILE(dlls/wdscore) +WINE_CONFIG_MAKEFILE(dlls/wdscore/tests) WINE_CONFIG_MAKEFILE(dlls/webservices) WINE_CONFIG_MAKEFILE(dlls/webservices/tests) WINE_CONFIG_MAKEFILE(dlls/websocket) diff --git a/dlls/wdscore/Makefile.in b/dlls/wdscore/Makefile.in index 20ba1d3b1c9..2020e72c7bb 100644 --- a/dlls/wdscore/Makefile.in +++ b/dlls/wdscore/Makefile.in @@ -1,3 +1,6 @@ MODULE = wdscore.dll
EXTRADLLFLAGS = -Wb,--prefer-native + +C_SRCS = \ + main.c diff --git a/dlls/wdscore/main.c b/dlls/wdscore/main.c new file mode 100644 index 00000000000..8854887a555 --- /dev/null +++ b/dlls/wdscore/main.c @@ -0,0 +1,54 @@ +/* + * Copyright 2022 Mohamad Al-Jaf + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <stdarg.h> + +#include "windef.h" +#include "winbase.h" + +#include "wine/asm.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(wdscore); + +/*********************************************************************** + * CurrentIP (wdscore.@) + */ +#ifdef __i386__ +__ASM_STDCALL_FUNC(CurrentIP, 0, + "movl (%esp), %eax\n\t" + "ret" ) +#elif defined(__x86_64__) +__ASM_STDCALL_FUNC(CurrentIP, 0, + "movq (%rsp), %rax\n\t" + "ret" ) +#elif defined(__arm__) +__ASM_STDCALL_FUNC(CurrentIP, 0, + "mov r0, lr\n\t" + "bx lr" ) +#elif defined(__aarch64__) +__ASM_STDCALL_FUNC(CurrentIP, 0, + "mov x0, lr\n\t" + "ret" ) +#else +void *WINAPI CurrentIP(void) +{ + FIXME( "not implemented\n" ); + return 0; +} +#endif diff --git a/dlls/wdscore/tests/Makefile.in b/dlls/wdscore/tests/Makefile.in new file mode 100644 index 00000000000..baf4adf23a1 --- /dev/null +++ b/dlls/wdscore/tests/Makefile.in @@ -0,0 +1,4 @@ +TESTDLL = wdscore.dll + +C_SRCS = \ + main.c diff --git a/dlls/wdscore/tests/main.c b/dlls/wdscore/tests/main.c new file mode 100644 index 00000000000..d06a25703c6 --- /dev/null +++ b/dlls/wdscore/tests/main.c @@ -0,0 +1,65 @@ +/* + * Unit test suite for wdscore + * + * Copyright 2022 Mohamad Al-Jaf + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * + */ + +#include <stdarg.h> + +#include "windef.h" +#include "winbase.h" + +#include "wine/test.h" + +static HMODULE dll; +static void* (WINAPI *pCurrentIP)(void); + +static BOOL init_function_pointers(void) +{ + dll = LoadLibraryA("wdscore.dll"); + + if (dll) + { + pCurrentIP = (void*)GetProcAddress(dll, "CurrentIP"); + return TRUE; + } + + return FALSE; +} + +static void test_CurrentIP(void) +{ + char *cur; + char *ret; + + cur = (char*)&test_CurrentIP; + ret = (char*)pCurrentIP(); + + ok(cur <= ret && ret < (cur + 0x100), "Address %p not in function starting at %p.\n", ret, cur); +} + +START_TEST(main) +{ + if (init_function_pointers()) + { + test_CurrentIP(); + FreeLibrary(dll); + } + else + skip("could not load wdscore.dll\n"); +} diff --git a/dlls/wdscore/wdscore.spec b/dlls/wdscore/wdscore.spec index 15958b86aba..8b6febe6b3b 100644 --- a/dlls/wdscore/wdscore.spec +++ b/dlls/wdscore/wdscore.spec @@ -71,7 +71,7 @@ @ stub ConstructPartialMsgIfW @ stub ConstructPartialMsgVA @ stub ConstructPartialMsgVW -@ stub CurrentIP +@ stdcall CurrentIP() @ stub EndMajorTask @ stub EndMinorTask @ stub GetMajorTask
Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- dlls/wdscore/wdscore.spec | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/dlls/wdscore/wdscore.spec b/dlls/wdscore/wdscore.spec index 8b6febe6b3b..282b6301688 100644 --- a/dlls/wdscore/wdscore.spec +++ b/dlls/wdscore/wdscore.spec @@ -116,7 +116,7 @@ @ stub WdsGetBlackboardValue @ stub WdsGetCurrentExecutionGroup @ stub WdsGetSetupLog -@ stub WdsTempDir +@ stub WdsGetTempDir @ stub WdsInitialize @ stub WdsInitializeCallbackArray @ stub WdsInitializeDataBinary @@ -139,7 +139,7 @@ @ stub WdsPackCollection @ stub WdsPublish @ stub WdsPublishEx -@ stub WdsPublishImmediateAsynch +@ stub WdsPublishImmediateAsync @ stub WdsPublishImmediateEx @ stub WdsPublishOffline @ stub WdsSeqAlloc @@ -150,8 +150,8 @@ @ stub WdsSetUILanguage @ stub WdsSetupLogDestroy @ stub WdsSetupLogInit -@ stub WdsSetLogMessageA -@ stub WdsSetLogMessageW +@ stub WdsSetupLogMessageA +@ stub WdsSetupLogMessageW @ stub WdsSubscribeEx @ stub WdsTerminate @ stub WdsUnlockExecutionGroup
Enables the Windows MediaCreationTool21H2 to run.
Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- v2: - Fix whitespace error in wdscore_internal.h
The debug channel emits a rather long string for msg: fixme:wdscore:ConstructPartialMsgVW 67108864 L"\5343\7465\7075\614c\676e\6e49\4c69\616f\6564\3a72\ 493a\696e\6974\6c61\7a69\3a65\4c20\4e41\2e47\4e49\2049\ 6944\6572\7463\726f\2079\203d\7325" - stub
Should I get rid of it? --- dlls/wdscore/main.c | 22 ++++++++++++++++++++++ dlls/wdscore/wdscore.spec | 4 ++-- dlls/wdscore/wdscore_internal.h | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 dlls/wdscore/wdscore_internal.h
diff --git a/dlls/wdscore/main.c b/dlls/wdscore/main.c index 8854887a555..3bd5eed8ec5 100644 --- a/dlls/wdscore/main.c +++ b/dlls/wdscore/main.c @@ -24,6 +24,8 @@ #include "wine/asm.h" #include "wine/debug.h"
+#include "wdscore_internal.h" + WINE_DEFAULT_DEBUG_CHANNEL(wdscore);
/*********************************************************************** @@ -52,3 +54,23 @@ void *WINAPI CurrentIP(void) return 0; } #endif + + +/*********************************************************************** + * ConstructPartialMsgVA (wdscore.@) + */ +LPVOID WINAPI ConstructPartialMsgVA( WdsLogLevel level, LPCSTR msg, va_list args ) +{ + FIXME( "%u %s - stub\n", level, debugstr_a(msg) ); + return NULL; +} + + +/*********************************************************************** + * ConstructPartialMsgVW (wdscore.@) + */ +LPVOID WINAPI ConstructPartialMsgVW( WdsLogLevel level, LPCWSTR msg, va_list args ) +{ + FIXME( "%u %s - stub\n", level, debugstr_w(msg) ); + return NULL; +} diff --git a/dlls/wdscore/wdscore.spec b/dlls/wdscore/wdscore.spec index 282b6301688..b14778001a8 100644 --- a/dlls/wdscore/wdscore.spec +++ b/dlls/wdscore/wdscore.spec @@ -69,8 +69,8 @@ #@ extern g_bEnableDiagnosticMode @ stub ConstructPartialMsgIfA @ stub ConstructPartialMsgIfW -@ stub ConstructPartialMsgVA -@ stub ConstructPartialMsgVW +@ stdcall ConstructPartialMsgVA(long str ptr) +@ stdcall ConstructPartialMsgVW(long wstr ptr) @ stdcall CurrentIP() @ stub EndMajorTask @ stub EndMinorTask diff --git a/dlls/wdscore/wdscore_internal.h b/dlls/wdscore/wdscore_internal.h new file mode 100644 index 00000000000..b5cbe3c8c25 --- /dev/null +++ b/dlls/wdscore/wdscore_internal.h @@ -0,0 +1,33 @@ +/* + * Copyright 2022 Mohamad Al-Jaf + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __WDSCORE_INTERNAL_H +#define __WDSCORE_INTERNAL_H + +typedef enum _WdsLogLevel { + WdsLogLevelAssert = 0x0000000, + WdsLogLevelFatalError = 0x1000000, + WdsLogLevelError = 0x2000000, + WdsLogLevelWarning = 0x3000000, + WdsLogLevelInfo = 0x4000000, + WdsLogLevelStatus = 0x5000000, + WdsLogLevelVerbose = 0x6800000, + WdsLogLevelTrace = 0x7000000 +} WdsLogLevel; + +#endif /* __WDSCORE_INTERNAL_H */
Required by the Windows MediaCreationTool21H2.
Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- v2: - Rebase patch --- dlls/wdscore/main.c | 28 ++++++++++++++++++++++++++++ dlls/wdscore/wdscore.spec | 4 ++-- dlls/wdscore/wdscore_internal.h | 27 +++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 2 deletions(-)
diff --git a/dlls/wdscore/main.c b/dlls/wdscore/main.c index 3bd5eed8ec5..e503e3127d0 100644 --- a/dlls/wdscore/main.c +++ b/dlls/wdscore/main.c @@ -74,3 +74,31 @@ LPVOID WINAPI ConstructPartialMsgVW( WdsLogLevel level, LPCWSTR msg, va_list arg FIXME( "%u %s - stub\n", level, debugstr_w(msg) ); return NULL; } + + +/*********************************************************************** + * WdsSetupLogMessageA (wdscore.@) + */ +HRESULT WINAPI WdsSetupLogMessageA( WdsLogSource log, LPCSTR unknown1, LPCSTR unknown2, + ULONG unknown3, LPCSTR unknown4, LPCSTR src, + void* ip, ULONG unknown6, void* unknown7, UINT unknown8 ) +{ + FIXME( "%u, %s, %s, %u, %s, %s, %p, %u, %p, %u - stub\n", log, debugstr_a(unknown1), + debugstr_a(unknown2), unknown3, debugstr_a(unknown4), debugstr_a(src), + ip, unknown6, unknown7, unknown8 ); + return S_OK; +} + + +/*********************************************************************** + * WdsSetupLogMessageW (wdscore.@) + */ +HRESULT WINAPI WdsSetupLogMessageW( WdsLogSource log, LPCWSTR unknown1, LPCWSTR unknown2, + ULONG unknown3, LPCWSTR unknown4, LPCWSTR src, + void* ip, ULONG unknown6, void* unknown7, UINT unknown8 ) +{ + FIXME( "%u, %s, %s, %u, %s, %s, %p, %u, %p, %u - stub\n", log, debugstr_w(unknown1), + debugstr_w(unknown2), unknown3, debugstr_w(unknown4), debugstr_w(src), + ip, unknown6, unknown7, unknown8 ); + return S_OK; +} diff --git a/dlls/wdscore/wdscore.spec b/dlls/wdscore/wdscore.spec index b14778001a8..18de37d1ed7 100644 --- a/dlls/wdscore/wdscore.spec +++ b/dlls/wdscore/wdscore.spec @@ -150,8 +150,8 @@ @ stub WdsSetUILanguage @ stub WdsSetupLogDestroy @ stub WdsSetupLogInit -@ stub WdsSetupLogMessageA -@ stub WdsSetupLogMessageW +@ stdcall WdsSetupLogMessageA(long str str long str str ptr long ptr long) +@ stdcall WdsSetupLogMessageW(long wstr wstr long wstr wstr ptr long ptr long) @ stub WdsSubscribeEx @ stub WdsTerminate @ stub WdsUnlockExecutionGroup diff --git a/dlls/wdscore/wdscore_internal.h b/dlls/wdscore/wdscore_internal.h index b5cbe3c8c25..f029023f8ce 100644 --- a/dlls/wdscore/wdscore_internal.h +++ b/dlls/wdscore/wdscore_internal.h @@ -19,6 +19,33 @@ #ifndef __WDSCORE_INTERNAL_H #define __WDSCORE_INTERNAL_H
+typedef enum _WdsLogSource { + WdsLogSourceDPX = 0x1000000, + WdsLogSourceCBS = 0x2000000, + WdsLogSourceCSI = 0x1800000, + WdsLogSourceSXS = 0x2800000, + WdsLogSourceCMI = 0x3000000, + WdsLogSourceDEPLOY = 0x4000000, + WdsLogSourceDU = 0x5000000, + WdsLogSourceIBS = 0x6000000, + WdsLogSourceIBSLIB = 0x6400000, + WdsLogSourceDIAG = 0x7000000, + WdsLogSourceDIAGER = 0x7400000, + WdsLogSourceMIG = 0x8000000, + WdsLogSourceHWARE = 0x8400000, + WdsLogSourceMIGUI = 0x8800000, + WdsLogSourceUI = 0xA000000, + WdsLogSourceCONX = 0xA400000, + WdsLogSourceMOUPG = 0xA800000, + WdsLogSourceWDS = 0xB000000, + WdsLogSourceDISM = 0xB800000, + WdsLogSourcePANTHR = 0x9000000, + WdsLogSourceWINPE = 0xC000000, + WdsLogSourceSP = 0xC800000, + WdsLogSourceLIB = 0xD000000, + WdsLogSourceTOOL = 0xE000000 +} WdsLogSource; + typedef enum _WdsLogLevel { WdsLogLevelAssert = 0x0000000, WdsLogLevelFatalError = 0x1000000,