Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
June 2022
- 68 participants
- 3274 messages
[PATCH v3 2/5] wined3d: Add Vulkan format information for WINED3DFMT_B5G6R5_UNORM.
by Zebediah Figura
From: Zebediah Figura <zfigura(a)codeweavers.com>
---
dlls/wined3d/utils.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 381c1ae7bc6..7761576c058 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -4300,6 +4300,7 @@ static void init_vulkan_format_info(struct wined3d_format_vk *format,
{WINED3DFMT_B8G8R8A8_UNORM_SRGB, VK_FORMAT_B8G8R8A8_SRGB, },
{WINED3DFMT_B8G8R8X8_UNORM, VK_FORMAT_B8G8R8A8_UNORM, "XYZ1"},
{WINED3DFMT_B8G8R8X8_UNORM_SRGB, VK_FORMAT_B8G8R8A8_SRGB, "XYZ1"},
+ {WINED3DFMT_B5G6R5_UNORM, VK_FORMAT_R5G6B5_UNORM_PACK16, },
{WINED3DFMT_BC1_UNORM, VK_FORMAT_BC1_RGBA_UNORM_BLOCK, },
{WINED3DFMT_BC1_UNORM_SRGB, VK_FORMAT_BC1_RGBA_SRGB_BLOCK, },
{WINED3DFMT_BC2_UNORM, VK_FORMAT_BC2_UNORM_BLOCK, },
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/255
June 23, 2022
[PATCH v3 1/5] d3d11/tests: Add tests for D3D11_FORMAT_SUPPORT_BLENDABLE.
by Zebediah Figura
From: Zebediah Figura <zfigura(a)codeweavers.com>
---
dlls/d3d11/tests/d3d11.c | 40 ++++++++++++++++++++++++++++++++++++++--
1 file changed, 38 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index 345a87c4194..2a2a3d714b8 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -20771,7 +20771,7 @@ static void check_format_support(const unsigned int *format_support, D3D_FEATURE
if (formats[i].fl_required <= feature_level)
{
- todo_wine_if (feature_flag == D3D11_FORMAT_SUPPORT_DISPLAY)
+ todo_wine_if (feature_flag == D3D11_FORMAT_SUPPORT_DISPLAY || feature_flag == D3D11_FORMAT_SUPPORT_BLENDABLE)
ok(supported, "Format %#x - %s not supported, feature_level %#x, format support %#x.\n",
format, feature_name, feature_level, format_support[format]);
continue;
@@ -20785,7 +20785,7 @@ static void check_format_support(const unsigned int *format_support, D3D_FEATURE
continue;
}
- todo_wine_if (feature_flag != D3D11_FORMAT_SUPPORT_DISPLAY)
+ todo_wine_if (feature_flag != D3D11_FORMAT_SUPPORT_DISPLAY && feature_flag != D3D11_FORMAT_SUPPORT_BLENDABLE)
ok(!supported, "Format %#x - %s supported, feature level %#x, format support %#x.\n",
format, feature_name, feature_level, format_support[format]);
}
@@ -20814,6 +20814,39 @@ static void test_format_support(const D3D_FEATURE_LEVEL feature_level)
{DXGI_FORMAT_R16_FLOAT, D3D_FEATURE_LEVEL_10_0},
};
+ static const struct format_support blend[] =
+ {
+ {DXGI_FORMAT_R16G16B16A16_UNORM, D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0},
+ {DXGI_FORMAT_R16G16_UNORM, D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0},
+ {DXGI_FORMAT_R16_UNORM, D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0},
+ {DXGI_FORMAT_R16G16B16A16_SNORM, D3D_FEATURE_LEVEL_10_1},
+ {DXGI_FORMAT_R16G16_SNORM, D3D_FEATURE_LEVEL_10_1},
+ {DXGI_FORMAT_R16_SNORM, D3D_FEATURE_LEVEL_10_1},
+ {DXGI_FORMAT_R8G8B8A8_SNORM, D3D_FEATURE_LEVEL_10_1},
+ {DXGI_FORMAT_R8G8_SNORM, D3D_FEATURE_LEVEL_10_1},
+ {DXGI_FORMAT_R8_SNORM, D3D_FEATURE_LEVEL_10_1},
+
+ {DXGI_FORMAT_R32G32B32A32_FLOAT, D3D_FEATURE_LEVEL_10_0},
+ {DXGI_FORMAT_R32G32_FLOAT, D3D_FEATURE_LEVEL_10_0},
+ {DXGI_FORMAT_R32_FLOAT, D3D_FEATURE_LEVEL_10_0},
+ {DXGI_FORMAT_R10G10B10A2_UNORM, D3D_FEATURE_LEVEL_10_0},
+ {DXGI_FORMAT_R11G11B10_FLOAT, D3D_FEATURE_LEVEL_10_0},
+ {DXGI_FORMAT_R16_FLOAT, D3D_FEATURE_LEVEL_10_0},
+
+ {DXGI_FORMAT_R16G16B16A16_FLOAT, D3D_FEATURE_LEVEL_9_3},
+
+ {DXGI_FORMAT_R8G8B8A8_UNORM, D3D_FEATURE_LEVEL_9_1},
+ {DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, D3D_FEATURE_LEVEL_9_1},
+ {DXGI_FORMAT_R8G8_UNORM, D3D_FEATURE_LEVEL_9_1},
+ {DXGI_FORMAT_R8_UNORM, D3D_FEATURE_LEVEL_9_1},
+ {DXGI_FORMAT_A8_UNORM, D3D_FEATURE_LEVEL_9_1},
+ {DXGI_FORMAT_B5G6R5_UNORM, D3D_FEATURE_LEVEL_9_1},
+ {DXGI_FORMAT_B8G8R8A8_UNORM, D3D_FEATURE_LEVEL_9_1},
+ {DXGI_FORMAT_B8G8R8X8_UNORM, D3D_FEATURE_LEVEL_9_1},
+ {DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, D3D_FEATURE_LEVEL_9_1},
+ {DXGI_FORMAT_B8G8R8X8_UNORM_SRGB, D3D_FEATURE_LEVEL_9_1},
+ };
+
device_desc.feature_level = &feature_level;
device_desc.flags = 0;
if (!(device = create_device(&device_desc)))
@@ -20887,6 +20920,9 @@ static void test_format_support(const D3D_FEATURE_LEVEL feature_level)
display_format_support, ARRAY_SIZE(display_format_support),
D3D11_FORMAT_SUPPORT_DISPLAY, "display");
+ check_format_support(format_support, feature_level, blend, ARRAY_SIZE(blend),
+ D3D11_FORMAT_SUPPORT_BLENDABLE, "blendable");
+
refcount = ID3D11Device_Release(device);
ok(!refcount, "Device has %lu references left.\n", refcount);
}
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/255
June 23, 2022
[PATCH v3 0/5] MR255: d3d11: Fix reporting of some format caps.
by Zebediah Figura (@zfigura)
--
v3: d3d11: Check for WINED3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING with WINED3D_RTYPE_TEXTURE_2D.
wined3d: Retrieve caps from both WINED3D_GL_RES_TYPE_TEX_2D and WINED3D_GL_RES_TYPE_RB for 2D textures in wined3d_check_device_format().
wined3d: Report WINED3D_FORMAT_CAP_BLIT for formats supporting VK_FORMAT_FEATURE_TRANSFER_SRC and VK_FORMAT_FEATURE_TRANSFER_DST.
wined3d: Add Vulkan format information for WINED3DFMT_B5G6R5_UNORM.
d3d11/tests: Add tests for D3D11_FORMAT_SUPPORT_BLENDABLE.
https://gitlab.winehq.org/wine/wine/-/merge_requests/255
June 23, 2022
[PATCH 1/1] reg: Add REG_QWORD support to 'add'.
by Nikolay Sivov
From: Nikolay Sivov <nsivov(a)codeweavers.com>
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
programs/reg/add.c | 16 +++++++
programs/reg/reg.c | 1 +
programs/reg/reg.h | 2 +-
programs/reg/reg.rc | 2 +-
programs/reg/tests/add.c | 97 ++++++++++++++++++++++++++++++++++++++++
5 files changed, 116 insertions(+), 2 deletions(-)
diff --git a/programs/reg/add.c b/programs/reg/add.c
index 269fa30e5e1..f3998554980 100644
--- a/programs/reg/add.c
+++ b/programs/reg/add.c
@@ -84,6 +84,22 @@ static BOOL get_regdata(const WCHAR *data, DWORD reg_type, WCHAR separator,
*(DWORD *)*data_bytes = val;
break;
}
+ case REG_QWORD:
+ {
+ LPWSTR rest;
+ UINT64 val;
+
+ val = _wcstoui64(data, &rest, (towlower(data[1]) == 'x') ? 16 : 10);
+ if (*rest || (val == ~0ull && errno == ERANGE))
+ {
+ output_message(STRING_MISSING_NUMBER);
+ return FALSE;
+ }
+ *size_bytes = sizeof(val);
+ *data_bytes = malloc(*size_bytes);
+ *(UINT64 *)*data_bytes = val;
+ break;
+ }
case REG_BINARY:
{
BYTE hex0, hex1, *ptr;
diff --git a/programs/reg/reg.c b/programs/reg/reg.c
index 4fd374579e9..5753b99bdf4 100644
--- a/programs/reg/reg.c
+++ b/programs/reg/reg.c
@@ -46,6 +46,7 @@ const struct reg_type_rels type_rels[] =
{REG_DWORD, L"REG_DWORD"},
{REG_DWORD_LITTLE_ENDIAN, L"REG_DWORD_LITTLE_ENDIAN"},
{REG_DWORD_BIG_ENDIAN, L"REG_DWORD_BIG_ENDIAN"},
+ {REG_QWORD, L"REG_QWORD"},
{REG_MULTI_SZ, L"REG_MULTI_SZ"},
};
diff --git a/programs/reg/reg.h b/programs/reg/reg.h
index 67b49b7797f..4ac54dcecaf 100644
--- a/programs/reg/reg.h
+++ b/programs/reg/reg.h
@@ -31,7 +31,7 @@ struct reg_type_rels {
const WCHAR *name;
};
-extern const struct reg_type_rels type_rels[8];
+extern const struct reg_type_rels type_rels[9];
void output_writeconsole(const WCHAR *str, DWORD wlen);
void WINAPIV output_message(unsigned int id, ...);
diff --git a/programs/reg/reg.rc b/programs/reg/reg.rc
index a3c53cf41b4..45acb993add 100644
--- a/programs/reg/reg.rc
+++ b/programs/reg/reg.rc
@@ -55,7 +55,7 @@ STRINGTABLE
\ The type of data to add to the registry. If [/t] is specified,\n\
\ <type> must be one of the following:\n\n\
\ REG_SZ | REG_MULTI_SZ | REG_EXPAND_SZ\n\
-\ REG_DWORD | REG_BINARY | REG_NONE\n\n\
+\ REG_DWORD | REG_QWORD | REG_BINARY | REG_NONE\n\n\
\ If [/t] is not specified, the default data type is REG_SZ.\n\n\
\ /s <separator>\n\
\ The character used to separate strings in REG_MULTI_SZ data.\n\
diff --git a/programs/reg/tests/add.c b/programs/reg/tests/add.c
index 0d213414443..dbe5fc4fa88 100644
--- a/programs/reg/tests/add.c
+++ b/programs/reg/tests/add.c
@@ -764,6 +764,102 @@ static void test_reg_dword_big_endian(void)
delete_key(HKEY_CURRENT_USER, KEY_BASE, 0);
}
+static void test_reg_qword(void)
+{
+ DWORD r, type, size;
+ UINT64 qword;
+ HKEY hkey;
+ LONG err;
+
+ add_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /t REG_QWORD /f /d 0x123456789abcdef", &r);
+ ok(r == REG_EXIT_SUCCESS, "Unexpected exit code %ld.\n", r);
+ qword = 0x123456789abcdef;
+ if (r == REG_EXIT_SUCCESS)
+ verify_reg(hkey, "", REG_QWORD, &qword, sizeof(qword), 0);
+ else
+ win_skip("broken reg.exe detected\n");
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /ve /t REG_QWORD /f", &r);
+ ok(r == REG_EXIT_SUCCESS, "Unexpected exit code %ld.\n", r);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /v qword0 /t REG_QWORD /f /d", &r);
+ ok(r == REG_EXIT_FAILURE, "Unexpected exit code %lu.\n", r);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /v qword1 /t REG_QWORD /f", &r);
+ ok(r == REG_EXIT_SUCCESS, "Unexpected exit code %ld.\n", r);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /v qword2 /t REG_QWORD /d zzz /f", &r);
+ ok(r == REG_EXIT_FAILURE, "Unexpected exit code %lu.\n", r);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /v qword3 /t REG_QWORD /d deadbeef /f", &r);
+ ok(r == REG_EXIT_FAILURE, "Unexpected exit code %lu.\n", r);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /v qword4 /t REG_QWORD /d 123xyz /f", &r);
+ ok(r == REG_EXIT_FAILURE, "Unexpected exit code %lu.\n", r);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /v qword5 /t reg_qword /d 12345678 /f", &r);
+ ok(r == REG_EXIT_SUCCESS, "Unexpected exit code %ld.\n", r);
+ qword = 12345678;
+ verify_reg(hkey, "qword5", REG_QWORD, &qword, sizeof(qword), 0);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /v qword6 /t REG_QWORD /D 0123 /f", &r);
+ ok(r == REG_EXIT_SUCCESS, "Unexpected exit code %ld.\n", r);
+ size = sizeof(qword);
+ err = RegQueryValueExA(hkey, "qword6", NULL, &type, (BYTE *)&qword, &size);
+ ok(err == ERROR_SUCCESS, "RegQueryValueEx failed: got %ld\n", err);
+ ok(type == REG_QWORD, "got wrong type %ld, expected %d\n", type, REG_DWORD);
+ ok(size == sizeof(qword), "got wrong size %ld, expected %d\n", size, (int)sizeof(DWORD));
+ ok(qword == 123, "got wrong data %I64d, expected 123\n", qword);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /v qword7 /t reg_qword /d 0xabcdefg /f", &r);
+ ok(r == REG_EXIT_FAILURE, "got exit code %ld, expected 1\n", r);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /v qword8 /t REG_qword /d 0xdeadbeef /f", &r);
+ ok(r == REG_EXIT_SUCCESS, "got exit code %ld, expected 0\n", r);
+ qword = 0xdeadbeef;
+ verify_reg(hkey, "qword8", REG_QWORD, &qword, sizeof(qword), 0);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /t REG_QWORD /v qword9 /f /d -1", &r);
+ ok(r == REG_EXIT_SUCCESS, "got exit code %ld, expected 0\n", r);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /t REG_QWORD /v qword10 /f /d -0x1", &r);
+ ok(r == REG_EXIT_FAILURE, "got exit code %lu, expected 1\n", r);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /v qword11 /t REG_qword /d 0x01ffffffffffffffff /f", &r);
+ ok(r == REG_EXIT_FAILURE, "got exit code %ld, expected 1\n", r);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /v qword12 /t REG_QWORD /d 0xffffffffffffffff /f", &r);
+ ok(r == REG_EXIT_SUCCESS, "got exit code %ld, expected 0\n", r);
+ qword = ~0ull;
+ verify_reg(hkey, "qword12", REG_QWORD, &qword, sizeof(qword), 0);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /v qword13 /t REG_QWORD /d 00x123 /f", &r);
+ ok(r == REG_EXIT_FAILURE, "got exit code %ld, expected 1\n", r);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /v qword14 /t REG_QWORD /d 0X123 /f", &r);
+ ok(r == REG_EXIT_SUCCESS, "got exit code %ld, expected 0\n", r);
+ qword = 0x123;
+ verify_reg(hkey, "qword14", REG_QWORD, &qword, sizeof(qword), 0);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /v qword15 /t REG_QWORD /d 18446744073709551616 /f", &r);
+ ok(r == REG_EXIT_FAILURE, "got exit code %lu, expected 1\n", r);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /v qword16 /t REG_QWORD /d 456 /f", &r);
+ ok(r == REG_EXIT_SUCCESS, "got exit code %ld, expected 0\n", r);
+ qword = 456;
+ verify_reg(hkey, "qword16", REG_QWORD, &qword, sizeof(qword), 0);
+
+ run_reg_exe("reg add HKCU\\" KEY_BASE " /v qword17 /t REG_QWORD /d 0x456 /f", &r);
+ ok(r == REG_EXIT_SUCCESS, "got exit code %ld, expected 0\n", r);
+ qword = 0x456;
+ verify_reg(hkey, "qword17", REG_QWORD, &qword, sizeof(qword), 0);
+
+ close_key(hkey);
+ delete_key(HKEY_CURRENT_USER, KEY_BASE, 0);
+}
+
static void test_reg_multi_sz(void)
{
HKEY hkey;
@@ -988,6 +1084,7 @@ START_TEST(add)
test_reg_binary();
test_reg_dword();
test_reg_dword_big_endian();
+ test_reg_qword();
test_reg_multi_sz();
/* Check if reg.exe is running with elevated privileges */
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/306
June 23, 2022
[PATCH 0/1] MR306: reg: Add REG_QWORD support to 'add'.
by Nikolay Sivov (@nsivov)
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/306
June 23, 2022
[PATCH 2/2] regedit: Remove unnecessary string conversion when modifying REG_DWORD value.
by Nikolay Sivov
From: Nikolay Sivov <nsivov(a)codeweavers.com>
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
programs/regedit/edit.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/programs/regedit/edit.c b/programs/regedit/edit.c
index e18b6ca5846..c19ef1506fa 100644
--- a/programs/regedit/edit.c
+++ b/programs/regedit/edit.c
@@ -284,16 +284,16 @@ BOOL ModifyValue(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath, LPCWSTR valueName)
DWORD value = *((DWORD*)stringValueData);
stringValueData = heap_xrealloc(stringValueData, 64);
wsprintfW(stringValueData, L"%x", value);
- if (DialogBoxW(0, MAKEINTRESOURCEW(IDD_EDIT_DWORD), hwnd, modify_dlgproc) == IDOK) {
- DWORD val;
- CHAR* valueA = GetMultiByteString(stringValueData);
- if (sscanf(valueA, isDecimal ? "%lu" : "%lx", &val)) {
- lRet = RegSetValueExW(hKey, valueName, 0, type, (BYTE*)&val, sizeof(val));
- if (lRet == ERROR_SUCCESS) result = TRUE;
+ if (DialogBoxW(0, MAKEINTRESOURCEW(IDD_EDIT_DWORD), hwnd, modify_dlgproc) == IDOK)
+ {
+ DWORD val;
+ if (swscanf(stringValueData, isDecimal ? L"%lu" : L"%lx", &val))
+ {
+ lRet = RegSetValueExW(hKey, valueName, 0, type, (BYTE*)&val, sizeof(val));
+ if (lRet == ERROR_SUCCESS) result = TRUE;
else error_code_messagebox(hwnd, IDS_SET_VALUE_FAILED);
- }
- heap_free(valueA);
- }
+ }
+ }
} else if ( type == REG_QWORD ) {
UINT64 value = *((UINT64 *)stringValueData);
stringValueData = heap_xrealloc(stringValueData, 64);
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/305
June 23, 2022
[PATCH 1/2] regedit: Add support for REG_QWORD type.
by Nikolay Sivov
From: Nikolay Sivov <nsivov(a)codeweavers.com>
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
---
programs/regedit/edit.c | 29 ++++++++++++++++++++++-------
programs/regedit/framewnd.c | 5 ++++-
programs/regedit/listview.c | 12 ++++++++++++
programs/regedit/regedit.rc | 5 +++++
programs/regedit/resource.h | 2 ++
5 files changed, 45 insertions(+), 8 deletions(-)
diff --git a/programs/regedit/edit.c b/programs/regedit/edit.c
index b808c38c51c..e18b6ca5846 100644
--- a/programs/regedit/edit.c
+++ b/programs/regedit/edit.c
@@ -86,17 +86,18 @@ static void WINAPIV error_code_messagebox(HWND hwnd, unsigned int msg_id, ...)
static BOOL change_dword_base(HWND hwndDlg, BOOL toHex)
{
WCHAR buf[128];
- DWORD val;
+ UINT64 val;
if (!GetDlgItemTextW(hwndDlg, IDC_VALUE_DATA, buf, ARRAY_SIZE(buf))) return FALSE;
- if (!swscanf(buf, toHex ? L"%u" : L"%x", &val)) return FALSE;
- wsprintfW(buf, toHex ? L"%x" : L"%u", val);
+ if (!swscanf(buf, toHex ? L"%I64u" : L"%I64x", &val)) return FALSE;
+ wsprintfW(buf, toHex ? L"%I64x" : L"%I64u", val);
return SetDlgItemTextW(hwndDlg, IDC_VALUE_DATA, buf);
}
static INT_PTR CALLBACK modify_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HWND hwndValue;
+ WCHAR buff[64];
int len;
switch(uMsg) {
@@ -105,6 +106,8 @@ static INT_PTR CALLBACK modify_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, L
SetDlgItemTextW(hwndDlg, IDC_VALUE_DATA, stringValueData);
CheckRadioButton(hwndDlg, IDC_DWORD_HEX, IDC_DWORD_DEC, IDC_DWORD_HEX);
isDecimal = FALSE;
+ if (lParam == REG_QWORD && LoadStringW(GetModuleHandleW(0), IDS_EDIT_QWORD, buff, ARRAY_SIZE(buff)))
+ SetWindowTextW(hwndDlg, buff);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
@@ -291,6 +294,19 @@ BOOL ModifyValue(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath, LPCWSTR valueName)
}
heap_free(valueA);
}
+ } else if ( type == REG_QWORD ) {
+ UINT64 value = *((UINT64 *)stringValueData);
+ stringValueData = heap_xrealloc(stringValueData, 64);
+ swprintf(stringValueData, 64, L"%I64x", value);
+ if (DialogBoxParamW(0, MAKEINTRESOURCEW(IDD_EDIT_DWORD), hwnd, modify_dlgproc, type) == IDOK)
+ {
+ if (swscanf(stringValueData, isDecimal ? L"%I64u" : L"%I64x", &value))
+ {
+ lRet = RegSetValueExW(hKey, valueName, 0, type, (BYTE *)&value, sizeof(value));
+ if (lRet == ERROR_SUCCESS) result = TRUE;
+ else error_code_messagebox(hwnd, IDS_SET_VALUE_FAILED);
+ }
+ }
} else if ( type == REG_MULTI_SZ ) {
WCHAR char1 = '\r', char2 = '\n';
WCHAR *tmpValueData = NULL;
@@ -426,7 +442,7 @@ BOOL CreateValue(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath, DWORD valueType, LPW
{
LONG lRet = ERROR_SUCCESS;
WCHAR newValue[256];
- DWORD valueDword = 0;
+ UINT64 value = 0;
BOOL result = FALSE;
int valueNum, index;
HKEY hKey;
@@ -451,15 +467,14 @@ BOOL CreateValue(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath, DWORD valueType, LPW
goto done;
}
- lRet = RegSetValueExW(hKey, valueName, 0, valueType, (BYTE*)&valueDword, sizeof(DWORD));
+ lRet = RegSetValueExW(hKey, valueName, 0, valueType, (BYTE *)&value, sizeof(value));
if (lRet) {
error_code_messagebox(hwnd, IDS_CREATE_VALUE_FAILED);
goto done;
}
/* Add the new item to the listview */
- index = AddEntryToList(g_pChildWnd->hListWnd, valueName, valueType,
- (BYTE *)&valueDword, sizeof(DWORD), -1);
+ index = AddEntryToList(g_pChildWnd->hListWnd, valueName, valueType, (BYTE *)&value, sizeof(value), -1);
item.state = LVIS_FOCUSED | LVIS_SELECTED;
item.stateMask = LVIS_FOCUSED | LVIS_SELECTED;
SendMessageW(g_pChildWnd->hListWnd, LVM_SETITEMSTATE, index, (LPARAM)&item);
diff --git a/programs/regedit/framewnd.c b/programs/regedit/framewnd.c
index 88f05420675..83e4ec89ee0 100644
--- a/programs/regedit/framewnd.c
+++ b/programs/regedit/framewnd.c
@@ -158,7 +158,7 @@ static void update_new_items_and_copy_keyname(HMENU hMenu, WCHAR *keyName)
{
unsigned int state = MF_ENABLED, i;
unsigned int items[] = {ID_EDIT_NEW_KEY, ID_EDIT_NEW_STRINGVALUE, ID_EDIT_NEW_BINARYVALUE,
- ID_EDIT_NEW_DWORDVALUE, ID_EDIT_NEW_MULTI_STRINGVALUE,
+ ID_EDIT_NEW_DWORDVALUE, ID_EDIT_NEW_QWORDVALUE, ID_EDIT_NEW_MULTI_STRINGVALUE,
ID_EDIT_NEW_EXPANDVALUE, ID_EDIT_COPYKEYNAME};
if (!keyName)
@@ -930,6 +930,9 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
goto create_value;
case ID_EDIT_NEW_DWORDVALUE:
valueType = REG_DWORD;
+ goto create_value;
+ case ID_EDIT_NEW_QWORDVALUE:
+ valueType = REG_QWORD;
/* fall through */
create_value:
{
diff --git a/programs/regedit/listview.c b/programs/regedit/listview.c
index 50157eb12ef..e314862ee6f 100644
--- a/programs/regedit/listview.c
+++ b/programs/regedit/listview.c
@@ -118,6 +118,14 @@ void format_value_data(HWND hwndLV, int index, DWORD type, void *data, DWORD siz
ListView_SetItemTextW(hwndLV, index, 2, buf);
break;
}
+ case REG_QWORD:
+ {
+ UINT64 value = *(UINT64 *)data;
+ WCHAR buf[64];
+ swprintf(buf, ARRAY_SIZE(buf), L"0x%08Ix (%Iu)", value, value);
+ ListView_SetItemTextW(hwndLV, index, 2, buf);
+ break;
+ }
case REG_MULTI_SZ:
MakeMULTISZDisplayable(data);
ListView_SetItemTextW(hwndLV, index, 2, data);
@@ -245,6 +253,7 @@ void OnGetDispInfo(NMLVDISPINFOW *plvdi)
reg_binaryT[] = L"REG_BINARY",
reg_dwordT[] = L"REG_DWORD",
reg_dword_big_endianT[] = L"REG_DWORD_BIG_ENDIAN",
+ reg_qwordT[] = L"REG_QWORD",
reg_multi_szT[] = L"REG_MULTI_SZ",
reg_linkT[] = L"REG_LINK",
reg_resource_listT[] = L"REG_RESOURCE_LIST",
@@ -275,6 +284,9 @@ void OnGetDispInfo(NMLVDISPINFOW *plvdi)
case REG_DWORD:
plvdi->item.pszText = reg_dwordT;
break;
+ case REG_QWORD:
+ plvdi->item.pszText = reg_qwordT;
+ break;
case REG_DWORD_BIG_ENDIAN:
plvdi->item.pszText = reg_dword_big_endianT;
break;
diff --git a/programs/regedit/regedit.rc b/programs/regedit/regedit.rc
index d7dd7c4b49e..1b0c15ecc94 100644
--- a/programs/regedit/regedit.rc
+++ b/programs/regedit/regedit.rc
@@ -48,6 +48,7 @@ BEGIN
MENUITEM "&String Value", ID_EDIT_NEW_STRINGVALUE
MENUITEM "&Binary Value", ID_EDIT_NEW_BINARYVALUE
MENUITEM "&DWORD Value", ID_EDIT_NEW_DWORDVALUE
+ MENUITEM "&QWORD Value", ID_EDIT_NEW_QWORDVALUE
MENUITEM "&Multi-String Value", ID_EDIT_NEW_MULTI_STRINGVALUE
MENUITEM "&Expandable String Value", ID_EDIT_NEW_EXPANDVALUE
END
@@ -100,6 +101,7 @@ BEGIN
MENUITEM "&String Value", ID_EDIT_NEW_STRINGVALUE
MENUITEM "&Binary Value", ID_EDIT_NEW_BINARYVALUE
MENUITEM "&DWORD Value", ID_EDIT_NEW_DWORDVALUE
+ MENUITEM "&QWORD Value", ID_EDIT_NEW_QWORDVALUE
MENUITEM "&Multi-String Value", ID_EDIT_NEW_MULTI_STRINGVALUE
MENUITEM "&Expandable String Value", ID_EDIT_NEW_EXPANDVALUE
END
@@ -122,6 +124,7 @@ BEGIN
MENUITEM "&String Value", ID_EDIT_NEW_STRINGVALUE
MENUITEM "&Binary Value", ID_EDIT_NEW_BINARYVALUE
MENUITEM "&DWORD Value", ID_EDIT_NEW_DWORDVALUE
+ MENUITEM "&QWORD Value", ID_EDIT_NEW_QWORDVALUE
MENUITEM "&Multi-String Value", ID_EDIT_NEW_MULTI_STRINGVALUE
MENUITEM "&Expandable String Value", ID_EDIT_NEW_EXPANDVALUE
END
@@ -171,6 +174,7 @@ BEGIN
ID_EDIT_NEW_STRINGVALUE "Adds a new string value"
ID_EDIT_NEW_BINARYVALUE "Adds a new binary value"
ID_EDIT_NEW_DWORDVALUE "Adds a new 32-bit value"
+ ID_EDIT_NEW_QWORDVALUE "Adds a new 64-bit value"
ID_EDIT_NEW_MULTI_STRINGVALUE "Adds a new multi-string value"
ID_EDIT_NEW_EXPANDVALUE "Adds a new expandable string value"
ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
@@ -213,6 +217,7 @@ BEGIN
IDS_NEWKEY "New Key #%d"
IDS_NEWVALUE "New Value #%d"
IDS_NOTFOUND "Search complete. The string '%1' was not found."
+ IDS_EDIT_QWORD "Edit QWORD"
END
STRINGTABLE
diff --git a/programs/regedit/resource.h b/programs/regedit/resource.h
index 2bcdd39ad4f..c61b2fa048d 100644
--- a/programs/regedit/resource.h
+++ b/programs/regedit/resource.h
@@ -146,6 +146,8 @@
#define IDS_COLLAPSE 33107
#define IDS_EDIT_MODIFY 33108
#define IDS_EDIT_MODIFY_BIN 33109
+#define ID_EDIT_NEW_QWORDVALUE 33110
+#define IDS_EDIT_QWORD 33111
#define IDD_EDIT_STRING 2000
#define IDC_VALUE_NAME 2001
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/305
June 23, 2022
[PATCH 0/2] MR305: regedit: Add support for REG_QWORD type.
by Nikolay Sivov (@nsivov)
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/305
June 23, 2022
[PATCH v3] ntdll: Add RtlGetDeviceFamilyInfoEnum and RtlConvertDeviceFamilyInfoToString
by Kacper Raczy
APIs introduced in Windows 10 (NT10.0).
Device form and family are hardcoded to Unknown and Windows.Desktop respectively.
Unit tests included in dlls/ntdll/tests/version.c
Signed-off-by: Kacper Raczy <gfw.kra(a)gmail.com>
---
dlls/ntdll/ntdll.spec | 2 +
dlls/ntdll/rtl.c | 2 +-
dlls/ntdll/tests/Makefile.in | 3 +-
dlls/ntdll/tests/version.c | 87 ++++++++++++++++++++++++++++++++++++
dlls/ntdll/version.c | 48 +++++++++++++++++++-
include/winnt.h | 13 ++++++
6 files changed, 152 insertions(+), 3 deletions(-)
create mode 100644 dlls/ntdll/tests/version.c
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index b1650ab4306..4539a9bd0ed 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -712,6 +712,8 @@
@ stdcall RtlGetCurrentProcessorNumberEx(ptr)
@ stdcall RtlGetCurrentTransaction()
@ stdcall RtlGetDaclSecurityDescriptor(ptr ptr ptr ptr)
+@ stdcall RtlGetDeviceFamilyInfoEnum(ptr ptr ptr)
+@ stdcall RtlConvertDeviceFamilyInfoToString(ptr ptr ptr ptr)
@ stdcall RtlGetElementGenericTable(ptr long)
# @ stub RtlGetElementGenericTableAvl
@ stdcall RtlGetEnabledExtendedFeatures(int64)
diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c
index 11067f44941..421cf377d32 100644
--- a/dlls/ntdll/rtl.c
+++ b/dlls/ntdll/rtl.c
@@ -2211,4 +2211,4 @@ char WINAPI RtlQueryProcessPlaceholderCompatibilityMode(void)
{
FIXME("stub\n");
return PHCM_APPLICATION_DEFAULT;
-}
+}
\ No newline at end of file
diff --git a/dlls/ntdll/tests/Makefile.in b/dlls/ntdll/tests/Makefile.in
index 90deb5865f8..e64b70b15e4 100644
--- a/dlls/ntdll/tests/Makefile.in
+++ b/dlls/ntdll/tests/Makefile.in
@@ -25,5 +25,6 @@ C_SRCS = \
thread.c \
threadpool.c \
time.c \
+ version.c \
virtual.c \
- wow64.c
+ wow64.c
\ No newline at end of file
diff --git a/dlls/ntdll/tests/version.c b/dlls/ntdll/tests/version.c
new file mode 100644
index 00000000000..296889efc8e
--- /dev/null
+++ b/dlls/ntdll/tests/version.c
@@ -0,0 +1,87 @@
+/*
+ * Unit test suite for Rtl* Version API functions
+ *
+ * Copyright 2022 Kacper Rączy
+ *
+ * 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 "ntdll_test.h"
+#include "wine/test.h"
+
+static const WCHAR DeviceForms[][32] = {
+ L"Unknown", L"Phone", L"Tablet", L"Desktop", L"Notebook",
+ L"Convertible", L"Detachable", L"All-in-One", L"Stick PC", L"Puck",
+ L"Surface Hub", L"Head-mounted display", L"Industry handheld", L"Industry tablet", L"Banking",
+ L"Building automation", L"Digital signage", L"Gaming", L"Home automation", L"Industrial automation",
+ L"Kiosk", L"Maker board", L"Medical", L"Networking", L"Point of Service",
+ L"Printing", L"Thin client", L"Toy", L"Vending", L"Industry other"
+};
+
+static void test_RtlGetDeviceFamilyInfoEnum(void)
+{
+ DWORD family, form;
+ ULONGLONG uap;
+ RTL_OSVERSIONINFOEXW version;
+
+ RtlGetVersion(&version);
+ RtlGetDeviceFamilyInfoEnum(&uap, &family, &form);
+ ok( ((uap >> 48) & 0xffff) == version.dwMajorVersion,
+ "First 16-bit chunk of UAP does not match major system version %llx\n", uap );
+ ok( ((uap >> 32) & 0xffff) == version.dwMinorVersion,
+ "Second 16-bit chunk of UAP does not match minor system version %llx\n", uap );
+ ok( ((uap >> 16) & 0xffff) == version.dwBuildNumber,
+ "Third 16-bit chunk of UAP does not match build number %llx\n", uap );
+ ok( family <= DEVICEFAMILYINFOENUM_MAX,
+ "Device family is not valid: %lx\n", family );
+ ok( form <= DEVICEFAMILYDEVICEFORM_MAX,
+ "Device form is not valid: %lx\n", form );
+}
+
+static void test_RtlConvertDeviceFamilyInfoToString(void)
+{
+ DWORD family_bufsize = 0, form_bufsize = 0;
+ WCHAR *family, *form;
+ BOOL form_valid = FALSE;
+
+ RtlConvertDeviceFamilyInfoToString(&family_bufsize, &form_bufsize, NULL, NULL);
+ ok( family_bufsize == sizeof(WCHAR) * 16, /* Windows.Desktop length */
+ "Device family bufsize does not match: %lu\n", family_bufsize );
+ ok( form_bufsize > 0, "Device form bufsize is invalid: %lu\n", form_bufsize );
+
+ family = (WCHAR*)malloc(family_bufsize);
+ form = (WCHAR*)malloc(form_bufsize);
+ RtlConvertDeviceFamilyInfoToString(&family_bufsize, &form_bufsize, family, form);
+ ok( wcscmp(family, L"Windows.Desktop") == 0,
+ "Device family string is not equal to Windows.Desktop: %ls\n", family );
+ /* Device form depends on OEM setting in registry,
+ * lets check all possible values to make it work on Windows */
+ for (int i = 0; i < sizeof(DeviceForms) / sizeof(WCHAR*); i++) {
+ if (wcscmp(form, DeviceForms[i]) == 0) {
+ form_valid = TRUE;
+ break;
+ }
+ }
+ ok( form_valid, "Device form string is not valid or known: %ls\n", form);
+
+ free(family);
+ free(form);
+}
+
+START_TEST(version)
+{
+ test_RtlGetDeviceFamilyInfoEnum();
+ test_RtlConvertDeviceFamilyInfoToString();
+}
diff --git a/dlls/ntdll/version.c b/dlls/ntdll/version.c
index 492c24cc636..d474635ac2f 100644
--- a/dlls/ntdll/version.c
+++ b/dlls/ntdll/version.c
@@ -609,7 +609,6 @@ void WINAPI RtlGetNtVersionNumbers( LPDWORD major, LPDWORD minor, LPDWORD build
if (build) *build = (0xF0000000 | current_version->dwBuildNumber);
}
-
/******************************************************************************
* RtlGetNtProductType (NTDLL.@)
*/
@@ -760,6 +759,53 @@ NTSTATUS WINAPI RtlVerifyVersionInfo( const RTL_OSVERSIONINFOEXW *info,
return STATUS_SUCCESS;
}
+/*********************************************************************
+ * RtlGetDeviceFamilyInfoEnum (NTDLL.@)
+ *
+ * NOTES
+ * Introduced in Windows 10 (NT10.0)
+ */
+void WINAPI RtlGetDeviceFamilyInfoEnum( ULONGLONG *uap_info, DWORD *device_family, DWORD *device_form )
+{
+ if (device_form)
+ *device_form = DEVICEFAMILYDEVICEFORM_UNKNOWN;
+ if (device_family)
+ *device_family = DEVICEFAMILYINFOENUM_DESKTOP;
+ if (!uap_info)
+ return;
+
+ /**
+ * UAP info is 64 bit unsigned integer which contains four 16-bit chunks:
+ * 1. os version major
+ * 2. os version minor
+ * 3. current build number
+ * 4. update build revision
+ */
+ *uap_info = 0;
+ *uap_info |= (((ULONGLONG)current_version->dwMajorVersion & 0xffff) << 48); /* os version major */
+ *uap_info |= (((ULONGLONG)current_version->dwMinorVersion & 0xffff) << 32); /* os version minor */
+ *uap_info |= (((ULONGLONG)current_version->dwBuildNumber & 0xffff) << 16); /* current build number */
+ /* UBR not available */
+}
+
+/*********************************************************************
+ * RtlConvertDeviceFamilyInfoToString (NTDLL.@)
+ *
+ * NOTES
+ * Introduced in Windows 10 (NT10.0)
+ */
+void WINAPI RtlConvertDeviceFamilyInfoToString( DWORD *device_family_bufsize, DWORD *device_form_bufsize,
+ const WCHAR *device_family, const WCHAR *device_form)
+{
+ DWORD device_family_len = (wcslen( L"Windows.Desktop" ) + 1) * sizeof(WCHAR);
+ DWORD device_form_len = (wcslen( L"Unknown" ) + 1) * sizeof(WCHAR);
+ if (*device_family_bufsize >= device_family_len)
+ wcscpy( device_family, L"Windows.Desktop" );
+ if (*device_form_bufsize >= device_form_len)
+ wcscpy( device_form, L"Unknown" );
+ *device_family_bufsize = device_family_len;
+ *device_form_bufsize = device_form_len;
+}
/******************************************************************************
* VerSetConditionMask (NTDLL.@)
diff --git a/include/winnt.h b/include/winnt.h
index 87c4b4da92d..88948122b81 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -6224,6 +6224,19 @@ typedef struct _SYSTEM_CPU_SET_INFORMATION
} DUMMYUNIONNAME;
} SYSTEM_CPU_SET_INFORMATION, *PSYSTEM_CPU_SET_INFORMATION;
+/* Windows 10 Rtl apis */
+
+#define DEVICEFAMILYINFOENUM_DESKTOP 0x00000003
+
+#define DEVICEFAMILYINFOENUM_MAX 0x00000011
+
+#define DEVICEFAMILYDEVICEFORM_UNKNOWN 0x00000000
+
+#define DEVICEFAMILYDEVICEFORM_MAX 0x00000021
+
+NTSYSAPI VOID WINAPI RtlGetDeviceFamilyInfoEnum(ULONGLONG*, DWORD*, DWORD*);
+NTSYSAPI VOID WINAPI RtlConvertDeviceFamilyInfoToString(DWORD*, DWORD*, const WCHAR*, const WCHAR*);
+
/* Threadpool things */
typedef DWORD TP_VERSION,*PTP_VERSION;
--
2.36.1
June 23, 2022
Re: [PATCH v2 0/1] MR301: iphlpapi: Don't allocate the IO status block on the stack. - approved
by Alexandre Julliard (@julliard)
This merge request was approved by Alexandre Julliard.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/301
June 23, 2022