2 * Tests for pdh.dll (Performance Data Helper)
4 * Copyright 2007 Hans Leidekker
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
28 #include "wine/test.h"
32 static PDH_STATUS (WINAPI
*pPdhAddEnglishCounterA
)(PDH_HQUERY
, LPCSTR
, DWORD_PTR
, PDH_HCOUNTER
*);
33 static PDH_STATUS (WINAPI
*pPdhAddEnglishCounterW
)(PDH_HQUERY
, LPCWSTR
, DWORD_PTR
, PDH_HCOUNTER
*);
34 static PDH_STATUS (WINAPI
*pPdhCollectQueryDataWithTime
)(PDH_HQUERY
, LONGLONG
*);
36 #define GETFUNCPTR(func) p##func = (void *)GetProcAddress( pdh, #func );
38 static void init_function_ptrs( void )
40 pdh
= GetModuleHandle( "pdh" );
41 GETFUNCPTR( PdhAddEnglishCounterA
)
42 GETFUNCPTR( PdhAddEnglishCounterW
)
43 GETFUNCPTR( PdhCollectQueryDataWithTime
)
46 static const WCHAR processor_time
[] =
47 {'%',' ','P','r','o','c','e','s','s','o','r',' ','T','i','m','e',0};
48 static const WCHAR uptime
[] =
49 {'S','y','s','t','e','m',' ','U','p',' ','T','i','m','e',0};
51 static const WCHAR system_uptime
[] =
52 {'\\','S','y','s','t','e','m','\\','S','y','s','t','e','m',' ','U','p',' ','T','i','m','e',0};
53 static const WCHAR system_downtime
[] = /* does not exist */
54 {'\\','S','y','s','t','e','m','\\','S','y','s','t','e','m',' ','D','o','w','n',' ','T','i','m','e',0};
55 static const WCHAR percentage_processor_time
[] =
56 {'\\','P','r','o','c','e','s','s','o','r','(','_','T','o','t','a','l',')',
57 '\\','%',' ','P','r','o','c','e','s','s','o','r',' ','T','i','m','e',0};
59 static void test_PdhOpenQueryA( void )
64 ret
= PdhOpenQueryA( NULL
, 0, NULL
);
65 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhOpenQueryA failed 0x%08x\n", ret
);
67 ret
= PdhOpenQueryA( NULL
, 0, &query
);
68 ok(ret
== ERROR_SUCCESS
, "PdhOpenQueryA failed 0x%08x\n", ret
);
70 ret
= PdhCloseQuery( NULL
);
71 ok(ret
== PDH_INVALID_HANDLE
, "PdhCloseQuery failed 0x%08x\n", ret
);
73 ret
= PdhCloseQuery( &query
);
74 ok(ret
== PDH_INVALID_HANDLE
, "PdhCloseQuery failed 0x%08x\n", ret
);
76 ret
= PdhCloseQuery( query
);
77 ok(ret
== ERROR_SUCCESS
, "PdhCloseQuery failed 0x%08x\n", ret
);
79 ret
= PdhCloseQuery( query
);
80 ok(ret
== PDH_INVALID_HANDLE
, "PdhCloseQuery failed 0x%08x\n", ret
);
83 static void test_PdhOpenQueryW( void )
88 ret
= PdhOpenQueryW( NULL
, 0, NULL
);
89 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhOpenQueryW failed 0x%08x\n", ret
);
91 ret
= PdhOpenQueryW( NULL
, 0, &query
);
92 ok(ret
== ERROR_SUCCESS
, "PdhOpenQueryW failed 0x%08x\n", ret
);
94 ret
= PdhCloseQuery( NULL
);
95 ok(ret
== PDH_INVALID_HANDLE
, "PdhCloseQuery failed 0x%08x\n", ret
);
97 ret
= PdhCloseQuery( &query
);
98 ok(ret
== PDH_INVALID_HANDLE
, "PdhCloseQuery failed 0x%08x\n", ret
);
100 ret
= PdhCloseQuery( query
);
101 ok(ret
== ERROR_SUCCESS
, "PdhCloseQuery failed 0x%08x\n", ret
);
103 ret
= PdhCloseQuery( query
);
104 ok(ret
== PDH_INVALID_HANDLE
, "PdhCloseQuery failed 0x%08x\n", ret
);
107 static void test_PdhAddCounterA( void )
111 PDH_HCOUNTER counter
;
113 ret
= PdhOpenQueryA( NULL
, 0, &query
);
114 ok(ret
== ERROR_SUCCESS
, "PdhOpenQueryA failed 0x%08x\n", ret
);
116 ret
= PdhAddCounterA( NULL
, "\\System\\System Up Time", 0, NULL
);
117 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhAddCounterA failed 0x%08x\n", ret
);
119 ret
= PdhAddCounterA( NULL
, "\\System\\System Up Time", 0, &counter
);
120 ok(ret
== PDH_INVALID_HANDLE
, "PdhAddCounterA failed 0x%08x\n", ret
);
122 ret
= PdhAddCounterA( query
, NULL
, 0, &counter
);
123 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhAddCounterA failed 0x%08x\n", ret
);
125 ret
= PdhAddCounterA( query
, "\\System\\System Up Time", 0, NULL
);
126 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhAddCounterA failed 0x%08x\n", ret
);
128 ret
= PdhAddCounterA( query
, "\\System\\System Down Time", 0, &counter
);
129 ok(ret
== PDH_CSTATUS_NO_COUNTER
, "PdhAddCounterA failed 0x%08x\n", ret
);
130 ok(!counter
, "PdhAddCounterA failed %p\n", counter
);
132 ret
= PdhAddCounterA( query
, "\\System\\System Up Time", 0, &counter
);
133 ok(ret
== ERROR_SUCCESS
, "PdhAddCounterA failed 0x%08x\n", ret
);
135 ret
= PdhCollectQueryData( NULL
);
136 ok(ret
== PDH_INVALID_HANDLE
, "PdhCollectQueryData failed 0x%08x\n", ret
);
138 ret
= PdhCollectQueryData( counter
);
139 ok(ret
== PDH_INVALID_HANDLE
, "PdhCollectQueryData failed 0x%08x\n", ret
);
141 ret
= PdhCollectQueryData( query
);
142 ok(ret
== ERROR_SUCCESS
, "PdhCollectQueryData failed 0x%08x\n", ret
);
144 ret
= PdhRemoveCounter( NULL
);
145 ok(ret
== PDH_INVALID_HANDLE
, "PdhRemoveCounter failed 0x%08x\n", ret
);
147 ret
= PdhRemoveCounter( counter
);
148 ok(ret
== ERROR_SUCCESS
, "PdhRemoveCounter failed 0x%08x\n", ret
);
150 ret
= PdhCloseQuery( query
);
151 ok(ret
== ERROR_SUCCESS
, "PdhCloseQuery failed 0x%08x\n", ret
);
154 static void test_PdhAddCounterW( void )
158 PDH_HCOUNTER counter
;
160 ret
= PdhOpenQueryW( NULL
, 0, &query
);
161 ok(ret
== ERROR_SUCCESS
, "PdhOpenQueryW failed 0x%08x\n", ret
);
163 ret
= PdhAddCounterW( NULL
, percentage_processor_time
, 0, NULL
);
164 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhAddCounterW failed 0x%08x\n", ret
);
166 ret
= PdhAddCounterW( NULL
, percentage_processor_time
, 0, &counter
);
167 ok(ret
== PDH_INVALID_HANDLE
, "PdhAddCounterW failed 0x%08x\n", ret
);
169 ret
= PdhAddCounterW( query
, NULL
, 0, &counter
);
170 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhAddCounterW failed 0x%08x\n", ret
);
172 ret
= PdhAddCounterW( query
, percentage_processor_time
, 0, NULL
);
173 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhAddCounterW failed 0x%08x\n", ret
);
175 ret
= PdhAddCounterW( query
, system_downtime
, 0, &counter
);
176 ok(ret
== PDH_CSTATUS_NO_COUNTER
, "PdhAddCounterW failed 0x%08x\n", ret
);
177 ok(!counter
, "PdhAddCounterW failed %p\n", counter
);
179 ret
= PdhAddCounterW( query
, percentage_processor_time
, 0, &counter
);
180 ok(ret
== ERROR_SUCCESS
, "PdhAddCounterW failed 0x%08x\n", ret
);
182 ret
= PdhCollectQueryData( NULL
);
183 ok(ret
== PDH_INVALID_HANDLE
, "PdhCollectQueryData failed 0x%08x\n", ret
);
185 ret
= PdhCollectQueryData( counter
);
186 ok(ret
== PDH_INVALID_HANDLE
, "PdhCollectQueryData failed 0x%08x\n", ret
);
188 ret
= PdhCollectQueryData( query
);
189 ok(ret
== ERROR_SUCCESS
, "PdhCollectQueryData failed 0x%08x\n", ret
);
191 ret
= PdhRemoveCounter( NULL
);
192 ok(ret
== PDH_INVALID_HANDLE
, "PdhRemoveCounter failed 0x%08x\n", ret
);
194 ret
= PdhRemoveCounter( counter
);
195 ok(ret
== ERROR_SUCCESS
, "PdhRemoveCounter failed 0x%08x\n", ret
);
197 ret
= PdhCloseQuery( query
);
198 ok(ret
== ERROR_SUCCESS
, "PdhCloseQuery failed 0x%08x\n", ret
);
201 static void test_PdhAddEnglishCounterA( void )
205 PDH_HCOUNTER counter
;
207 ret
= PdhOpenQueryA( NULL
, 0, &query
);
208 ok(ret
== ERROR_SUCCESS
, "PdhOpenQueryA failed 0x%08x\n", ret
);
210 ret
= pPdhAddEnglishCounterA( NULL
, "\\System\\System Up Time", 0, NULL
);
211 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhAddEnglishCounterA failed 0x%08x\n", ret
);
213 ret
= pPdhAddEnglishCounterA( NULL
, "\\System\\System Up Time", 0, &counter
);
214 ok(ret
== PDH_INVALID_HANDLE
, "PdhAddEnglishCounterA failed 0x%08x\n", ret
);
216 ret
= pPdhAddEnglishCounterA( query
, NULL
, 0, &counter
);
217 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhAddEnglishCounterA failed 0x%08x\n", ret
);
219 ret
= pPdhAddEnglishCounterA( query
, "\\System\\System Up Time", 0, NULL
);
220 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhAddEnglishCounterA failed 0x%08x\n", ret
);
222 ret
= pPdhAddEnglishCounterA( query
, "\\System\\System Down Time", 0, &counter
);
223 ok(ret
== PDH_CSTATUS_NO_COUNTER
, "PdhAddEnglishCounterA failed 0x%08x\n", ret
);
224 ok(!counter
, "PdhAddEnglishCounterA failed %p\n", counter
);
226 ret
= pPdhAddEnglishCounterA( query
, "\\System\\System Up Time", 0, &counter
);
227 ok(ret
== ERROR_SUCCESS
, "PdhAddEnglishCounterA failed 0x%08x\n", ret
);
229 ret
= PdhCollectQueryData( query
);
230 ok(ret
== ERROR_SUCCESS
, "PdhCollectQueryData failed 0x%08x\n", ret
);
232 ret
= PdhRemoveCounter( counter
);
233 ok(ret
== ERROR_SUCCESS
, "PdhRemoveCounter failed 0x%08x\n", ret
);
235 ret
= PdhCloseQuery( query
);
236 ok(ret
== ERROR_SUCCESS
, "PdhCloseQuery failed 0x%08x\n", ret
);
239 static void test_PdhAddEnglishCounterW( void )
243 PDH_HCOUNTER counter
;
245 ret
= PdhOpenQueryW( NULL
, 0, &query
);
246 ok(ret
== ERROR_SUCCESS
, "PdhOpenQueryW failed 0x%08x\n", ret
);
248 ret
= pPdhAddEnglishCounterW( NULL
, system_uptime
, 0, NULL
);
249 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhAddEnglishCounterW failed 0x%08x\n", ret
);
251 ret
= pPdhAddEnglishCounterW( NULL
, system_uptime
, 0, &counter
);
252 ok(ret
== PDH_INVALID_HANDLE
, "PdhAddEnglishCounterW failed 0x%08x\n", ret
);
254 ret
= pPdhAddEnglishCounterW( query
, NULL
, 0, &counter
);
255 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhAddEnglishCounterW failed 0x%08x\n", ret
);
257 ret
= pPdhAddEnglishCounterW( query
, system_uptime
, 0, NULL
);
258 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhAddEnglishCounterW failed 0x%08x\n", ret
);
260 ret
= pPdhAddEnglishCounterW( query
, system_downtime
, 0, &counter
);
261 ok(ret
== PDH_CSTATUS_NO_COUNTER
, "PdhAddEnglishCounterW failed 0x%08x\n", ret
);
262 ok(!counter
, "PdhAddEnglishCounterA failed %p\n", counter
);
264 ret
= pPdhAddEnglishCounterW( query
, system_uptime
, 0, &counter
);
265 ok(ret
== ERROR_SUCCESS
, "PdhAddEnglishCounterW failed 0x%08x\n", ret
);
267 ret
= PdhCollectQueryData( query
);
268 ok(ret
== ERROR_SUCCESS
, "PdhCollectQueryData failed 0x%08x\n", ret
);
270 ret
= PdhRemoveCounter( counter
);
271 ok(ret
== ERROR_SUCCESS
, "PdhRemoveCounter failed 0x%08x\n", ret
);
273 ret
= PdhCloseQuery( query
);
274 ok(ret
== ERROR_SUCCESS
, "PdhCloseQuery failed 0x%08x\n", ret
);
277 static void test_PdhCollectQueryDataWithTime( void )
281 PDH_HCOUNTER counter
;
284 ret
= PdhOpenQueryA( NULL
, 0, &query
);
285 ok(ret
== ERROR_SUCCESS
, "PdhOpenQueryA failed 0x%08x\n", ret
);
287 ret
= PdhAddCounterA( query
, "\\System\\System Up Time", 0, &counter
);
288 ok(ret
== ERROR_SUCCESS
, "PdhAddCounterA failed 0x%08x\n", ret
);
290 ret
= pPdhCollectQueryDataWithTime( NULL
, NULL
);
291 ok(ret
== PDH_INVALID_HANDLE
, "PdhCollectQueryDataWithTime failed 0x%08x\n", ret
);
293 ret
= pPdhCollectQueryDataWithTime( query
, NULL
);
294 ok(ret
== ERROR_SUCCESS
, "PdhCollectQueryDataWithTime failed 0x%08x\n", ret
);
296 ret
= pPdhCollectQueryDataWithTime( NULL
, &time
);
297 ok(ret
== PDH_INVALID_HANDLE
, "PdhCollectQueryDataWithTime failed 0x%08x\n", ret
);
299 ret
= pPdhCollectQueryDataWithTime( query
, &time
);
300 ok(ret
== ERROR_SUCCESS
, "PdhCollectQueryDataWithTime failed 0x%08x\n", ret
);
302 ret
= PdhCloseQuery( query
);
303 ok(ret
== ERROR_SUCCESS
, "PdhCloseQuery failed 0x%08x\n", ret
);
306 static void test_PdhGetFormattedCounterValue( void )
310 PDH_HCOUNTER counter
;
311 PDH_FMT_COUNTERVALUE value
;
313 ret
= PdhOpenQueryA( NULL
, 0, &query
);
314 ok(ret
== ERROR_SUCCESS
, "PdhOpenQueryA failed 0x%08x\n", ret
);
316 ret
= PdhAddCounterA( query
, "\\System\\System Up Time", 0, &counter
);
317 ok(ret
== ERROR_SUCCESS
, "PdhAddCounterA failed 0x%08x\n", ret
);
319 ret
= PdhGetFormattedCounterValue( NULL
, PDH_FMT_LARGE
, NULL
, NULL
);
320 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhGetFormattedCounterValue failed 0x%08x\n", ret
);
322 ret
= PdhGetFormattedCounterValue( NULL
, PDH_FMT_LARGE
, NULL
, &value
);
323 ok(ret
== PDH_INVALID_HANDLE
, "PdhGetFormattedCounterValue failed 0x%08x\n", ret
);
325 ret
= PdhGetFormattedCounterValue( counter
, PDH_FMT_LARGE
, NULL
, NULL
);
326 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhGetFormattedCounterValue failed 0x%08x\n", ret
);
328 ret
= PdhGetFormattedCounterValue( counter
, PDH_FMT_LARGE
, NULL
, &value
);
329 ok(ret
== ERROR_SUCCESS
, "PdhGetFormattedCounterValue failed 0x%08x\n", ret
);
331 ret
= PdhCollectQueryData( query
);
332 ok(ret
== ERROR_SUCCESS
, "PdhCollectQueryData failed 0x%08x\n", ret
);
334 ret
= PdhGetFormattedCounterValue( counter
, PDH_FMT_LARGE
, NULL
, &value
);
335 ok(ret
== ERROR_SUCCESS
, "PdhGetFormattedCounterValue failed 0x%08x\n", ret
);
337 ret
= PdhGetFormattedCounterValue( counter
, PDH_FMT_LARGE
| PDH_FMT_NOSCALE
, NULL
, &value
);
338 ok(ret
== ERROR_SUCCESS
, "PdhGetFormattedCounterValue failed 0x%08x\n", ret
);
340 ret
= PdhGetFormattedCounterValue( counter
, PDH_FMT_LARGE
| PDH_FMT_NOCAP100
, NULL
, &value
);
341 ok(ret
== ERROR_SUCCESS
, "PdhGetFormattedCounterValue failed 0x%08x\n", ret
);
343 ret
= PdhGetFormattedCounterValue( counter
, PDH_FMT_LARGE
| PDH_FMT_1000
, NULL
, &value
);
344 ok(ret
== ERROR_SUCCESS
, "PdhGetFormattedCounterValue failed 0x%08x\n", ret
);
346 ret
= PdhSetCounterScaleFactor( counter
, 2 );
347 ok(ret
== ERROR_SUCCESS
, "PdhSetCounterScaleFactor failed 0x%08x\n", ret
);
349 ret
= PdhGetFormattedCounterValue( counter
, PDH_FMT_LARGE
, NULL
, &value
);
350 ok(ret
== ERROR_SUCCESS
, "PdhGetFormattedCounterValue failed 0x%08x\n", ret
);
352 ret
= PdhCloseQuery( query
);
353 ok(ret
== ERROR_SUCCESS
, "PdhCloseQuery failed 0x%08x\n", ret
);
356 static void test_PdhGetRawCounterValue( void )
360 PDH_HCOUNTER counter
;
361 PDH_RAW_COUNTER value
;
363 ret
= PdhOpenQueryA( NULL
, 0, &query
);
364 ok(ret
== ERROR_SUCCESS
, "PdhOpenQueryA failed 0x%08x\n", ret
);
366 ret
= PdhAddCounterA( query
, "\\System\\System Up Time", 0, &counter
);
367 ok(ret
== ERROR_SUCCESS
, "PdhAddCounterA failed 0x%08x\n", ret
);
369 ret
= PdhGetRawCounterValue( NULL
, NULL
, &value
);
370 ok(ret
== PDH_INVALID_HANDLE
, "PdhGetRawCounterValue failed 0x%08x\n", ret
);
372 ret
= PdhGetRawCounterValue( counter
, NULL
, NULL
);
373 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhGetRawCounterValue failed 0x%08x\n", ret
);
375 ret
= PdhGetRawCounterValue( counter
, NULL
, &value
);
376 ok(ret
== ERROR_SUCCESS
, "PdhGetRawCounterValue failed 0x%08x\n", ret
);
377 ok(value
.CStatus
== ERROR_SUCCESS
, "expected ERROR_SUCCESS got %x", value
.CStatus
);
379 ret
= PdhCollectQueryData( query
);
380 ok(ret
== ERROR_SUCCESS
, "PdhCollectQueryData failed 0x%08x\n", ret
);
382 ret
= PdhGetRawCounterValue( counter
, NULL
, &value
);
383 ok(ret
== ERROR_SUCCESS
, "PdhGetRawCounterValue failed 0x%08x\n", ret
);
384 ok(value
.CStatus
== ERROR_SUCCESS
, "expected ERROR_SUCCESS got %x", value
.CStatus
);
386 ret
= PdhCloseQuery( query
);
387 ok(ret
== ERROR_SUCCESS
, "PdhCloseQuery failed 0x%08x\n", ret
);
390 static void test_PdhSetCounterScaleFactor( void )
394 PDH_HCOUNTER counter
;
396 ret
= PdhOpenQueryA( NULL
, 0, &query
);
397 ok(ret
== ERROR_SUCCESS
, "PdhOpenQueryA failed 0x%08x\n", ret
);
399 ret
= PdhAddCounterA( query
, "\\System\\System Up Time", 0, &counter
);
400 ok(ret
== ERROR_SUCCESS
, "PdhAddCounterA failed 0x%08x\n", ret
);
402 ret
= PdhSetCounterScaleFactor( NULL
, 8 );
403 ok(ret
== PDH_INVALID_HANDLE
, "PdhSetCounterScaleFactor failed 0x%08x\n", ret
);
405 ret
= PdhSetCounterScaleFactor( NULL
, 1 );
406 ok(ret
== PDH_INVALID_HANDLE
, "PdhSetCounterScaleFactor failed 0x%08x\n", ret
);
408 ret
= PdhSetCounterScaleFactor( counter
, 8 );
409 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhSetCounterScaleFactor failed 0x%08x\n", ret
);
411 ret
= PdhSetCounterScaleFactor( counter
, -8 );
412 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhSetCounterScaleFactor failed 0x%08x\n", ret
);
414 ret
= PdhSetCounterScaleFactor( counter
, 7 );
415 ok(ret
== ERROR_SUCCESS
, "PdhSetCounterScaleFactor failed 0x%08x\n", ret
);
417 ret
= PdhSetCounterScaleFactor( counter
, 0 );
418 ok(ret
== ERROR_SUCCESS
, "PdhSetCounterScaleFactor failed 0x%08x\n", ret
);
420 ret
= PdhCloseQuery( query
);
421 ok(ret
== ERROR_SUCCESS
, "PdhCloseQuery failed 0x%08x\n", ret
);
424 static void test_PdhGetCounterTimeBase( void )
428 PDH_HCOUNTER counter
;
431 ret
= PdhOpenQueryA( NULL
, 0, &query
);
432 ok(ret
== ERROR_SUCCESS
, "PdhOpenQueryA failed 0x%08x\n", ret
);
434 ret
= PdhAddCounterA( query
, "\\System\\System Up Time", 0, &counter
);
435 ok(ret
== ERROR_SUCCESS
, "PdhAddCounterA failed 0x%08x\n", ret
);
437 ret
= PdhGetCounterTimeBase( NULL
, NULL
);
438 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhGetCounterTimeBase failed 0x%08x\n", ret
);
440 ret
= PdhGetCounterTimeBase( NULL
, &base
);
441 ok(ret
== PDH_INVALID_HANDLE
, "PdhGetCounterTimeBase failed 0x%08x\n", ret
);
443 ret
= PdhGetCounterTimeBase( counter
, NULL
);
444 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhGetCounterTimeBase failed 0x%08x\n", ret
);
446 ret
= PdhGetCounterTimeBase( counter
, &base
);
447 ok(ret
== ERROR_SUCCESS
, "PdhGetCounterTimeBase failed 0x%08x\n", ret
);
449 ret
= PdhCloseQuery( query
);
450 ok(ret
== ERROR_SUCCESS
, "PdhCloseQuery failed 0x%08x\n", ret
);
453 static void test_PdhGetCounterInfoA( void )
457 PDH_HCOUNTER counter
;
458 PDH_COUNTER_INFO_A info
;
461 ret
= PdhOpenQueryA( NULL
, 0, &query
);
462 ok(ret
== ERROR_SUCCESS
, "PdhOpenQueryA failed 0x%08x\n", ret
);
464 ret
= PdhAddCounterA( query
, "\\System\\System Up Time", 0, &counter
);
465 ok(ret
== ERROR_SUCCESS
, "PdhAddCounterA failed 0x%08x\n", ret
);
467 ret
= PdhGetCounterInfoA( NULL
, 0, NULL
, NULL
);
468 ok(ret
== PDH_INVALID_HANDLE
, "PdhGetCounterInfoA failed 0x%08x\n", ret
);
470 ret
= PdhGetCounterInfoA( counter
, 0, NULL
, NULL
);
471 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhGetCounterInfoA failed 0x%08x\n", ret
);
473 ret
= PdhGetCounterInfoA( counter
, 0, NULL
, &info
);
474 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhGetCounterInfoA failed 0x%08x\n", ret
);
476 size
= sizeof(info
) - 1;
477 ret
= PdhGetCounterInfoA( counter
, 0, &size
, NULL
);
478 ok(ret
== PDH_MORE_DATA
, "PdhGetCounterInfoA failed 0x%08x\n", ret
);
481 ret
= PdhGetCounterInfoA( counter
, 0, &size
, &info
);
482 ok(ret
== ERROR_SUCCESS
, "PdhGetCounterInfoA failed 0x%08x\n", ret
);
483 ok(size
== sizeof(info
), "PdhGetCounterInfoA failed %d\n", size
);
485 ret
= PdhGetCounterInfoA( counter
, 0, &size
, &info
);
486 ok(ret
== ERROR_SUCCESS
, "PdhGetCounterInfoA failed 0x%08x\n", ret
);
487 ok(info
.lScale
== 0, "lScale %d\n", info
.lScale
);
489 ret
= PdhSetCounterScaleFactor( counter
, 0 );
490 ok(ret
== ERROR_SUCCESS
, "PdhSetCounterScaleFactor failed 0x%08x\n", ret
);
492 ret
= PdhGetCounterInfoA( counter
, 0, &size
, &info
);
493 ok(ret
== ERROR_SUCCESS
, "PdhGetCounterInfoA failed 0x%08x\n", ret
);
494 ok(info
.lScale
== 0, "lScale %d\n", info
.lScale
);
496 ret
= PdhSetCounterScaleFactor( counter
, -5 );
497 ok(ret
== ERROR_SUCCESS
, "PdhSetCounterScaleFactor failed 0x%08x\n", ret
);
499 ret
= PdhGetCounterInfoA( counter
, 0, &size
, &info
);
500 ok(ret
== ERROR_SUCCESS
, "PdhGetCounterInfoA failed 0x%08x\n", ret
);
501 ok(info
.lScale
== -5, "lScale %d\n", info
.lScale
);
503 ret
= PdhCloseQuery( query
);
504 ok(ret
== ERROR_SUCCESS
, "PdhCloseQuery failed 0x%08x\n", ret
);
507 static void test_PdhGetCounterInfoW( void )
511 PDH_HCOUNTER counter
;
512 PDH_COUNTER_INFO_W info
;
515 ret
= PdhOpenQueryW( NULL
, 0, &query
);
516 ok(ret
== ERROR_SUCCESS
, "PdhOpenQueryW failed 0x%08x\n", ret
);
518 ret
= PdhAddCounterW( query
, percentage_processor_time
, 0, &counter
);
519 ok(ret
== ERROR_SUCCESS
, "PdhAddCounterW failed 0x%08x\n", ret
);
521 ret
= PdhGetCounterInfoW( NULL
, 0, NULL
, NULL
);
522 ok(ret
== PDH_INVALID_HANDLE
, "PdhGetCounterInfoW failed 0x%08x\n", ret
);
524 ret
= PdhGetCounterInfoW( counter
, 0, NULL
, NULL
);
525 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhGetCounterInfoW failed 0x%08x\n", ret
);
527 ret
= PdhGetCounterInfoW( counter
, 0, NULL
, &info
);
528 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhGetCounterInfoW failed 0x%08x\n", ret
);
530 size
= sizeof(info
) - 1;
531 ret
= PdhGetCounterInfoW( counter
, 0, &size
, NULL
);
532 ok(ret
== PDH_MORE_DATA
, "PdhGetCounterInfoW failed 0x%08x\n", ret
);
535 ret
= PdhGetCounterInfoW( counter
, 0, &size
, &info
);
536 ok(ret
== ERROR_SUCCESS
, "PdhGetCounterInfoW failed 0x%08x\n", ret
);
537 ok(size
== sizeof(info
), "PdhGetCounterInfoW failed %d\n", size
);
539 ret
= PdhGetCounterInfoW( counter
, 0, &size
, &info
);
540 ok(ret
== ERROR_SUCCESS
, "PdhGetCounterInfoW failed 0x%08x\n", ret
);
541 ok(info
.lScale
== 0, "lScale %d\n", info
.lScale
);
543 ret
= PdhSetCounterScaleFactor( counter
, 0 );
544 ok(ret
== ERROR_SUCCESS
, "PdhSetCounterScaleFactor failed 0x%08x\n", ret
);
546 ret
= PdhGetCounterInfoW( counter
, 0, &size
, &info
);
547 ok(ret
== ERROR_SUCCESS
, "PdhGetCounterInfoW failed 0x%08x\n", ret
);
548 ok(info
.lScale
== 0, "lScale %d\n", info
.lScale
);
550 ret
= PdhSetCounterScaleFactor( counter
, -5 );
551 ok(ret
== ERROR_SUCCESS
, "PdhSetCounterScaleFactor failed 0x%08x\n", ret
);
553 ret
= PdhGetCounterInfoW( counter
, 0, &size
, &info
);
554 ok(ret
== ERROR_SUCCESS
, "PdhGetCounterInfoW failed 0x%08x\n", ret
);
555 ok(info
.lScale
== -5, "lScale %d\n", info
.lScale
);
557 ret
= PdhCloseQuery( query
);
558 ok(ret
== ERROR_SUCCESS
, "PdhCloseQuery failed 0x%08x\n", ret
);
561 static void test_PdhLookupPerfIndexByNameA( void )
566 ret
= PdhLookupPerfIndexByNameA( NULL
, NULL
, NULL
);
567 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhLookupPerfIndexByNameA failed 0x%08x\n", ret
);
569 ret
= PdhLookupPerfIndexByNameA( NULL
, NULL
, &index
);
570 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhLookupPerfIndexByNameA failed 0x%08x\n", ret
);
572 ret
= PdhLookupPerfIndexByNameA( NULL
, "No Counter", &index
);
573 ok(ret
== PDH_STRING_NOT_FOUND
, "PdhLookupPerfIndexByNameA failed 0x%08x\n", ret
);
575 ret
= PdhLookupPerfIndexByNameA( NULL
, "% Processor Time", NULL
);
576 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhLookupPerfIndexByNameA failed 0x%08x\n", ret
);
578 ret
= PdhLookupPerfIndexByNameA( NULL
, "% Processor Time", &index
);
579 ok(ret
== ERROR_SUCCESS
, "PdhLookupPerfIndexByNameA failed 0x%08x\n", ret
);
580 ok(index
== 6, "PdhLookupPerfIndexByNameA failed %d\n", index
);
582 ret
= PdhLookupPerfIndexByNameA( NULL
, "System Up Time", &index
);
583 ok(ret
== ERROR_SUCCESS
, "PdhLookupPerfIndexByNameA failed 0x%08x\n", ret
);
584 ok(index
== 674, "PdhLookupPerfIndexByNameA failed %d\n", index
);
587 static void test_PdhLookupPerfIndexByNameW( void )
592 static const WCHAR no_counter
[] = {'N','o',' ','C','o','u','n','t','e','r',0};
594 ret
= PdhLookupPerfIndexByNameW( NULL
, NULL
, NULL
);
595 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhLookupPerfIndexByNameW failed 0x%08x\n", ret
);
597 ret
= PdhLookupPerfIndexByNameW( NULL
, NULL
, &index
);
598 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhLookupPerfIndexByNameW failed 0x%08x\n", ret
);
600 ret
= PdhLookupPerfIndexByNameW( NULL
, no_counter
, &index
);
601 ok(ret
== PDH_STRING_NOT_FOUND
, "PdhLookupPerfIndexByNameW failed 0x%08x\n", ret
);
603 ret
= PdhLookupPerfIndexByNameW( NULL
, processor_time
, NULL
);
604 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhLookupPerfIndexByNameW failed 0x%08x\n", ret
);
606 ret
= PdhLookupPerfIndexByNameW( NULL
, processor_time
, &index
);
607 ok(ret
== ERROR_SUCCESS
, "PdhLookupPerfIndexByNameW failed 0x%08x\n", ret
);
608 ok(index
== 6, "PdhLookupPerfIndexByNameW failed %d\n", index
);
610 ret
= PdhLookupPerfIndexByNameW( NULL
, uptime
, &index
);
611 ok(ret
== ERROR_SUCCESS
, "PdhLookupPerfIndexByNameW failed 0x%08x\n", ret
);
612 ok(index
== 674, "PdhLookupPerfIndexByNameW failed %d\n", index
);
615 static void test_PdhLookupPerfNameByIndexA( void )
618 char buffer
[PDH_MAX_COUNTER_NAME
] = "!!";
621 ret
= PdhLookupPerfNameByIndexA( NULL
, 0, NULL
, NULL
);
622 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhLookupPerfNameByIndexA failed 0x%08x\n", ret
);
625 ret
= PdhLookupPerfNameByIndexA( NULL
, 0, NULL
, &size
);
626 ok(ret
== ERROR_SUCCESS
, "PdhLookupPerfNameByIndexA failed 0x%08x\n", ret
);
627 ok(size
== 1, "PdhLookupPerfNameByIndexA failed %d\n", size
);
629 size
= sizeof(buffer
);
630 ret
= PdhLookupPerfNameByIndexA( NULL
, 0, buffer
, &size
);
631 ok(ret
== ERROR_SUCCESS
, "PdhLookupPerfNameByIndexA failed 0x%08x\n", ret
);
632 ok(!strcmp(buffer
, "!!"), "PdhLookupPerfNameByIndexA failed %s\n", buffer
);
635 ret
= PdhLookupPerfNameByIndexA( NULL
, 6, buffer
, &size
);
636 ok(ret
== PDH_MORE_DATA
, "PdhLookupPerfNameByIndexA failed 0x%08x\n", ret
);
637 ok(size
== sizeof("% Processor Time"), "PdhLookupPerfNameByIndexA failed %d\n", size
);
639 size
= sizeof(buffer
);
640 ret
= PdhLookupPerfNameByIndexA( NULL
, 6, buffer
, &size
);
641 ok(ret
== ERROR_SUCCESS
, "PdhLookupPerfNameByIndexA failed 0x%08x\n", ret
);
642 ok(!lstrcmpA( buffer
, "% Processor Time" ),
643 "PdhLookupPerfNameByIndexA failed, got %s expected \'%% Processor Time\'\n", buffer
);
644 ok(size
== sizeof("% Processor Time"), "PdhLookupPerfNameByIndexA failed %d\n", size
);
647 ret
= PdhLookupPerfNameByIndexA( NULL
, 674, NULL
, &size
);
648 ok(ret
== PDH_MORE_DATA
, "PdhLookupPerfNameByIndexA failed 0x%08x\n", ret
);
649 ok(size
== sizeof("System Up Time"), "PdhLookupPerfNameByIndexA failed %d\n", size
);
651 size
= sizeof(buffer
);
652 ret
= PdhLookupPerfNameByIndexA( NULL
, 674, buffer
, &size
);
653 ok(ret
== ERROR_SUCCESS
, "PdhLookupPerfNameByIndexA failed 0x%08x\n", ret
);
654 ok(!lstrcmpA( buffer
, "System Up Time" ),
655 "PdhLookupPerfNameByIndexA failed, got %s expected \'System Up Time\'\n", buffer
);
656 ok(size
== sizeof("System Up Time"), "PdhLookupPerfNameByIndexA failed %d\n", size
);
659 static void test_PdhLookupPerfNameByIndexW( void )
662 WCHAR buffer
[PDH_MAX_COUNTER_NAME
];
665 ret
= PdhLookupPerfNameByIndexW( NULL
, 0, NULL
, NULL
);
666 ok(ret
== PDH_INVALID_ARGUMENT
, "PdhLookupPerfNameByIndexW failed 0x%08x\n", ret
);
669 ret
= PdhLookupPerfNameByIndexW( NULL
, 0, NULL
, &size
);
670 ok(ret
== ERROR_SUCCESS
, "PdhLookupPerfNameByIndexW failed 0x%08x\n", ret
);
671 ok(size
== 1, "PdhLookupPerfNameByIndexW failed %d\n", size
);
673 size
= sizeof(buffer
) / sizeof(WCHAR
);
674 ret
= PdhLookupPerfNameByIndexW( NULL
, 0, buffer
, &size
);
675 ok(ret
== ERROR_SUCCESS
, "PdhLookupPerfNameByIndexW failed 0x%08x\n", ret
);
678 ret
= PdhLookupPerfNameByIndexW( NULL
, 6, buffer
, &size
);
679 ok(ret
== PDH_MORE_DATA
, "PdhLookupPerfNameByIndexW failed 0x%08x\n", ret
);
680 ok(size
== sizeof(processor_time
) / sizeof(WCHAR
), "PdhLookupPerfNameByIndexW failed %d\n", size
);
682 size
= sizeof(buffer
) / sizeof(WCHAR
);
683 ret
= PdhLookupPerfNameByIndexW( NULL
, 6, buffer
, &size
);
684 ok(ret
== ERROR_SUCCESS
, "PdhLookupPerfNameByIndexW failed 0x%08x\n", ret
);
685 ok(size
== sizeof(processor_time
) / sizeof(WCHAR
), "PdhLookupPerfNameByIndexW failed %d\n", size
);
688 ret
= PdhLookupPerfNameByIndexW( NULL
, 674, NULL
, &size
);
689 ok(ret
== PDH_MORE_DATA
, "PdhLookupPerfNameByIndexW failed 0x%08x\n", ret
);
690 ok(size
== sizeof(uptime
) / sizeof(WCHAR
), "PdhLookupPerfNameByIndexW failed %d\n", size
);
692 size
= sizeof(buffer
) / sizeof(WCHAR
);
693 ret
= PdhLookupPerfNameByIndexW( NULL
, 674, buffer
, &size
);
694 ok(ret
== ERROR_SUCCESS
, "PdhLookupPerfNameByIndexW failed 0x%08x\n", ret
);
695 ok(size
== sizeof(uptime
) / sizeof(WCHAR
), "PdhLookupPerfNameByIndexW failed %d\n", size
);
700 init_function_ptrs();
702 test_PdhOpenQueryA();
703 test_PdhOpenQueryW();
705 test_PdhAddCounterA();
706 test_PdhAddCounterW();
708 if (pPdhAddEnglishCounterA
) test_PdhAddEnglishCounterA();
709 if (pPdhAddEnglishCounterW
) test_PdhAddEnglishCounterW();
710 if (pPdhCollectQueryDataWithTime
) test_PdhCollectQueryDataWithTime();
712 test_PdhGetFormattedCounterValue();
713 test_PdhGetRawCounterValue();
714 test_PdhSetCounterScaleFactor();
715 test_PdhGetCounterTimeBase();
717 test_PdhGetCounterInfoA();
718 test_PdhGetCounterInfoW();
720 test_PdhLookupPerfIndexByNameA();
721 test_PdhLookupPerfIndexByNameW();
723 test_PdhLookupPerfNameByIndexA();
724 test_PdhLookupPerfNameByIndexW();