On Mon 7 9 12:58, Jon Doron wrote:
For some reason muirct.exe is aware of the opaque structure used by BeginUpdateResource, it access the filename field of the opaque structure during it's processing.
MS documentation for the muirct utility: https://docs.microsoft.com/en-us/windows/desktop/intl/resource-utilities
Sample execution: MUIRCT.EXE -c "ui.exe" -e "de-DE\ui.exe.mui"
Signed-off-by: Jon Doron arilou@gmail.com
dlls/kernel32/tests/resource.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)
diff --git a/dlls/kernel32/tests/resource.c b/dlls/kernel32/tests/resource.c index 74066cfba3..6db9655833 100644 --- a/dlls/kernel32/tests/resource.c +++ b/dlls/kernel32/tests/resource.c @@ -24,6 +24,7 @@ #include "wine/test.h"
static const char filename[] = "test_.exe"; +static const wchar_t filenameW[] = L"test_.exe";
Hi, please don't use L"" to define a wchar string. Checkout https://wiki.winehq.org/Developer_Hints#Using_only_C89-compliant_code
static DWORD GLE;
enum constants { @@ -463,6 +464,28 @@ static void test_find_resource(void) ok( GetLastError() == ERROR_RESOURCE_LANG_NOT_FOUND, "wrong error %u\n", GetLastError() ); }
+static void test_muirct_compatiblity(void) +{
- HANDLE res = NULL;
The NULL initialization is not necessary.
- PVOID res_data;
- PWCHAR res_filename;
res_filenameW is more appropriate.
Write VOID * instead of PVOID See https://wiki.winehq.org/Submitting_Patches#Code_guidelines.
+> + res = BeginUpdateResourceW( (PWCHAR)filenameW, FALSE );
- ok( res != NULL, "BeginUpdateResourceW failed\n" );
- res_data = GlobalLock(res);
- ok( res_data != NULL, "GlobalLock failed\n" );
+#ifdef _WIN64
- res_filename = (PWCHAR)GlobalLock( *(HGLOBAL*)((ULONG_PTR)res_data + 0x30) );
+#else
- res_filename = (PWCHAR)GlobalLock( *(HGLOBAL*)((ULONG_PTR)res_data + 0x18) );
+#endif
- ok( res_filename != NULL, "GlobalLock for res_filename failed\n" );
- ok( !lstrcmpW(res_filename, (PWCHAR)filenameW), "Filename fields do not match\n" );
- ok( GlobalUnlock( res_filename ), "GlobalUnlock res_filenamed failed\n" );
Typo res_filenamed
- ok( GlobalUnlock( res_data ), "GlobalUnlock res_data failed\n" );
Missing a GlobalUnlock(res)?
Thanks, Zhiyi
- ok( EndUpdateResourceW( res, TRUE ), "EndUpdateResourceW failed\n");
+}
START_TEST(resource) { DWORD i; @@ -482,6 +505,7 @@ START_TEST(resource) { const struct _sec_variants *sec = &sec_variants[i]; build_exe( &sec->build );
test_muirct_compatiblity(); update_resources_none(); check_exe( &sec->chk_none ); update_resources_delete();