Zebediah Figura : kernelbase: Implement reading performance counter help strings.
Alexandre Julliard
julliard at winehq.org
Wed Aug 11 16:42:16 CDT 2021
Module: wine
Branch: master
Commit: aa99608dfac51239f62b971d40a813b5ae80e70b
URL: https://source.winehq.org/git/wine.git/?a=commit;h=aa99608dfac51239f62b971d40a813b5ae80e70b
Author: Zebediah Figura <zfigura at codeweavers.com>
Date: Wed Aug 11 00:20:08 2021 -0500
kernelbase: Implement reading performance counter help strings.
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/advapi32/tests/registry.c | 18 ++++++++++++------
dlls/kernelbase/registry.c | 23 +++++++++++++++++++++++
2 files changed, 35 insertions(+), 6 deletions(-)
diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c
index 811117beadc..4da2ce100ab 100644
--- a/dlls/advapi32/tests/registry.c
+++ b/dlls/advapi32/tests/registry.c
@@ -3849,7 +3849,7 @@ static void test_performance_keys(void)
size = 0xdeadbeef;
ret = RegQueryValueExA(keys[i], "hElP", NULL, NULL, NULL, &size);
- todo_wine
+ todo_wine_if (keys[i] != HKEY_PERFORMANCE_DATA)
{
ok(!ret, "got %u\n", ret);
ok(size > 0 && size < 0xdeadbeef, "got size %u\n", size);
@@ -3859,15 +3859,19 @@ static void test_performance_keys(void)
size = 0;
ret = RegQueryValueExA(keys[i], "hElP", NULL, &type, buffer, &size);
todo_wine_if (keys[i] != HKEY_PERFORMANCE_DATA)
+ {
ok(ret == ERROR_MORE_DATA, "got %u\n", ret);
- todo_wine ok(size > 0, "got size %u\n", size);
+ ok(size > 0, "got size %u\n", size);
+ }
type = 0xdeadbeef;
size = buffer_size;
ret = RegQueryValueExA(keys[i], "hElP", NULL, &type, buffer, &size);
todo_wine_if (keys[i] != HKEY_PERFORMANCE_DATA)
+ {
ok(!ret, "got %u\n", ret);
- todo_wine ok(type == REG_MULTI_SZ, "got type %u\n", type);
+ ok(type == REG_MULTI_SZ, "got type %u\n", type);
+ }
if (type == REG_MULTI_SZ)
test_help_values(buffer, keys[i]);
@@ -3875,14 +3879,16 @@ static void test_performance_keys(void)
size = buffer_size;
ret = RegQueryValueExA(keys[i], "hElPwine", NULL, &type, buffer, &size);
todo_wine_if (keys[i] != HKEY_PERFORMANCE_DATA)
+ {
ok(!ret, "got %u\n", ret);
- todo_wine ok(type == REG_MULTI_SZ, "got type %u\n", type);
+ ok(type == REG_MULTI_SZ, "got type %u\n", type);
+ }
if (type == REG_MULTI_SZ)
test_help_values(buffer, keys[i]);
size = 0;
ret = RegQueryValueExW(keys[i], L"hElP", NULL, NULL, NULL, &size);
- todo_wine
+ todo_wine_if (keys[i] != HKEY_PERFORMANCE_DATA)
{
ok(!ret, "got %u\n", ret);
ok(size > 0, "got size %u\n", size);
@@ -3892,7 +3898,7 @@ static void test_performance_keys(void)
type = 0xdeadbeef;
ret = RegQueryValueExW(keys[i], L"hElP", NULL, &type, bufferW, &size);
- todo_wine
+ todo_wine_if (keys[i] != HKEY_PERFORMANCE_DATA)
{
ok(!ret, "got %u\n", ret);
ok(type == REG_MULTI_SZ, "got type %u\n", type);
diff --git a/dlls/kernelbase/registry.c b/dlls/kernelbase/registry.c
index 31698cb0948..c3d5cdbc6e0 100644
--- a/dlls/kernelbase/registry.c
+++ b/dlls/kernelbase/registry.c
@@ -1225,6 +1225,27 @@ static DWORD query_perf_names( DWORD *type, void *data, DWORD *ret_size, BOOL un
return ERROR_SUCCESS;
}
+/* FIXME: we should read data from system32/perf009h.dat (or perf###h depending
+ * on locale) instead */
+static DWORD query_perf_help( DWORD *type, void *data, DWORD *ret_size, BOOL unicode )
+{
+ static const WCHAR names[] = L"1847\0End Marker\0";
+ DWORD size = *ret_size;
+
+ if (type) *type = REG_MULTI_SZ;
+ *ret_size = sizeof(names);
+ if (!unicode) *ret_size /= sizeof(WCHAR);
+
+ if (!data) return ERROR_SUCCESS;
+ if (size < *ret_size) return ERROR_MORE_DATA;
+
+ if (unicode)
+ memcpy( data, names, sizeof(names) );
+ else
+ RtlUnicodeToMultiByteN( data, size, NULL, names, sizeof(names) );
+ return ERROR_SUCCESS;
+}
+
struct perf_provider
{
HMODULE perflib;
@@ -1370,6 +1391,8 @@ static DWORD query_perf_data( const WCHAR *query, DWORD *type, void *data, DWORD
if (!wcsnicmp( query, L"counter", 7 ))
return query_perf_names( type, data, ret_size, unicode );
+ if (!wcsnicmp( query, L"help", 4 ))
+ return query_perf_help( type, data, ret_size, unicode );
data_size = *ret_size;
*ret_size = 0;
More information about the wine-cvs
mailing list