[PATCH] pdh/tests: Add test for PdhOpenLog

Nipun Garg nipung271 at gmail.com
Sun May 2 08:52:38 CDT 2021


Signed-off-by: Nipun Garg <nipung271 at gmail.com>
---
 dlls/pdh/pdh.spec    |  6 ++---
 dlls/pdh/pdh_main.c  | 35 ++++++++++++++++++++++++
 dlls/pdh/tests/pdh.c | 63 ++++++++++++++++++++++++++++++++++++++++++++
 include/pdh.h        | 23 ++++++++++++++++
 4 files changed, 124 insertions(+), 3 deletions(-)

diff --git a/dlls/pdh/pdh.spec b/dlls/pdh/pdh.spec
index 5f61a8a42ca..0448cdde800 100644
--- a/dlls/pdh/pdh.spec
+++ b/dlls/pdh/pdh.spec
@@ -12,7 +12,7 @@
 @ stub PdhBrowseCountersHW
 @ stub PdhBrowseCountersW
 @ stdcall PdhCalculateCounterFromRawValue(ptr long ptr ptr ptr)
-@ stub PdhCloseLog
+@ stdcall PdhCloseLog(ptr long)
 @ stdcall PdhCloseQuery(ptr)
 @ stdcall PdhCollectQueryData(ptr)
 @ stdcall PdhCollectQueryDataWithTime(ptr ptr)
@@ -81,8 +81,8 @@
 @ stdcall PdhLookupPerfNameByIndexW(wstr long ptr ptr)
 @ stdcall PdhMakeCounterPathA(ptr ptr ptr long)
 @ stdcall PdhMakeCounterPathW(ptr ptr ptr long)
-@ stub PdhOpenLogA
-@ stub PdhOpenLogW
+@ stdcall PdhOpenLogA(str long ptr long long str ptr)
+@ stdcall PdhOpenLogW(wstr long ptr long long wstr ptr)
 @ stdcall PdhOpenQuery(wstr long ptr) PdhOpenQueryW
 @ stdcall PdhOpenQueryA(str long ptr)
 @ stub PdhOpenQueryH
diff --git a/dlls/pdh/pdh_main.c b/dlls/pdh/pdh_main.c
index 73d4fef2a14..2d3ff71fbf4 100644
--- a/dlls/pdh/pdh_main.c
+++ b/dlls/pdh/pdh_main.c
@@ -358,6 +358,15 @@ PDH_STATUS WINAPI PdhCalculateCounterFromRawValue( PDH_HCOUNTER handle, DWORD fo
     return ret;
 }
 
+/***********************************************************************
+ *              PdhCloseLog     (PDH.@)
+ */
+PDH_STATUS WINAPI PdhCloseLog( PDH_HLOG log, DWORD flags )
+{
+	FIXME("(%p, %d): stub\n", log, flags);
+	SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+	return PDH_NOT_IMPLEMENTED;
+}
 
 /***********************************************************************
  *              PdhCloseQuery   (PDH.@)
@@ -963,6 +972,32 @@ PDH_STATUS WINAPI PdhOpenQueryW( LPCWSTR source, DWORD_PTR userdata, PDH_HQUERY
     return PDH_MEMORY_ALLOCATION_FAILURE;
 }
 
+/**********************************************************************
+ *              PdhOpenLogA   (PDH.@)
+ */
+PDH_STATUS WINAPI PdhOpenLogA( LPCSTR log_name, DWORD access_flags,
+                LPDWORD log_type, PDH_HQUERY query, DWORD max_size,
+                LPCSTR user_caption, PDH_HLOG *log )
+{
+    FIXME("(%s, %d, %p, %p, %d, %s, %p): stub\n", log_name, access_flags,
+		    log_type, query, max_size, user_caption, log);
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return PDH_NOT_IMPLEMENTED;
+}
+
+/**********************************************************************
+ *              PdhOpenLogW   (PDH.@)
+ */
+PDH_STATUS WINAPI PdhOpenLogW( LPCWSTR log_name, DWORD access_flags,
+                LPDWORD log_type, PDH_HQUERY query, DWORD max_size,
+                LPCWSTR user_caption, PDH_HLOG *log )
+{
+    FIXME("(%s, %d, %p, %p, %d, %s, %p): stub\n", log_name, access_flags,
+		    log_type, query, max_size, user_caption, log);
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return PDH_NOT_IMPLEMENTED;
+}
+
 /***********************************************************************
  *              PdhRemoveCounter   (PDH.@)
  */
