Hans Leidekker : pdh: Implement and test PdhGetRawCounterValue.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Jul 10 08:02:33 CDT 2007


Module: wine
Branch: master
Commit: 754ac8c478cd7c149a4bf88a5c1a9212bc9811f6
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=754ac8c478cd7c149a4bf88a5c1a9212bc9811f6

Author: Hans Leidekker <hans at it.vu.nl>
Date:   Mon Jul  9 20:55:25 2007 +0200

pdh: Implement and test PdhGetRawCounterValue.

---

 dlls/pdh/pdh.spec    |    2 +-
 dlls/pdh/pdh_main.c  |   24 ++++++++++++++++++++++++
 dlls/pdh/tests/pdh.c |   35 +++++++++++++++++++++++++++++++++++
 3 files changed, 60 insertions(+), 1 deletions(-)

diff --git a/dlls/pdh/pdh.spec b/dlls/pdh/pdh.spec
index 6dfc73d..7ed4207 100644
--- a/dlls/pdh/pdh.spec
+++ b/dlls/pdh/pdh.spec
@@ -64,7 +64,7 @@
 @ stub PdhGetLogSetGUID
 @ stub PdhGetRawCounterArrayA
 @ stub PdhGetRawCounterArrayW
-@ stub PdhGetRawCounterValue
+@ stdcall PdhGetRawCounterValue(ptr ptr ptr)
 @ stub PdhIsRealTimeQuery
 @ stub PdhListLogFileHeaderA
 @ stub PdhListLogFileHeaderW
diff --git a/dlls/pdh/pdh_main.c b/dlls/pdh/pdh_main.c
index f89493e..a04d1eb 100644
--- a/dlls/pdh/pdh_main.c
+++ b/dlls/pdh/pdh_main.c
@@ -327,6 +327,30 @@ PDH_STATUS WINAPI PdhGetFormattedCounterValue( PDH_HCOUNTER handle, DWORD format
 }
 
 /***********************************************************************
+ *              PdhGetRawCounterValue   (PDH.@)
+ */
+PDH_STATUS WINAPI PdhGetRawCounterValue( PDH_HCOUNTER handle, LPDWORD type,
+                                         PPDH_RAW_COUNTER value )
+{
+    struct counter *counter = handle;
+
+    TRACE("%p %p %p\n", handle, type, value);
+
+    if (!value)   return PDH_INVALID_ARGUMENT;
+    if (!counter) return PDH_INVALID_HANDLE;
+
+    value->CStatus                  = counter->status;
+    value->TimeStamp.dwLowDateTime  = counter->stamp.dwLowDateTime;
+    value->TimeStamp.dwHighDateTime = counter->stamp.dwHighDateTime;
+    value->FirstValue               = counter->one.largevalue;;
+    value->SecondValue              = counter->two.largevalue;
+    value->MultiCount               = 1; /* FIXME */
+
+    if (type) *type = counter->type;
+    return ERROR_SUCCESS;
+}
+
+/***********************************************************************
  *              PdhOpenQueryA   (PDH.@)
  */
 PDH_STATUS WINAPI PdhOpenQueryA( LPCSTR source, DWORD_PTR userdata, PDH_HQUERY *query )
diff --git a/dlls/pdh/tests/pdh.c b/dlls/pdh/tests/pdh.c
index 084fefc..6ddb097 100644
--- a/dlls/pdh/tests/pdh.c
+++ b/dlls/pdh/tests/pdh.c
@@ -145,6 +145,40 @@ static void test_PdhGetFormattedCounterValue( void )
     ok(ret == ERROR_SUCCESS, "PdhCloseQuery failed 0x%08x\n", ret);
 }
 
+static void test_PdhGetRawCounterValue( void )
+{
+    PDH_STATUS ret;
+    PDH_HQUERY query;
+    PDH_HCOUNTER counter;
+    PDH_RAW_COUNTER value;
+
+    ret = PdhOpenQueryA( NULL, 0, &query );
+    ok(ret == ERROR_SUCCESS, "PdhOpenQueryA failed 0x%08x\n", ret);
+
+    ret = PdhAddCounterA( query, "\\System\\System Up Time", 0, &counter );
+    ok(ret == ERROR_SUCCESS, "PdhAddCounterA failed 0x%08x\n", ret);
+
+    ret = PdhGetRawCounterValue( NULL, NULL, &value );
+    ok(ret == PDH_INVALID_HANDLE, "PdhGetRawCounterValue failed 0x%08x\n", ret);
+
+    ret = PdhGetRawCounterValue( counter, NULL, NULL );
+    ok(ret == PDH_INVALID_ARGUMENT, "PdhGetRawCounterValue failed 0x%08x\n", ret);
+
+    ret = PdhGetRawCounterValue( counter, NULL, &value );
+    ok(ret == ERROR_SUCCESS, "PdhGetRawCounterValue failed 0x%08x\n", ret);
+    ok(value.CStatus == ERROR_SUCCESS, "expected ERROR_SUCCESS got %x", value.CStatus);
+
+    ret = PdhCollectQueryData( query );
+    ok(ret == ERROR_SUCCESS, "PdhCollectQueryData failed 0x%08x\n", ret);
+
+    ret = PdhGetRawCounterValue( counter, NULL, &value );
+    ok(ret == ERROR_SUCCESS, "PdhGetRawCounterValue failed 0x%08x\n", ret);
+    ok(value.CStatus == ERROR_SUCCESS, "expected ERROR_SUCCESS got %x", value.CStatus);
+
+    ret = PdhCloseQuery( query );
+    ok(ret == ERROR_SUCCESS, "PdhCloseQuery failed 0x%08x\n", ret);
+}
+
 static void test_PdhSetCounterScaleFactor( void )
 {
     PDH_STATUS ret;
@@ -184,5 +218,6 @@ START_TEST(pdh)
     test_open_close_query();
     test_add_remove_counter();
     test_PdhGetFormattedCounterValue();
+    test_PdhGetRawCounterValue();
     test_PdhSetCounterScaleFactor();
 }




More information about the wine-cvs mailing list