From: Paul Gofman pgofman@codeweavers.com
--- dlls/advapi32/advapi.c | 10 ++++++++++ dlls/advapi32/advapi32.spec | 2 +- dlls/advapi32/tests/perf.c | 38 +++++++++++++++++++++++++++++++++++++ include/perflib.h | 1 + 4 files changed, 50 insertions(+), 1 deletion(-)
diff --git a/dlls/advapi32/advapi.c b/dlls/advapi32/advapi.c index a1f0385357e..c3d2e2d00e7 100644 --- a/dlls/advapi32/advapi.c +++ b/dlls/advapi32/advapi.c @@ -321,3 +321,13 @@ ULONG WINAPI PerfCloseQueryHandle( HANDLE query )
return ERROR_SUCCESS; } + +ULONG WINAPI PerfOpenQueryHandle( const WCHAR *machine, HANDLE *query ) +{ + FIXME( "machine %s, query %p.\n", debugstr_w(machine), query ); + + if (!query) return ERROR_INVALID_PARAMETER; + *query = (HANDLE)0xdeadbeef; + + return ERROR_SUCCESS; +} diff --git a/dlls/advapi32/advapi32.spec b/dlls/advapi32/advapi32.spec index 21a76675bc5..d80b4d938f6 100644 --- a/dlls/advapi32/advapi32.spec +++ b/dlls/advapi32/advapi32.spec @@ -564,7 +564,7 @@ # @ stub PerfEnumerateCounterSetInstances # @ stub PerfIncrementULongCounterValue # @ stub PerfIncrementULongLongCounterValue -# @ stub PerfOpenQueryHandle +@ stdcall PerfOpenQueryHandle(wstr ptr) # @ stub PerfQueryCounterData # @ stub PerfQueryCounterInfo # @ stub PerfQueryCounterSetRegistrationInfo diff --git a/dlls/advapi32/tests/perf.c b/dlls/advapi32/tests/perf.c index fc07a09d327..2cd2a208677 100644 --- a/dlls/advapi32/tests/perf.c +++ b/dlls/advapi32/tests/perf.c @@ -28,6 +28,21 @@
#include "wine/test.h"
+#define DEFINE_FUNCTION(name) static typeof(name) *p##name; +DEFINE_FUNCTION(PerfCloseQueryHandle); +DEFINE_FUNCTION(PerfOpenQueryHandle); +#undef DEFINE_FUNCTION + +static void init_functions(void) +{ + HANDLE hadvapi = GetModuleHandleA("advapi32.dll"); + +#define GET_FUNCTION(name) p##name = (void *)GetProcAddress(hadvapi, #name) + GET_FUNCTION(PerfCloseQueryHandle); + GET_FUNCTION(PerfOpenQueryHandle); +#undef GET_FUNCTION +} + static ULONG WINAPI test_provider_callback(ULONG code, void *buffer, ULONG size) { ok(0, "Provider callback called.\n"); @@ -188,7 +203,30 @@ void test_provider_init(void) ok(!ret, "Got unexpected ret %lu.\n", ret); }
+static void test_perf_counters(void) +{ + HANDLE query; + ULONG ret; + + if (!pPerfOpenQueryHandle) + { + win_skip("PerfOpenQueryHandle not found.\n"); + return; + } + + ret = pPerfOpenQueryHandle(NULL, NULL); + ok(ret == ERROR_INVALID_PARAMETER, "got ret %lu.\n", ret); + ret = pPerfOpenQueryHandle(NULL, &query); + ok(!ret, "got ret %lu.\n", ret); + + ret = pPerfCloseQueryHandle(query); + ok(!ret, "got ret %lu.\n", ret); +} + START_TEST(perf) { + init_functions(); + test_provider_init(); + test_perf_counters(); } diff --git a/include/perflib.h b/include/perflib.h index 27019bd842c..47b6bdefc84 100644 --- a/include/perflib.h +++ b/include/perflib.h @@ -90,6 +90,7 @@ ULONG WINAPI PerfStartProviderEx(GUID *, PERF_PROVIDER_CONTEXT *, HANDLE *); ULONG WINAPI PerfStopProvider(HANDLE);
ULONG WINAPI PerfCloseQueryHandle(HANDLE); +ULONG WINAPI PerfOpenQueryHandle(const WCHAR *, HANDLE *);
#ifdef __cplusplus } /* extern "C" */