[PATCH 1/5] advapi32/tests: Expand tests for performance keys.
Zebediah Figura
zfigura at codeweavers.com
Tue Aug 10 23:38:22 CDT 2021
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
dlls/advapi32/tests/registry.c | 516 +++++++++++++++++++++------------
1 file changed, 337 insertions(+), 179 deletions(-)
diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c
index 4daf40b7aad..85fb757792a 100644
--- a/dlls/advapi32/tests/registry.c
+++ b/dlls/advapi32/tests/registry.c
@@ -3600,218 +3600,376 @@ static void test_RegNotifyChangeKeyValue(void)
CloseHandle(event);
}
-#define cmp_li(a, b, c) cmp_li_real(a, b, c, __LINE__)
-static void cmp_li_real(LARGE_INTEGER *l1, LARGE_INTEGER *l2, LONGLONG slack, int line)
+static const char *find_counter_value(const char *text, const char *index)
{
- LONGLONG diff = l2->QuadPart - l1->QuadPart;
- if (diff < 0) diff = -diff;
- ok_(__FILE__, line)(diff <= slack, "values don't match: %s/%s\n",
- wine_dbgstr_longlong(l1->QuadPart), wine_dbgstr_longlong(l2->QuadPart));
+ const char *p = text;
+
+ while (*p)
+ {
+ if (!strcmp(p, index))
+ return p + strlen(p) + 1;
+
+ p += strlen(p) + 1;
+ p += strlen(p) + 1;
+ }
+
+ return NULL;
}
-static void test_RegQueryValueExPerformanceData(void)
+static void test_counter_values(const char *text, HKEY key)
{
- static const char * const names[] = { NULL, "", "Global", "2", "invalid counter name" };
- DWORD cbData, len, i, type;
- BYTE *value;
- DWORD dwret;
- LONG limit = 6;
- PERF_DATA_BLOCK *pdb;
- HKEY hkey;
- BYTE buf[256 + sizeof(PERF_DATA_BLOCK)];
+ const char *p = text;
+ const char *name;
- /* Test with data == NULL */
- dwret = RegQueryValueExA( HKEY_PERFORMANCE_DATA, "Global", NULL, NULL, NULL, &cbData );
- ok( dwret == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %d\n", dwret );
+ ok(!strcmp(p, "1"), "got first index %s\n", debugstr_a(p));
+ p += strlen(p) + 1;
+ ok(!strcmp(p, "1847"), "got first name %s\n", debugstr_a(p));
+ p += strlen(p) + 1;
- dwret = RegQueryValueExW( HKEY_PERFORMANCE_DATA, L"Global", NULL, NULL, NULL, &cbData );
- ok( dwret == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %d\n", dwret );
-
- /* Test ERROR_MORE_DATA, start with small buffer */
- len = 10;
- value = HeapAlloc(GetProcessHeap(), 0, len);
- cbData = len;
- type = 0xdeadbeef;
- dwret = RegQueryValueExA( HKEY_PERFORMANCE_DATA, "Global", NULL, &type, value, &cbData );
- ok( dwret == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %d\n", dwret );
- ok(type == REG_BINARY, "got %u\n", type);
- while( dwret == ERROR_MORE_DATA && limit)
+ while (*p)
{
- len = len * 10;
- value = HeapReAlloc( GetProcessHeap(), 0, value, len );
- cbData = len;
- type = 0xdeadbeef;
- dwret = RegQueryValueExA( HKEY_PERFORMANCE_DATA, "Global", NULL, &type, value, &cbData );
- limit--;
- }
- ok(limit > 0, "too many times ERROR_MORE_DATA returned\n");
+ unsigned int index = atoi(p);
- ok(dwret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", dwret);
- ok(type == REG_BINARY, "got %u\n", type);
+ ok(index > 0, "expected nonzero index\n");
- /* Check returned data */
- if (dwret == ERROR_SUCCESS)
- {
- ok(len >= sizeof(PERF_DATA_BLOCK), "got size %d\n", len);
- if (len >= sizeof(PERF_DATA_BLOCK)) {
- pdb = (PERF_DATA_BLOCK*) value;
- ok(pdb->Signature[0] == 'P', "expected Signature[0] = 'P', got 0x%x\n", pdb->Signature[0]);
- ok(pdb->Signature[1] == 'E', "expected Signature[1] = 'E', got 0x%x\n", pdb->Signature[1]);
- ok(pdb->Signature[2] == 'R', "expected Signature[2] = 'R', got 0x%x\n", pdb->Signature[2]);
- ok(pdb->Signature[3] == 'F', "expected Signature[3] = 'F', got 0x%x\n", pdb->Signature[3]);
- /* TODO: check other field */
- }
+ p += strlen(p) + 1;
+ ok(*p, "name missing for %u\n", index);
+ p += strlen(p) + 1;
}
- HeapFree(GetProcessHeap(), 0, value);
+ name = find_counter_value(text, "1846");
+ ok(name != NULL, "did not find name\n");
+ if (key != HKEY_PERFORMANCE_NLSTEXT)
+ ok(!strcmp(name, "End Marker"), "got name %s\n", debugstr_a(name));
+}
- for (i = 0; i < ARRAY_SIZE(names); i++)
+static void test_help_values(const char *text, HKEY key)
+{
+ const char *p = text;
+ const char *name;
+
+ while (*p)
{
- cbData = 0xdeadbeef;
- dwret = RegQueryValueExA(HKEY_PERFORMANCE_DATA, names[i], NULL, NULL, NULL, &cbData);
- ok(dwret == ERROR_MORE_DATA, "%u/%s: got %u\n", i, names[i], dwret);
- ok(cbData == 0, "got %u\n", cbData);
+ unsigned int index = atoi(p);
- cbData = 0;
- dwret = RegQueryValueExA(HKEY_PERFORMANCE_DATA, names[i], NULL, NULL, NULL, &cbData);
- ok(dwret == ERROR_MORE_DATA, "%u/%s: got %u\n", i, names[i], dwret);
- ok(cbData == 0, "got %u\n", cbData);
+ ok(index > 0, "expected nonzero index\n");
- cbData = 0xdeadbeef;
- dwret = RegQueryValueExA(HKEY_PERFORMANCE_TEXT, names[i], NULL, NULL, NULL, &cbData);
-todo_wine
- ok(dwret == ERROR_MORE_DATA, "%u/%s: got %u\n", i, names[i], dwret);
- ok(cbData == 0, "got %u\n", cbData);
-
- cbData = 0;
- dwret = RegQueryValueExA(HKEY_PERFORMANCE_TEXT, names[i], NULL, NULL, NULL, &cbData);
-todo_wine
- ok(dwret == ERROR_MORE_DATA, "%u/%s: got %u\n", i, names[i], dwret);
- ok(cbData == 0, "got %u\n", cbData);
-
- cbData = 0xdeadbeef;
- dwret = RegQueryValueExA(HKEY_PERFORMANCE_NLSTEXT, names[i], NULL, NULL, NULL, &cbData);
-todo_wine
- ok(dwret == ERROR_MORE_DATA, "%u/%s: got %u\n", i, names[i], dwret);
- ok(cbData == 0, "got %u\n", cbData);
-
- cbData = 0;
- dwret = RegQueryValueExA(HKEY_PERFORMANCE_NLSTEXT, names[i], NULL, NULL, NULL, &cbData);
-todo_wine
- ok(dwret == ERROR_MORE_DATA, "%u/%s: got %u\n", i, names[i], dwret);
- ok(cbData == 0, "got %u\n", cbData);
+ p += strlen(p) + 1;
+ p += strlen(p) + 1;
}
- memset(buf, 0x77, sizeof(buf));
- type = 0xdeadbeef;
- cbData = sizeof(buf);
- dwret = RegQueryValueExA(HKEY_PERFORMANCE_DATA, "invalid counter name", NULL, &type, buf, &cbData);
- ok(dwret == ERROR_SUCCESS, "got %u\n", dwret);
- ok(type == REG_BINARY, "got %u\n", type);
- if (dwret == ERROR_SUCCESS)
+ name = find_counter_value(text, "1847");
+ ok(name != NULL, "did not find name\n");
+ if (key != HKEY_PERFORMANCE_NLSTEXT)
+ ok(!strcmp(name, "End Marker"), "got name %s\n", debugstr_a(name));
+}
+
+static void test_performance_keys(void)
+{
+ static const HKEY keys[] = {HKEY_PERFORMANCE_DATA, HKEY_PERFORMANCE_TEXT, HKEY_PERFORMANCE_NLSTEXT};
+ static const char *const names[] = {NULL, "", "Global", "2", "invalid counter name", "System"};
+ DWORD size, type, sysname_len, expect_size, key_count, value_count;
+ LARGE_INTEGER perftime1, perftime2, systime1, systime2, freq;
+ WCHAR sysname[MAX_COMPUTERNAME_LENGTH + 1];
+ unsigned int buffer_size = 1024 * 1024;
+ void *buffer, *bufferW;
+ PERF_DATA_BLOCK *data;
+ union
{
- SYSTEMTIME st;
- WCHAR sysname[MAX_COMPUTERNAME_LENGTH + 1];
- DWORD sysname_len;
- LARGE_INTEGER counter, freq, ftime;
+ FILETIME f;
+ LONGLONG l;
+ } file_time;
+ unsigned int i, j;
+ HKEY key;
+ LONG ret;
- GetSystemTime(&st);
- GetSystemTimeAsFileTime((FILETIME *)&ftime);
- QueryPerformanceCounter(&counter);
- QueryPerformanceFrequency(&freq);
+ buffer = malloc(buffer_size);
- sysname_len = MAX_COMPUTERNAME_LENGTH + 1;
- GetComputerNameW(sysname, &sysname_len);
+ sysname_len = ARRAY_SIZE(sysname);
+ GetComputerNameW(sysname, &sysname_len);
- pdb = (PERF_DATA_BLOCK *)buf;
- ok(pdb->Signature[0] == 'P', "got '%c'\n", pdb->Signature[0]);
- ok(pdb->Signature[1] == 'E', "got '%c'\n", pdb->Signature[1]);
- ok(pdb->Signature[2] == 'R', "got '%c'\n", pdb->Signature[2]);
- ok(pdb->Signature[3] == 'F', "got '%c'\n", pdb->Signature[3]);
+ for (i = 0; i < ARRAY_SIZE(keys); ++i)
+ {
+ winetest_push_context("key %p", keys[i]);
- ok(pdb->LittleEndian == 1, "got %u\n", pdb->LittleEndian);
- ok(pdb->Version == 1, "got %u\n", pdb->Version);
- ok(pdb->Revision == 1, "got %u\n", pdb->Revision);
- len = (sizeof(*pdb) + pdb->SystemNameLength + 7) & ~7;
- ok(pdb->TotalByteLength == len, "got %u vs %u\n", pdb->TotalByteLength, len);
- ok(pdb->HeaderLength == pdb->TotalByteLength, "got %u\n", pdb->HeaderLength);
- ok(pdb->NumObjectTypes == 0, "got %u\n", pdb->NumObjectTypes);
-todo_wine
- ok(pdb->DefaultObject != 0, "got %u\n", pdb->DefaultObject);
- ok(pdb->SystemTime.wYear == st.wYear, "got %u\n", pdb->SystemTime.wYear);
- ok(pdb->SystemTime.wMonth == st.wMonth, "got %u\n", pdb->SystemTime.wMonth);
- ok(pdb->SystemTime.wDayOfWeek == st.wDayOfWeek, "got %u\n", pdb->SystemTime.wDayOfWeek);
- ok(pdb->SystemTime.wDay == st.wDay, "got %u\n", pdb->SystemTime.wDay);
- if (U(pdb->PerfTime).LowPart != 0x77777777) /* TestBot is broken */
- cmp_li(&pdb->PerfTime, &counter, freq.QuadPart);
- if (U(pdb->PerfFreq).LowPart != 0x77777777) /* TestBot is broken */
- cmp_li(&pdb->PerfFreq, &freq, 0);
- cmp_li(&pdb->PerfTime100nSec, &ftime, 200000); /* TestBot needs huge slack value */
- ok(pdb->SystemNameLength == (sysname_len + 1) * sizeof(WCHAR), "expected %u, got %u\n",
- (sysname_len + 1) * 2 /*sizeof(WCHAR)*/, pdb->SystemNameLength);
- ok(pdb->SystemNameOffset == sizeof(*pdb), "got %u\n", pdb->SystemNameOffset);
- ok(!lstrcmpW(sysname, (LPCWSTR)(pdb + 1)), "%s != %s\n",
- wine_dbgstr_w(sysname), wine_dbgstr_w((LPCWSTR)(pdb + 1)));
-
- len = pdb->TotalByteLength - (sizeof(*pdb) + pdb->SystemNameLength);
- if (len)
+ for (j = 0; j < ARRAY_SIZE(names); ++j)
{
- BYTE remainder[8], *p;
+ winetest_push_context("value %s", debugstr_a(names[j]));
- memset(remainder, 0x77, sizeof(remainder));
- p = buf + sizeof(*pdb) + pdb->SystemNameLength;
- ok(!memcmp(p, remainder, len), "remainder: %02x,%02x...\n", p[0], p[1]);
+ QueryPerformanceFrequency(&freq);
+
+ size = 0;
+ ret = RegQueryValueExA(keys[i], names[j], NULL, NULL, NULL, &size);
+ todo_wine_if (keys[i] != HKEY_PERFORMANCE_DATA)
+ ok(ret == ERROR_MORE_DATA, "got %u\n", ret);
+ ok(!size, "got size %u\n", size);
+
+ size = 10;
+ ret = RegQueryValueExA(keys[i], names[j], NULL, NULL, buffer, &size);
+ todo_wine_if (keys[i] != HKEY_PERFORMANCE_DATA)
+ ok(ret == ERROR_MORE_DATA, "got %u\n", ret);
+ todo_wine_if (keys[i] == HKEY_PERFORMANCE_DATA)
+ ok(size == 10, "got size %u\n", size);
+
+ size = buffer_size;
+ ret = RegQueryValueExA(keys[i], names[j], NULL, NULL, NULL, &size);
+ todo_wine_if (keys[i] != HKEY_PERFORMANCE_DATA)
+ ok(ret == ERROR_MORE_DATA, "got %u\n", ret);
+
+ QueryPerformanceCounter(&perftime1);
+ NtQuerySystemTime(&systime1);
+
+ size = buffer_size;
+ type = 0xdeadbeef;
+ ret = RegQueryValueExA(keys[i], names[j], NULL, &type, buffer, &size);
+ todo_wine_if (keys[i] != HKEY_PERFORMANCE_DATA)
+ {
+ ok(!ret, "got %u\n", ret);
+ ok(type == REG_BINARY, "got type %u\n", type);
+ ok(size >= sizeof(PERF_DATA_BLOCK) && size < buffer_size, "got size %u\n", size);
+ }
+
+ if (ret)
+ {
+ winetest_pop_context();
+ continue;
+ }
+
+ QueryPerformanceCounter(&perftime2);
+ NtQuerySystemTime(&systime2);
+
+ data = buffer;
+ ok(!wcsncmp(data->Signature, L"PERF", 4), "got signature %s\n",
+ debugstr_wn(data->Signature, 4));
+ ok(data->LittleEndian == 1, "got endianness %u\n", data->LittleEndian);
+ ok(data->Version == 1, "got version %u\n", data->Version);
+ ok(data->Revision == 1, "got version %u\n", data->Revision);
+ ok(data->TotalByteLength == size, "expected size %u, got %u\n",
+ size, data->TotalByteLength);
+
+ expect_size = sizeof(PERF_DATA_BLOCK) + data->SystemNameLength;
+ expect_size = (expect_size + 7) & ~7;
+
+ ok(data->HeaderLength == expect_size, "expected header size %u, got %u\n",
+ expect_size, data->HeaderLength);
+ /* todo: test objects... */
+ todo_wine ok(data->DefaultObject == 238, "got default object %u\n", data->DefaultObject);
+
+ ok(data->PerfTime.QuadPart >= perftime1.QuadPart
+ && data->PerfTime.QuadPart <= perftime2.QuadPart,
+ "got times %I64u, %I64u, %I64u\n",
+ perftime1.QuadPart, data->PerfTime.QuadPart, perftime2.QuadPart);
+ ok(data->PerfFreq.QuadPart == freq.QuadPart, "expected frequency %I64u, got %I64u\n",
+ freq.QuadPart, data->PerfFreq.QuadPart);
+ ok(data->PerfTime100nSec.QuadPart >= systime1.QuadPart
+ && data->PerfTime100nSec.QuadPart <= systime2.QuadPart,
+ "got times %I64u, %I64u, %I64u\n",
+ systime1.QuadPart, data->PerfTime100nSec.QuadPart, systime2.QuadPart);
+ SystemTimeToFileTime(&data->SystemTime, &file_time.f);
+ ok(file_time.l >= systime1.QuadPart && file_time.l <= systime2.QuadPart,
+ "got times %I64u, %I64u, %I64u\n", perftime1.QuadPart, file_time.l, perftime2.QuadPart);
+
+ ok(data->SystemNameLength == (sysname_len + 1) * sizeof(WCHAR),
+ "expected name len %u, got %u\n",
+ (sysname_len + 1) * sizeof(WCHAR), data->SystemNameLength);
+ ok(data->SystemNameOffset == sizeof(PERF_DATA_BLOCK),
+ "got name offset %u\n", data->SystemNameOffset);
+ ok(!wcscmp(sysname, (const WCHAR *)(data + 1)), "expected name %s, got %s\n",
+ debugstr_w(sysname), debugstr_w((const WCHAR *)(data + 1)));
+
+ winetest_pop_context();
}
+
+ /* test the "Counter" value */
+
+ size = 0xdeadbeef;
+ ret = RegQueryValueExA(keys[i], "cOuNtEr", NULL, NULL, NULL, &size);
+ todo_wine
+ {
+ ok(!ret, "got %u\n", ret);
+ ok(size > 0 && size < 0xdeadbeef, "got size %u\n", size);
+ }
+
+ type = 0xdeadbeef;
+ size = 0;
+ ret = RegQueryValueExA(keys[i], "cOuNtEr", 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);
+
+ type = 0xdeadbeef;
+ size = buffer_size;
+ ret = RegQueryValueExA(keys[i], "cOuNtEr", 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);
+ if (type == REG_MULTI_SZ)
+ test_counter_values(buffer, keys[i]);
+
+ type = 0xdeadbeef;
+ size = buffer_size;
+ ret = RegQueryValueExA(keys[i], "cOuNtErwine", 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);
+ if (type == REG_MULTI_SZ)
+ test_counter_values(buffer, keys[i]);
+
+ size = 0;
+ ret = RegQueryValueExW(keys[i], L"cOuNtEr", NULL, NULL, NULL, &size);
+ todo_wine
+ {
+ ok(!ret, "got %u\n", ret);
+ ok(size > 0, "got size %u\n", size);
+ }
+
+ bufferW = malloc(size);
+
+ type = 0xdeadbeef;
+ ret = RegQueryValueExW(keys[i], L"cOuNtEr", NULL, &type, bufferW, &size);
+ todo_wine
+ {
+ ok(!ret, "got %u\n", ret);
+ ok(type == REG_MULTI_SZ, "got type %u\n", type);
+ }
+ if (type == REG_MULTI_SZ)
+ {
+ WideCharToMultiByte(CP_ACP, 0, bufferW, size / sizeof(WCHAR), buffer, buffer_size, NULL, NULL);
+ test_counter_values(buffer, keys[i]);
+ }
+
+ /* test the "Help" value */
+
+ size = 0xdeadbeef;
+ ret = RegQueryValueExA(keys[i], "hElP", NULL, NULL, NULL, &size);
+ todo_wine
+ {
+ ok(!ret, "got %u\n", ret);
+ ok(size > 0 && size < 0xdeadbeef, "got size %u\n", size);
+ }
+
+ type = 0xdeadbeef;
+ 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);
+
+ 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);
+ if (type == REG_MULTI_SZ)
+ test_help_values(buffer, keys[i]);
+
+ type = 0xdeadbeef;
+ 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);
+ 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
+ {
+ ok(!ret, "got %u\n", ret);
+ ok(size > 0, "got size %u\n", size);
+ }
+
+ bufferW = malloc(size);
+
+ type = 0xdeadbeef;
+ ret = RegQueryValueExW(keys[i], L"hElP", NULL, &type, bufferW, &size);
+ todo_wine
+ {
+ ok(!ret, "got %u\n", ret);
+ ok(type == REG_MULTI_SZ, "got type %u\n", type);
+ }
+ if (type == REG_MULTI_SZ)
+ {
+ WideCharToMultiByte(CP_ACP, 0, bufferW, size / sizeof(WCHAR), buffer, buffer_size, NULL, NULL);
+ test_help_values(buffer, keys[i]);
+ }
+
+ /* test other registry APIs */
+
+ ret = RegOpenKeyA(keys[i], NULL, &key);
+ todo_wine ok(ret == ERROR_INVALID_HANDLE, "got %u\n", ret);
+
+ ret = RegOpenKeyA(keys[i], "Global", &key);
+ todo_wine_if (keys[i] == HKEY_PERFORMANCE_DATA)
+ ok(ret == ERROR_INVALID_HANDLE, "got %u\n", ret);
+
+ ret = RegOpenKeyExA(keys[i], "Global", 0, KEY_READ, &key);
+ todo_wine_if (keys[i] == HKEY_PERFORMANCE_DATA)
+ ok(ret == ERROR_INVALID_HANDLE, "got %u\n", ret);
+
+ size = 0;
+ ret = RegQueryValueA(keys[i], "Global", NULL, (LONG *)&size);
+ todo_wine_if (keys[i] == HKEY_PERFORMANCE_DATA)
+ ok(ret == ERROR_INVALID_HANDLE, "got %u\n", ret);
+
+ ret = RegSetValueA(keys[i], "Global", REG_SZ, "dummy", 5);
+ todo_wine_if (keys[i] == HKEY_PERFORMANCE_DATA)
+ ok(ret == ERROR_INVALID_HANDLE, "got %u\n", ret);
+
+ ret = RegQueryInfoKeyA(keys[i], NULL, NULL, NULL, &key_count, NULL,
+ NULL, &value_count, NULL, NULL, NULL, NULL);
+ todo_wine_if (keys[i] != HKEY_PERFORMANCE_DATA)
+ ok(!ret, "got %u\n", ret);
+ todo_wine ok(!key_count, "got %u subkeys\n", key_count);
+ todo_wine ok(value_count == 2, "got %u values\n", value_count);
+
+ size = buffer_size;
+ ret = RegEnumValueA(keys[i], 0, buffer, &size, NULL, NULL, NULL, NULL);
+ todo_wine ok(ret == ERROR_MORE_DATA, "got %u\n", ret);
+ ok(size == buffer_size, "got size %u\n", size);
+
+ ret = RegCloseKey(keys[i]);
+ ok(!ret, "got %u\n", ret);
+
+ ret = RegCloseKey(keys[i]);
+ ok(!ret, "got %u\n", ret);
+
+ winetest_pop_context();
}
- dwret = RegOpenKeyA(HKEY_PERFORMANCE_DATA, NULL, &hkey);
-todo_wine
- ok(dwret == ERROR_INVALID_HANDLE, "got %u\n", dwret);
+ ret = RegSetValueExA(HKEY_PERFORMANCE_DATA, "Global", 0, REG_SZ, (const BYTE *)"dummy", 5);
+ todo_wine ok(ret == ERROR_INVALID_HANDLE, "got %u\n", ret);
- dwret = RegOpenKeyA(HKEY_PERFORMANCE_DATA, "Global", &hkey);
-todo_wine
- ok(dwret == ERROR_INVALID_HANDLE, "got %u\n", dwret);
+ ret = RegSetValueExA(HKEY_PERFORMANCE_TEXT, "Global", 0, REG_SZ, (const BYTE *)"dummy", 5);
+ todo_wine ok(ret == ERROR_BADKEY, "got %u\n", ret);
- dwret = RegOpenKeyExA(HKEY_PERFORMANCE_DATA, "Global", 0, KEY_READ, &hkey);
-todo_wine
- ok(dwret == ERROR_INVALID_HANDLE, "got %u\n", dwret);
-
- dwret = RegQueryValueA(HKEY_PERFORMANCE_DATA, "Global", NULL, (LONG *)&cbData);
-todo_wine
- ok(dwret == ERROR_INVALID_HANDLE, "got %u\n", dwret);
-
- dwret = RegSetValueA(HKEY_PERFORMANCE_DATA, "Global", REG_SZ, "dummy", 4);
-todo_wine
- ok(dwret == ERROR_INVALID_HANDLE, "got %u\n", dwret);
-
- dwret = RegSetValueExA(HKEY_PERFORMANCE_DATA, "Global", 0, REG_SZ, (const BYTE *)"dummy", 40);
-todo_wine
- ok(dwret == ERROR_INVALID_HANDLE, "got %u\n", dwret);
-
- cbData = sizeof(buf);
- dwret = RegEnumKeyA(HKEY_PERFORMANCE_DATA, 0, (LPSTR)buf, cbData);
-todo_wine
- ok(dwret == ERROR_INVALID_HANDLE, "got %u\n", dwret);
-
- cbData = sizeof(buf);
- dwret = RegEnumValueA(HKEY_PERFORMANCE_DATA, 0, (LPSTR)buf, &cbData, NULL, NULL, NULL, NULL);
-todo_wine
- ok(dwret == ERROR_MORE_DATA, "got %u\n", dwret);
-todo_wine
- ok(cbData == sizeof(buf), "got %u\n", cbData);
-
- dwret = RegEnumValueA(HKEY_PERFORMANCE_DATA, 0, NULL, &cbData, NULL, NULL, NULL, NULL);
- ok(dwret == ERROR_INVALID_PARAMETER, "got %u\n", dwret);
+ ret = RegSetValueExA(HKEY_PERFORMANCE_NLSTEXT, "Global", 0, REG_SZ, (const BYTE *)"dummy", 5);
+ todo_wine ok(ret == ERROR_BADKEY, "got %u\n", ret);
if (pRegSetKeyValueW)
{
- dwret = pRegSetKeyValueW(HKEY_PERFORMANCE_DATA, NULL, L"Global", REG_SZ, L"dummy", 10);
-todo_wine
- ok(dwret == ERROR_INVALID_HANDLE, "got %u\n", dwret);
+ ret = pRegSetKeyValueW(HKEY_PERFORMANCE_DATA, NULL, L"Global", REG_SZ, L"dummy", 10);
+ todo_wine ok(ret == ERROR_INVALID_HANDLE, "got %u\n", ret);
+
+ ret = pRegSetKeyValueW(HKEY_PERFORMANCE_TEXT, NULL, L"Global", REG_SZ, L"dummy", 10);
+ todo_wine ok(ret == ERROR_BADKEY, "got %u\n", ret);
+
+ ret = pRegSetKeyValueW(HKEY_PERFORMANCE_NLSTEXT, NULL, L"Global", REG_SZ, L"dummy", 10);
+ todo_wine ok(ret == ERROR_BADKEY, "got %u\n", ret);
}
- dwret = RegCloseKey(HKEY_PERFORMANCE_DATA);
- ok(dwret == ERROR_SUCCESS, "got %u\n", dwret);
+ ret = RegEnumKeyA(HKEY_PERFORMANCE_DATA, 0, buffer, buffer_size);
+ todo_wine ok(ret == ERROR_INVALID_HANDLE, "got %u\n", ret);
+
+ ret = RegEnumKeyA(HKEY_PERFORMANCE_TEXT, 0, buffer, buffer_size);
+ todo_wine ok(ret == ERROR_NO_MORE_ITEMS, "got %u\n", ret);
+
+ ret = RegEnumKeyA(HKEY_PERFORMANCE_NLSTEXT, 0, buffer, buffer_size);
+ todo_wine ok(ret == ERROR_NO_MORE_ITEMS, "got %u\n", ret);
+
+ free(buffer);
}
static void test_perflib_key(void)
@@ -4348,7 +4506,7 @@ START_TEST(registry)
test_delete_key_value();
test_RegOpenCurrentUser();
test_RegNotifyChangeKeyValue();
- test_RegQueryValueExPerformanceData();
+ test_performance_keys();
test_RegLoadMUIString();
test_EnumDynamicTimeZoneInformation();
test_perflib_key();
--
2.30.2
More information about the wine-devel
mailing list