diff --git a/dlls/pdh/tests/pdh.c b/dlls/pdh/tests/pdh.c
index 71603f8c6ba..4e5b13d2c67 100644
--- a/dlls/pdh/tests/pdh.c
+++ b/dlls/pdh/tests/pdh.c
@@ -126,6 +126,66 @@ static void test_PdhOpenQueryW( void )
     ok(ret == PDH_INVALID_HANDLE, "PdhCloseQuery failed 0x%08x\n", ret);
 }
 
+static void test_PdhOpenLogA( void )
+{
+    PDH_STATUS ret;
+    PDH_HLOG log;
+    PDH_HQUERY query;
+    PDH_HCOUNTER counter;
+    DWORD log_type = PDH_LOG_TYPE_CSV;
+
+    PdhOpenQueryA( NULL, 0, &query );
+    PdhAddCounterA( query, "\\System\\System Up Time", 0, &counter );
+
+    ret = PdhOpenLogA( NULL, PDH_LOG_WRITE_ACCESS, &log_type, NULL, 0, NULL, NULL );
+    todo_wine ok(ret == PDH_INVALID_ARGUMENT, "PdhOpenLogA failed 0x%08x\n", ret);
+
+    ret = PdhOpenLogA( "test_log", PDH_LOG_WRITE_ACCESS | PDH_LOG_CREATE_ALWAYS, &log_type, query, 0, NULL, &log );
+    todo_wine ok(ret == ERROR_SUCCESS, "PdhOpenLogA failed 0x%08x\n", ret);
+
+    ret = PdhCloseLog( NULL, 0 );
+    todo_wine ok(ret == PDH_CSTATUS_VALID_DATA, "PdhCloseLog failed 0x%08x\n", ret);
+    
+    ret = PdhCloseLog( &log, 0 );
+    todo_wine ok(ret == PDH_INVALID_HANDLE, "PdhCloseLog failed 0x%08x\n", ret);
+
+    ret = PdhCloseLog( log, 0 );
+    todo_wine ok(ret == ERROR_SUCCESS, "PdhCloseLog failed 0x%08x\n", ret);
+
+    ret = PdhCloseLog( log, 0 );
+    todo_wine ok(ret == PDH_INVALID_HANDLE, "PdhCloseLog failed 0x%08x\n", ret);
+}
+
+static void test_PdhOpenLogW( void )
+{
+    PDH_STATUS ret;
+    PDH_HLOG log;
+    PDH_HQUERY query;
+    PDH_HCOUNTER counter;
+    DWORD log_type = PDH_LOG_TYPE_CSV;
+
+    PdhOpenQueryW( NULL, 0, &query );
+    PdhAddCounterW( query, L"\\System\\System Up Time", 0, &counter );
+
+    ret = PdhOpenLogW( NULL, PDH_LOG_WRITE_ACCESS, &log_type, NULL, 0, NULL, NULL );
+    todo_wine ok(ret == PDH_INVALID_ARGUMENT, "PdhOpenLogW failed 0x%08x\n", ret);
+
+    ret = PdhOpenLogW( L"test_log", PDH_LOG_WRITE_ACCESS | PDH_LOG_CREATE_ALWAYS, &log_type, query, 0, NULL, &log );
+    todo_wine ok(ret == ERROR_SUCCESS, "PdhOpenLogW failed 0x%08x\n", ret);
+
+    ret = PdhCloseLog( NULL, 0 );
+    todo_wine ok(ret == PDH_CSTATUS_VALID_DATA, "PdhCloseLog failed 0x%08x\n", ret);
+    
+    ret = PdhCloseLog( &log, 0 );
+    todo_wine ok(ret == PDH_INVALID_HANDLE, "PdhCloseLog failed 0x%08x\n", ret);
+
+    ret = PdhCloseLog( log, 0 );
+    todo_wine ok(ret == ERROR_SUCCESS, "PdhCloseLog failed 0x%08x\n", ret);
+
+    ret = PdhCloseLog( log, 0 );
+    todo_wine ok(ret == PDH_INVALID_HANDLE, "PdhCloseLog failed 0x%08x\n", ret);
+}
+
 static void test_PdhAddCounterA( void )
 {
     PDH_STATUS ret;
@@ -982,6 +1042,9 @@ START_TEST(pdh)
     test_PdhOpenQueryA();
     test_PdhOpenQueryW();
 
+    test_PdhOpenLogA();
+    test_PdhOpenLogW();
+
     test_PdhAddCounterA();
     test_PdhAddCounterW();
 
diff --git a/include/pdh.h b/include/pdh.h
index 3d688bd8ded..caecd7ce528 100644
--- a/include/pdh.h
+++ b/include/pdh.h
@@ -57,6 +57,25 @@ typedef PDH_HLOG     HLOG;
 #define DATA_SOURCE_LOGFILE     0x00000002
 #define DATA_SOURCE_WBEM        0x00000004
 
+#define PDH_LOG_READ_ACCESS      0x00010000
+#define PDH_LOG_WRITE_ACCESS     0x00020000
+#define PDH_LOG_UPDATE_ACCESS    0x00040000
+
+#define PDH_LOG_CREATE_NEW         0x00000001
+#define PDH_LOG_CREATE_ALWAYS      0x00000002
+#define PDH_LOG_OPEN_ALWAYS        0x00000003
+#define PDH_LOG_OPEN_EXISTING      0x00000004
+#define PDH_LOG_OPT_USER_STRING    0x01000000
+#define PDH_LOG_OPT_CIRCULAR       0x02000000
+
+#define PDH_LOG_TYPE_UNDEFINED    0x00000000
+#define PDH_LOG_TYPE_CSV          0x00000001
+#define PDH_LOG_TYPE_TSV          0x00000002
+#define PDH_LOG_TYPE_SQL          0x00000007
+#define PDH_LOG_TYPE_BINARY       0x00000008
+
+#define PDH_FLAG_CLOSE_QUERY    0x00000001
+
 #ifdef WINE_NO_UNICODE_MACROS
 # define DECL_PDH_TYPE_AW(name)  /* nothing */
 #else  /* WINE_NO_UNICODE_MACROS */
@@ -203,6 +222,7 @@ PDH_STATUS WINAPI PdhAddEnglishCounterW(PDH_HQUERY, LPCWSTR, DWORD_PTR, PDH_HCOU
 PDH_STATUS WINAPI PdhBindInputDataSourceA(PDH_HLOG *, const char *);
 PDH_STATUS WINAPI PdhBindInputDataSourceW(PDH_HLOG *, const WCHAR *);
 #define    PdhBindInputDataSource WINELIB_NAME_AW(PdhBindInputDataSource)
+PDH_STATUS WINAPI PdhCloseLog(PDH_HLOG, DWORD);
 PDH_STATUS WINAPI PdhCloseQuery(PDH_HQUERY);
 PDH_STATUS WINAPI PdhCollectQueryData(PDH_HQUERY);
 PDH_STATUS WINAPI PdhCollectQueryDataEx(PDH_HQUERY, DWORD, HANDLE);
@@ -229,6 +249,9 @@ PDH_STATUS WINAPI PdhLookupPerfNameByIndexW(LPCWSTR, DWORD, LPWSTR, LPDWORD);
 PDH_STATUS WINAPI PdhMakeCounterPathA(PDH_COUNTER_PATH_ELEMENTS_A *, LPSTR, LPDWORD, DWORD);
 PDH_STATUS WINAPI PdhMakeCounterPathW(PDH_COUNTER_PATH_ELEMENTS_W *, LPWSTR, LPDWORD, DWORD);
 #define    PdhMakeCounterPath WINELIB_NAME_AW(PdhMakeCounterPath)
+PDH_STATUS WINAPI PdhOpenLogA(LPCSTR, DWORD, LPDWORD, PDH_HQUERY, DWORD, LPCSTR, PDH_HLOG *);
+PDH_STATUS WINAPI PdhOpenLogW(LPCWSTR, DWORD, LPDWORD, PDH_HQUERY, DWORD, LPCWSTR, PDH_HLOG *);
+#define    PdhOpenLog WINELIB_NAME_AW(PdhOpenLog)
 PDH_STATUS WINAPI PdhOpenQueryA(LPCSTR, DWORD_PTR, PDH_HQUERY *);
 PDH_STATUS WINAPI PdhOpenQueryW(LPCWSTR, DWORD_PTR, PDH_HQUERY *);
 #define    PdhOpenQuery WINELIB_NAME_AW(PdhOpenQuery)
-- 
2.31.1




More information about the wine-devel mailing list