Needed for native mfc42u.dll.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51850 Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- The bug report does not mention that the tool cannot run without mfc42u.dll, which requires this API set. --- configure.ac | 1 + .../Makefile.in | 1 + .../api-ms-win-core-privateprofile-l1-1-0.spec | 14 ++++++++++++++ 3 files changed, 16 insertions(+) create mode 100644 dlls/api-ms-win-core-privateprofile-l1-1-0/Makefile.in create mode 100644 dlls/api-ms-win-core-privateprofile-l1-1-0/api-ms-win-core-privateprofile-l1-1-0.spec
diff --git a/configure.ac b/configure.ac index 9b2c111119f..9630405bfcd 100644 --- a/configure.ac +++ b/configure.ac @@ -2416,6 +2416,7 @@ WINE_CONFIG_MAKEFILE(dlls/api-ms-win-core-namedpipe-l1-2-0) WINE_CONFIG_MAKEFILE(dlls/api-ms-win-core-namespace-l1-1-0) WINE_CONFIG_MAKEFILE(dlls/api-ms-win-core-normalization-l1-1-0) WINE_CONFIG_MAKEFILE(dlls/api-ms-win-core-path-l1-1-0) +WINE_CONFIG_MAKEFILE(dlls/api-ms-win-core-privateprofile-l1-1-0) WINE_CONFIG_MAKEFILE(dlls/api-ms-win-core-privateprofile-l1-1-1) WINE_CONFIG_MAKEFILE(dlls/api-ms-win-core-processenvironment-l1-1-0) WINE_CONFIG_MAKEFILE(dlls/api-ms-win-core-processenvironment-l1-2-0) diff --git a/dlls/api-ms-win-core-privateprofile-l1-1-0/Makefile.in b/dlls/api-ms-win-core-privateprofile-l1-1-0/Makefile.in new file mode 100644 index 00000000000..c8b8ef84aef --- /dev/null +++ b/dlls/api-ms-win-core-privateprofile-l1-1-0/Makefile.in @@ -0,0 +1 @@ +MODULE = api-ms-win-core-privateprofile-l1-1-0.dll diff --git a/dlls/api-ms-win-core-privateprofile-l1-1-0/api-ms-win-core-privateprofile-l1-1-0.spec b/dlls/api-ms-win-core-privateprofile-l1-1-0/api-ms-win-core-privateprofile-l1-1-0.spec new file mode 100644 index 00000000000..c8153c3a296 --- /dev/null +++ b/dlls/api-ms-win-core-privateprofile-l1-1-0/api-ms-win-core-privateprofile-l1-1-0.spec @@ -0,0 +1,14 @@ +@ stdcall GetPrivateProfileIntA(str str long str) kernel32.GetPrivateProfileIntA +@ stdcall GetPrivateProfileIntW(wstr wstr long wstr) kernel32.GetPrivateProfileIntW +@ stdcall GetPrivateProfileSectionW(wstr ptr long wstr) kernel32.GetPrivateProfileSectionW +@ stdcall GetPrivateProfileStringA(str str str ptr long str) kernel32.GetPrivateProfileStringA +@ stdcall GetPrivateProfileStringW(wstr wstr wstr ptr long wstr) kernel32.GetPrivateProfileStringW +@ stdcall GetProfileIntA(str str long) kernel32.GetProfileIntA +@ stdcall GetProfileIntW(wstr wstr long) kernel32.GetProfileIntW +@ stdcall GetProfileSectionA(str ptr long) kernel32.GetProfileSectionA +@ stdcall GetProfileSectionW(wstr ptr long) kernel32.GetProfileSectionW +@ stdcall GetProfileStringA(str str str ptr long) kernel32.GetProfileStringA +@ stdcall GetProfileStringW(wstr wstr wstr ptr long) kernel32.GetProfileStringW +@ stdcall WritePrivateProfileSectionA(str str str) kernel32.WritePrivateProfileSectionA +@ stdcall WritePrivateProfileStringA(str str str str) kernel32.WritePrivateProfileStringA +@ stdcall WritePrivateProfileStringW(wstr wstr wstr wstr) kernel32.WritePrivateProfileStringW
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
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=106259
Your paranoid android.
=== build (build log) ===
error: patch failed: configure.ac:3347 error: patch failed: dlls/wdscore/Makefile.in:1 error: patch failed: dlls/wdscore/wdscore.spec:71 Task: Patch failed to apply
=== debian11 (build log) ===
error: patch failed: configure.ac:3347 error: patch failed: dlls/wdscore/Makefile.in:1 error: patch failed: dlls/wdscore/wdscore.spec:71 Task: Patch failed to apply
=== debian11 (build log) ===
error: patch failed: configure.ac:3347 error: patch failed: dlls/wdscore/Makefile.in:1 error: patch failed: dlls/wdscore/wdscore.spec:71 Task: Patch failed to apply
Enables the Windows MediaCreationTool21H2 to run.
Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- 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 8b6febe6b3b..51e24d980fa 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..a418977ee15 --- /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 */ \ No newline at end of file
Required by the Windows MediaCreationTool21H2.
Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- dlls/wdscore/main.c | 28 ++++++++++++++++++++++++++++ dlls/wdscore/wdscore.spec | 8 ++++---- dlls/wdscore/wdscore_internal.h | 27 +++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 4 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 51e24d980fa..18de37d1ed7 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 +@ 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 a418977ee15..078a05b11a5 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,
Hi Mohamad, just noticed something while giving this patch a look over:
diff --git a/dlls/wdscore/wdscore.spec b/dlls/wdscore/wdscore.spec index 51e24d980fa..18de37d1ed7 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
The changes to 'WdsTempDir' and 'WdsPublishImmediateAsynch' seem unrelated to this patch. If they should be changed, this should probably be done in a separate patch.
Hi Connor,
Thanks for the feedback.
I understand, I've submitted a revision.
On Wed, Jan 26, 2022 at 11:31 PM Connor McAdams cmcadams@codeweavers.com wrote:
Hi Mohamad, just noticed something while giving this patch a look over:
diff --git a/dlls/wdscore/wdscore.spec b/dlls/wdscore/wdscore.spec index 51e24d980fa..18de37d1ed7 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
The changes to 'WdsTempDir' and 'WdsPublishImmediateAsynch' seem unrelated to this patch. If they should be changed, this should probably be done in a separate patch.