ReactOS  0.4.14-dev-608-gd495a4f
pdh.c
Go to the documentation of this file.
1 /*
2  * Tests for pdh.dll (Performance Data Helper)
3  *
4  * Copyright 2007 Hans Leidekker
5  *
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.
10  *
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.
15  *
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
19  */
20 
21 #include <stdio.h>
22 
23 #include "windows.h"
24 
25 #include "pdh.h"
26 #include "pdhmsg.h"
27 
28 #include "wine/test.h"
29 
30 static HMODULE pdh;
31 
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 *);
35 static PDH_STATUS (WINAPI *pPdhValidatePathExA)(PDH_HLOG, LPCSTR);
36 static PDH_STATUS (WINAPI *pPdhValidatePathExW)(PDH_HLOG, LPCWSTR);
37 
38 #define GETFUNCPTR(func) p##func = (void *)GetProcAddress( pdh, #func );
39 
40 
41 /* Returns true if the user interface is in English. Note that this does not
42  * presume of the formatting of dates, numbers, etc.
43  */
44 static BOOL is_lang_english(void)
45 {
46  static HMODULE hkernel32 = NULL;
47  static LANGID (WINAPI *pGetThreadUILanguage)(void) = NULL;
48  static LANGID (WINAPI *pGetUserDefaultUILanguage)(void) = NULL;
49 
50  if (!hkernel32)
51  {
52  hkernel32 = GetModuleHandleA("kernel32.dll");
53  pGetThreadUILanguage = (void*)GetProcAddress(hkernel32, "GetThreadUILanguage");
54  pGetUserDefaultUILanguage = (void*)GetProcAddress(hkernel32, "GetUserDefaultUILanguage");
55  }
56  if (pGetThreadUILanguage)
57  return PRIMARYLANGID(pGetThreadUILanguage()) == LANG_ENGLISH;
58  if (pGetUserDefaultUILanguage)
59  return PRIMARYLANGID(pGetUserDefaultUILanguage()) == LANG_ENGLISH;
60 
62 }
63 
64 static void init_function_ptrs( void )
65 {
66  pdh = GetModuleHandleA( "pdh" );
72 }
73 
74 static const WCHAR processor_time[] =
75  {'%',' ','P','r','o','c','e','s','s','o','r',' ','T','i','m','e',0};
76 static const WCHAR uptime[] =
77  {'S','y','s','t','e','m',' ','U','p',' ','T','i','m','e',0};
78 
79 static const WCHAR system_uptime[] =
80  {'\\','S','y','s','t','e','m','\\','S','y','s','t','e','m',' ','U','p',' ','T','i','m','e',0};
81 static const WCHAR nonexistent_counter[] =
82  {'\\','S','y','s','t','e','m','\\','S','y','s','t','e','m',' ','D','o','w','n',' ','T','i','m','e',0};
84  {'\\','P','r','o','c','e','s','s','o','r','(','_','T','o','t','a','l',')',
85  '\\','%',' ','P','r','o','c','e','s','s','o','r',' ','T','i','m','e',0};
86 
87 static void test_PdhOpenQueryA( void )
88 {
91 
92  ret = PdhOpenQueryA( NULL, 0, NULL );
93  ok(ret == PDH_INVALID_ARGUMENT, "PdhOpenQueryA failed 0x%08x\n", ret);
94 
95  ret = PdhOpenQueryA( NULL, 0, &query );
96  ok(ret == ERROR_SUCCESS, "PdhOpenQueryA failed 0x%08x\n", ret);
97 
98  ret = PdhCloseQuery( NULL );
99  ok(ret == PDH_INVALID_HANDLE, "PdhCloseQuery failed 0x%08x\n", ret);
100 
101  ret = PdhCloseQuery( &query );
102  ok(ret == PDH_INVALID_HANDLE, "PdhCloseQuery failed 0x%08x\n", ret);
103 
104  ret = PdhCloseQuery( query );
105  ok(ret == ERROR_SUCCESS, "PdhCloseQuery failed 0x%08x\n", ret);
106 
107  ret = PdhCloseQuery( query );
108  ok(ret == PDH_INVALID_HANDLE, "PdhCloseQuery failed 0x%08x\n", ret);
109 }
110 
111 static void test_PdhOpenQueryW( void )
112 {
113  PDH_STATUS ret;
115 
116  ret = PdhOpenQueryW( NULL, 0, NULL );
117  ok(ret == PDH_INVALID_ARGUMENT, "PdhOpenQueryW failed 0x%08x\n", ret);
118 
119  ret = PdhOpenQueryW( NULL, 0, &query );
120  ok(ret == ERROR_SUCCESS, "PdhOpenQueryW failed 0x%08x\n", ret);
121 
122  ret = PdhCloseQuery( NULL );
123  ok(ret == PDH_INVALID_HANDLE, "PdhCloseQuery failed 0x%08x\n", ret);
124 
125  ret = PdhCloseQuery( &query );
126  ok(ret == PDH_INVALID_HANDLE, "PdhCloseQuery failed 0x%08x\n", ret);
127 
128  ret = PdhCloseQuery( query );
129  ok(ret == ERROR_SUCCESS, "PdhCloseQuery failed 0x%08x\n", ret);
130 
131  ret = PdhCloseQuery( query );
132  ok(ret == PDH_INVALID_HANDLE, "PdhCloseQuery failed 0x%08x\n", ret);
133 }
134 
135 static void test_PdhAddCounterA( void )
136 {
137  PDH_STATUS ret;
140 
141  ret = PdhOpenQueryA( NULL, 0, &query );
142  ok(ret == ERROR_SUCCESS, "PdhOpenQueryA failed 0x%08x\n", ret);
143 
144  ret = PdhAddCounterA( NULL, "\\System\\System Up Time", 0, NULL );
145  ok(ret == PDH_INVALID_ARGUMENT, "PdhAddCounterA failed 0x%08x\n", ret);
146 
147  ret = PdhAddCounterA( NULL, "\\System\\System Up Time", 0, &counter );
148  ok(ret == PDH_INVALID_HANDLE, "PdhAddCounterA failed 0x%08x\n", ret);
149 
150  ret = PdhAddCounterA( query, NULL, 0, &counter );
151  ok(ret == PDH_INVALID_ARGUMENT, "PdhAddCounterA failed 0x%08x\n", ret);
152 
153  ret = PdhAddCounterA( query, "\\System\\System Up Time", 0, NULL );
154  ok(ret == PDH_INVALID_ARGUMENT, "PdhAddCounterA failed 0x%08x\n", ret);
155 
156  ret = PdhAddCounterA( query, "\\System\\Nonexistent Counter", 0, &counter );
158  broken(ret == PDH_INVALID_PATH), /* Win2K */
159  "PdhAddCounterA failed 0x%08x\n", ret);
160  ok(!counter, "PdhAddCounterA failed %p\n", counter);
161 
162  ret = PdhAddCounterA( query, "\\System\\System Up Time", 0, &counter );
163  ok(ret == ERROR_SUCCESS, "PdhAddCounterA failed 0x%08x\n", ret);
164 
166  ok(ret == PDH_INVALID_HANDLE, "PdhCollectQueryData failed 0x%08x\n", ret);
167 
169  ok(ret == PDH_INVALID_HANDLE, "PdhCollectQueryData failed 0x%08x\n", ret);
170 
172  ok(ret == ERROR_SUCCESS, "PdhCollectQueryData failed 0x%08x\n", ret);
173 
175  ok(ret == PDH_INVALID_HANDLE, "PdhRemoveCounter failed 0x%08x\n", ret);
176 
178  ok(ret == ERROR_SUCCESS, "PdhRemoveCounter failed 0x%08x\n", ret);
179 
180  ret = PdhCloseQuery( query );
181  ok(ret == ERROR_SUCCESS, "PdhCloseQuery failed 0x%08x\n", ret);
182 }
183 
184 static void test_PdhAddCounterW( void )
185 {
186  PDH_STATUS ret;
189 
190  ret = PdhOpenQueryW( NULL, 0, &query );
191  ok(ret == ERROR_SUCCESS, "PdhOpenQueryW failed 0x%08x\n", ret);
192 
194  ok(ret == PDH_INVALID_ARGUMENT, "PdhAddCounterW failed 0x%08x\n", ret);
195 
197  ok(ret == PDH_INVALID_HANDLE, "PdhAddCounterW failed 0x%08x\n", ret);
198 
199  ret = PdhAddCounterW( query, NULL, 0, &counter );
200  ok(ret == PDH_INVALID_ARGUMENT, "PdhAddCounterW failed 0x%08x\n", ret);
201 
203  ok(ret == PDH_INVALID_ARGUMENT, "PdhAddCounterW failed 0x%08x\n", ret);
204 
207  broken(ret == PDH_INVALID_PATH), /* Win2K */
208  "PdhAddCounterW failed 0x%08x\n", ret);
209  ok(!counter, "PdhAddCounterW failed %p\n", counter);
210 
212  ok(ret == ERROR_SUCCESS, "PdhAddCounterW failed 0x%08x\n", ret);
213 
215  ok(ret == PDH_INVALID_HANDLE, "PdhCollectQueryData failed 0x%08x\n", ret);
216 
218  ok(ret == PDH_INVALID_HANDLE, "PdhCollectQueryData failed 0x%08x\n", ret);
219 
221  ok(ret == ERROR_SUCCESS, "PdhCollectQueryData failed 0x%08x\n", ret);
222 
224  ok(ret == PDH_INVALID_HANDLE, "PdhRemoveCounter failed 0x%08x\n", ret);
225 
227  ok(ret == ERROR_SUCCESS, "PdhRemoveCounter failed 0x%08x\n", ret);
228 
229  ret = PdhCloseQuery( query );
230  ok(ret == ERROR_SUCCESS, "PdhCloseQuery failed 0x%08x\n", ret);
231 }
232 
233 static void test_PdhAddEnglishCounterA( void )
234 {
235  PDH_STATUS ret;
238 
239  ret = PdhOpenQueryA( NULL, 0, &query );
240  ok(ret == ERROR_SUCCESS, "PdhOpenQueryA failed 0x%08x\n", ret);
241 
243  ok(ret == PDH_NO_DATA, "PdhCollectQueryData failed 0x%08x\n", ret);
244 
245  ret = pPdhAddEnglishCounterA( NULL, "\\System\\System Up Time", 0, NULL );
246  ok(ret == PDH_INVALID_ARGUMENT, "PdhAddEnglishCounterA failed 0x%08x\n", ret);
247 
248  ret = pPdhAddEnglishCounterA( NULL, "\\System\\System Up Time", 0, &counter );
249  ok(ret == PDH_INVALID_ARGUMENT, "PdhAddEnglishCounterA failed 0x%08x\n", ret);
250 
251  ret = pPdhAddEnglishCounterA( query, NULL, 0, &counter );
252  ok(ret == PDH_INVALID_ARGUMENT, "PdhAddEnglishCounterA failed 0x%08x\n", ret);
253 
254  ret = pPdhAddEnglishCounterA( query, "\\System\\System Up Time", 0, NULL );
255  ok(ret == PDH_INVALID_ARGUMENT, "PdhAddEnglishCounterA failed 0x%08x\n", ret);
256 
257  ret = pPdhAddEnglishCounterA( query, "\\System\\System Down Time", 0, &counter );
258  ok(ret == PDH_CSTATUS_NO_COUNTER, "PdhAddEnglishCounterA failed 0x%08x\n", ret);
259  ok(!counter, "PdhAddEnglishCounterA failed %p\n", counter);
260 
261  ret = pPdhAddEnglishCounterA( query, "\\System\\System Up Time", 0, &counter );
262  ok(ret == ERROR_SUCCESS, "PdhAddEnglishCounterA failed 0x%08x\n", ret);
263 
265  ok(ret == ERROR_SUCCESS, "PdhCollectQueryData failed 0x%08x\n", ret);
266 
268  ok(ret == ERROR_SUCCESS, "PdhRemoveCounter failed 0x%08x\n", ret);
269 
270  ret = PdhCloseQuery( query );
271  ok(ret == ERROR_SUCCESS, "PdhCloseQuery failed 0x%08x\n", ret);
272 }
273 
274 static void test_PdhAddEnglishCounterW( void )
275 {
276  PDH_STATUS ret;
279 
280  ret = PdhOpenQueryW( NULL, 0, &query );
281  ok(ret == ERROR_SUCCESS, "PdhOpenQueryW failed 0x%08x\n", ret);
282 
284  ok(ret == PDH_NO_DATA, "PdhCollectQueryData failed 0x%08x\n", ret);
285 
286  ret = pPdhAddEnglishCounterW( NULL, system_uptime, 0, NULL );
287  ok(ret == PDH_INVALID_ARGUMENT, "PdhAddEnglishCounterW failed 0x%08x\n", ret);
288 
289  ret = pPdhAddEnglishCounterW( NULL, system_uptime, 0, &counter );
290  ok(ret == PDH_INVALID_ARGUMENT, "PdhAddEnglishCounterW failed 0x%08x\n", ret);
291 
292  ret = pPdhAddEnglishCounterW( query, NULL, 0, &counter );
293  ok(ret == PDH_INVALID_ARGUMENT, "PdhAddEnglishCounterW failed 0x%08x\n", ret);
294 
295  ret = pPdhAddEnglishCounterW( query, system_uptime, 0, NULL );
296  ok(ret == PDH_INVALID_ARGUMENT, "PdhAddEnglishCounterW failed 0x%08x\n", ret);
297 
298  ret = pPdhAddEnglishCounterW( query, nonexistent_counter, 0, &counter );
299  ok(ret == PDH_CSTATUS_NO_COUNTER, "PdhAddEnglishCounterW failed 0x%08x\n", ret);
300  ok(!counter, "PdhAddEnglishCounterA failed %p\n", counter);
301 
302  ret = pPdhAddEnglishCounterW( query, system_uptime, 0, &counter );
303  ok(ret == ERROR_SUCCESS, "PdhAddEnglishCounterW failed 0x%08x\n", ret);
304 
306  ok(ret == ERROR_SUCCESS, "PdhCollectQueryData failed 0x%08x\n", ret);
307 
309  ok(ret == ERROR_SUCCESS, "PdhRemoveCounter failed 0x%08x\n", ret);
310 
311  ret = PdhCloseQuery( query );
312  ok(ret == ERROR_SUCCESS, "PdhCloseQuery failed 0x%08x\n", ret);
313 }
314 
316 {
317  PDH_STATUS ret;
320  LONGLONG time;
321 
322  ret = PdhOpenQueryA( NULL, 0, &query );
323  ok(ret == ERROR_SUCCESS, "PdhOpenQueryA failed 0x%08x\n", ret);
324 
326  ok(ret == PDH_NO_DATA, "PdhCollectQueryData failed 0x%08x\n", ret);
327 
328  ret = PdhAddCounterA( query, "\\System\\System Up Time", 0, &counter );
329  ok(ret == ERROR_SUCCESS, "PdhAddCounterA failed 0x%08x\n", ret);
330 
331  ret = pPdhCollectQueryDataWithTime( NULL, NULL );
332  ok(ret == PDH_INVALID_ARGUMENT, "PdhCollectQueryDataWithTime failed 0x%08x\n", ret);
333 
334  ret = pPdhCollectQueryDataWithTime( query, NULL );
335  ok(ret == PDH_INVALID_ARGUMENT, "PdhCollectQueryDataWithTime failed 0x%08x\n", ret);
336 
337  ret = pPdhCollectQueryDataWithTime( NULL, &time );
338  ok(ret == PDH_INVALID_HANDLE, "PdhCollectQueryDataWithTime failed 0x%08x\n", ret);
339 
340  ret = pPdhCollectQueryDataWithTime( query, &time );
341  ok(ret == ERROR_SUCCESS, "PdhCollectQueryDataWithTime failed 0x%08x\n", ret);
342 
343  ret = PdhCloseQuery( query );
344  ok(ret == ERROR_SUCCESS, "PdhCloseQuery failed 0x%08x\n", ret);
345 }
346 
348 {
349  PDH_STATUS ret;
353 
354  ret = PdhOpenQueryA( NULL, 0, &query );
355  ok(ret == ERROR_SUCCESS, "PdhOpenQueryA failed 0x%08x\n", ret);
356 
357  ret = PdhAddCounterA( query, "\\System\\System Up Time", 0, &counter );
358  ok(ret == ERROR_SUCCESS, "PdhAddCounterA failed 0x%08x\n", ret);
359 
361  ok(ret == PDH_INVALID_ARGUMENT, "PdhGetFormattedCounterValue failed 0x%08x\n", ret);
362 
364  ok(ret == PDH_INVALID_HANDLE, "PdhGetFormattedCounterValue failed 0x%08x\n", ret);
365 
367  ok(ret == PDH_INVALID_ARGUMENT, "PdhGetFormattedCounterValue failed 0x%08x\n", ret);
368 
370  ok(ret == ERROR_SUCCESS, "PdhGetFormattedCounterValue failed 0x%08x\n", ret);
371 
373  ok(ret == ERROR_SUCCESS, "PdhCollectQueryData failed 0x%08x\n", ret);
374 
376  ok(ret == ERROR_SUCCESS, "PdhGetFormattedCounterValue failed 0x%08x\n", ret);
377 
379  ok(ret == ERROR_SUCCESS, "PdhGetFormattedCounterValue failed 0x%08x\n", ret);
380 
382  ok(ret == ERROR_SUCCESS, "PdhGetFormattedCounterValue failed 0x%08x\n", ret);
383 
385  ok(ret == ERROR_SUCCESS, "PdhGetFormattedCounterValue failed 0x%08x\n", ret);
386 
388  ok(ret == ERROR_SUCCESS, "PdhSetCounterScaleFactor failed 0x%08x\n", ret);
389 
391  ok(ret == ERROR_SUCCESS, "PdhGetFormattedCounterValue failed 0x%08x\n", ret);
392 
393  ret = PdhCloseQuery( query );
394  ok(ret == ERROR_SUCCESS, "PdhCloseQuery failed 0x%08x\n", ret);
395 }
396 
397 static void test_PdhGetRawCounterValue( void )
398 {
399  PDH_STATUS ret;
403 
404  ret = PdhOpenQueryA( NULL, 0, &query );
405  ok(ret == ERROR_SUCCESS, "PdhOpenQueryA failed 0x%08x\n", ret);
406 
407  ret = PdhAddCounterA( query, "\\System\\System Up Time", 0, &counter );
408  ok(ret == ERROR_SUCCESS, "PdhAddCounterA failed 0x%08x\n", ret);
409 
411  ok(ret == PDH_INVALID_HANDLE, "PdhGetRawCounterValue failed 0x%08x\n", ret);
412 
414  ok(ret == PDH_INVALID_ARGUMENT, "PdhGetRawCounterValue failed 0x%08x\n", ret);
415 
417  ok(ret == ERROR_SUCCESS, "PdhGetRawCounterValue failed 0x%08x\n", ret);
418  ok(value.CStatus == ERROR_SUCCESS, "expected ERROR_SUCCESS got %x\n", value.CStatus);
419 
421  ok(ret == ERROR_SUCCESS, "PdhCollectQueryData failed 0x%08x\n", ret);
422 
424  ok(ret == ERROR_SUCCESS, "PdhGetRawCounterValue failed 0x%08x\n", ret);
425  ok(value.CStatus == ERROR_SUCCESS, "expected ERROR_SUCCESS got %x\n", value.CStatus);
426 
427  ret = PdhCloseQuery( query );
428  ok(ret == ERROR_SUCCESS, "PdhCloseQuery failed 0x%08x\n", ret);
429 }
430 
431 static void test_PdhSetCounterScaleFactor( void )
432 {
433  PDH_STATUS ret;
436 
437  ret = PdhOpenQueryA( NULL, 0, &query );
438  ok(ret == ERROR_SUCCESS, "PdhOpenQueryA failed 0x%08x\n", ret);
439 
440  ret = PdhAddCounterA( query, "\\System\\System Up Time", 0, &counter );
441  ok(ret == ERROR_SUCCESS, "PdhAddCounterA failed 0x%08x\n", ret);
442 
444  ok(ret == PDH_INVALID_HANDLE, "PdhSetCounterScaleFactor failed 0x%08x\n", ret);
445 
447  ok(ret == PDH_INVALID_HANDLE, "PdhSetCounterScaleFactor failed 0x%08x\n", ret);
448 
450  ok(ret == PDH_INVALID_ARGUMENT, "PdhSetCounterScaleFactor failed 0x%08x\n", ret);
451 
453  ok(ret == PDH_INVALID_ARGUMENT, "PdhSetCounterScaleFactor failed 0x%08x\n", ret);
454 
456  ok(ret == ERROR_SUCCESS, "PdhSetCounterScaleFactor failed 0x%08x\n", ret);
457 
459  ok(ret == ERROR_SUCCESS, "PdhSetCounterScaleFactor failed 0x%08x\n", ret);
460 
461  ret = PdhCloseQuery( query );
462  ok(ret == ERROR_SUCCESS, "PdhCloseQuery failed 0x%08x\n", ret);
463 }
464 
465 static void test_PdhGetCounterTimeBase( void )
466 {
467  PDH_STATUS ret;
470  LONGLONG base;
471 
472  ret = PdhOpenQueryA( NULL, 0, &query );
473  ok(ret == ERROR_SUCCESS, "PdhOpenQueryA failed 0x%08x\n", ret);
474 
475  ret = PdhAddCounterA( query, "\\System\\System Up Time", 0, &counter );
476  ok(ret == ERROR_SUCCESS, "PdhAddCounterA failed 0x%08x\n", ret);
477 
479  ok(ret == PDH_INVALID_ARGUMENT, "PdhGetCounterTimeBase failed 0x%08x\n", ret);
480 
482  ok(ret == PDH_INVALID_HANDLE, "PdhGetCounterTimeBase failed 0x%08x\n", ret);
483 
485  ok(ret == PDH_INVALID_ARGUMENT, "PdhGetCounterTimeBase failed 0x%08x\n", ret);
486 
488  ok(ret == ERROR_SUCCESS, "PdhGetCounterTimeBase failed 0x%08x\n", ret);
489 
490  ret = PdhCloseQuery( query );
491  ok(ret == ERROR_SUCCESS, "PdhCloseQuery failed 0x%08x\n", ret);
492 }
493 
494 static void test_PdhGetCounterInfoA( void )
495 {
496  PDH_STATUS ret;
500  DWORD size;
501 
502  ret = PdhOpenQueryA( NULL, 0, &query );
503  ok(ret == ERROR_SUCCESS, "PdhOpenQueryA failed 0x%08x\n", ret);
504 
505  ret = PdhAddCounterA( query, "\\System\\System Up Time", 0, &counter );
506  ok(ret == ERROR_SUCCESS, "PdhAddCounterA failed 0x%08x\n", ret);
507 
508  ret = PdhGetCounterInfoA( NULL, 0, NULL, NULL );
509  ok(ret == PDH_INVALID_HANDLE || ret == PDH_INVALID_ARGUMENT, "PdhGetCounterInfoA failed 0x%08x\n", ret);
510 
512  ok(ret == PDH_INVALID_ARGUMENT, "PdhGetCounterInfoA failed 0x%08x\n", ret);
513 
515  ok(ret == PDH_INVALID_ARGUMENT, "PdhGetCounterInfoA failed 0x%08x\n", ret);
516 
517  size = sizeof(info) - 1;
519  ok(ret == PDH_MORE_DATA || ret == PDH_INVALID_ARGUMENT, "PdhGetCounterInfoA failed 0x%08x\n", ret);
520 
521  size = sizeof(info);
522  ret = PdhGetCounterInfoA( counter, 0, &size, &info );
523  ok(ret == ERROR_SUCCESS, "PdhGetCounterInfoA failed 0x%08x\n", ret);
524  ok(size == sizeof(info), "PdhGetCounterInfoA failed %d\n", size);
525 
526  ret = PdhGetCounterInfoA( counter, 0, &size, &info );
527  ok(ret == ERROR_SUCCESS, "PdhGetCounterInfoA failed 0x%08x\n", ret);
528  ok(info.lScale == 0, "lScale %d\n", info.lScale);
529 
531  ok(ret == ERROR_SUCCESS, "PdhSetCounterScaleFactor failed 0x%08x\n", ret);
532 
533  ret = PdhGetCounterInfoA( counter, 0, &size, &info );
534  ok(ret == ERROR_SUCCESS, "PdhGetCounterInfoA failed 0x%08x\n", ret);
535  ok(info.lScale == 0, "lScale %d\n", info.lScale);
536 
538  ok(ret == ERROR_SUCCESS, "PdhSetCounterScaleFactor failed 0x%08x\n", ret);
539 
540  ret = PdhGetCounterInfoA( counter, 0, &size, &info );
541  ok(ret == ERROR_SUCCESS, "PdhGetCounterInfoA failed 0x%08x\n", ret);
542  ok(info.lScale == -5, "lScale %d\n", info.lScale);
543 
544  ret = PdhCloseQuery( query );
545  ok(ret == ERROR_SUCCESS, "PdhCloseQuery failed 0x%08x\n", ret);
546 }
547 
548 static void test_PdhGetCounterInfoW( void )
549 {
550  PDH_STATUS ret;
554  DWORD size;
555 
556  ret = PdhOpenQueryW( NULL, 0, &query );
557  ok(ret == ERROR_SUCCESS, "PdhOpenQueryW failed 0x%08x\n", ret);
558 
560  ok(ret == ERROR_SUCCESS, "PdhAddCounterW failed 0x%08x\n", ret);
561 
562  ret = PdhGetCounterInfoW( NULL, 0, NULL, NULL );
563  ok(ret == PDH_INVALID_HANDLE || ret == PDH_INVALID_ARGUMENT, "PdhGetCounterInfoW failed 0x%08x\n", ret);
564 
566  ok(ret == PDH_INVALID_ARGUMENT, "PdhGetCounterInfoW failed 0x%08x\n", ret);
567 
569  ok(ret == PDH_INVALID_ARGUMENT, "PdhGetCounterInfoW failed 0x%08x\n", ret);
570 
571  size = sizeof(info) - 1;
573  ok(ret == PDH_MORE_DATA || ret == PDH_INVALID_ARGUMENT, "PdhGetCounterInfoW failed 0x%08x\n", ret);
574 
575  size = sizeof(info);
576  ret = PdhGetCounterInfoW( counter, 0, &size, &info );
577  ok(ret == ERROR_SUCCESS, "PdhGetCounterInfoW failed 0x%08x\n", ret);
578  ok(size == sizeof(info), "PdhGetCounterInfoW failed %d\n", size);
579 
580  ret = PdhGetCounterInfoW( counter, 0, &size, &info );
581  ok(ret == ERROR_SUCCESS, "PdhGetCounterInfoW failed 0x%08x\n", ret);
582  ok(info.lScale == 0, "lScale %d\n", info.lScale);
583 
585  ok(ret == ERROR_SUCCESS, "PdhSetCounterScaleFactor failed 0x%08x\n", ret);
586 
587  ret = PdhGetCounterInfoW( counter, 0, &size, &info );
588  ok(ret == ERROR_SUCCESS, "PdhGetCounterInfoW failed 0x%08x\n", ret);
589  ok(info.lScale == 0, "lScale %d\n", info.lScale);
590 
592  ok(ret == ERROR_SUCCESS, "PdhSetCounterScaleFactor failed 0x%08x\n", ret);
593 
594  ret = PdhGetCounterInfoW( counter, 0, &size, &info );
595  ok(ret == ERROR_SUCCESS, "PdhGetCounterInfoW failed 0x%08x\n", ret);
596  ok(info.lScale == -5, "lScale %d\n", info.lScale);
597 
598  ret = PdhCloseQuery( query );
599  ok(ret == ERROR_SUCCESS, "PdhCloseQuery failed 0x%08x\n", ret);
600 }
601 
603 {
604  PDH_STATUS ret;
605  DWORD index;
606 
608  ok(ret == PDH_INVALID_ARGUMENT, "PdhLookupPerfIndexByNameA failed 0x%08x\n", ret);
609 
611  ok(ret == PDH_INVALID_ARGUMENT, "PdhLookupPerfIndexByNameA failed 0x%08x\n", ret);
612 
613  ret = PdhLookupPerfIndexByNameA( NULL, "No Counter", &index );
614  ok(ret == PDH_STRING_NOT_FOUND, "PdhLookupPerfIndexByNameA failed 0x%08x\n", ret);
615 
616  ret = PdhLookupPerfIndexByNameA( NULL, "% Processor Time", NULL );
617  ok(ret == PDH_INVALID_ARGUMENT, "PdhLookupPerfIndexByNameA failed 0x%08x\n", ret);
618 
619  ret = PdhLookupPerfIndexByNameA( NULL, "% Processor Time", &index );
620  ok(ret == ERROR_SUCCESS, "PdhLookupPerfIndexByNameA failed 0x%08x\n", ret);
621  ok(index == 6, "PdhLookupPerfIndexByNameA failed %d\n", index);
622 
623  ret = PdhLookupPerfIndexByNameA( NULL, "System Up Time", &index );
624  ok(ret == ERROR_SUCCESS, "PdhLookupPerfIndexByNameA failed 0x%08x\n", ret);
625  ok(index == 674, "PdhLookupPerfIndexByNameA failed %d\n", index);
626 }
627 
629 {
630  PDH_STATUS ret;
631  DWORD index;
632 
633  static const WCHAR no_counter[] = {'N','o',' ','C','o','u','n','t','e','r',0};
634 
636  ok(ret == PDH_INVALID_ARGUMENT, "PdhLookupPerfIndexByNameW failed 0x%08x\n", ret);
637 
639  ok(ret == PDH_INVALID_ARGUMENT, "PdhLookupPerfIndexByNameW failed 0x%08x\n", ret);
640 
641  ret = PdhLookupPerfIndexByNameW( NULL, no_counter, &index );
642  ok(ret == PDH_STRING_NOT_FOUND, "PdhLookupPerfIndexByNameW failed 0x%08x\n", ret);
643 
645  ok(ret == PDH_INVALID_ARGUMENT, "PdhLookupPerfIndexByNameW failed 0x%08x\n", ret);
646 
648  ok(ret == ERROR_SUCCESS, "PdhLookupPerfIndexByNameW failed 0x%08x\n", ret);
649  ok(index == 6, "PdhLookupPerfIndexByNameW failed %d\n", index);
650 
652  ok(ret == ERROR_SUCCESS, "PdhLookupPerfIndexByNameW failed 0x%08x\n", ret);
653  ok(index == 674, "PdhLookupPerfIndexByNameW failed %d\n", index);
654 }
655 
657 {
658  PDH_STATUS ret;
659  char buffer[PDH_MAX_COUNTER_NAME] = "!!";
660  DWORD size;
661 
663  ok(ret == PDH_INVALID_ARGUMENT, "PdhLookupPerfNameByIndexA failed 0x%08x\n", ret);
664 
665  size = 0;
667  ok(ret == PDH_MORE_DATA || ret == PDH_INSUFFICIENT_BUFFER, "PdhLookupPerfNameByIndexA failed 0x%08x\n", ret);
668 
669  size = sizeof(buffer);
671  ok(ret == ERROR_SUCCESS, "PdhLookupPerfNameByIndexA failed 0x%08x\n", ret);
672  ok(!lstrcmpA( buffer, "% Processor Time" ),
673  "PdhLookupPerfNameByIndexA failed, got %s expected \'%% Processor Time\'\n", buffer);
674  ok(size == sizeof("% Processor Time"), "PdhLookupPerfNameByIndexA failed %d\n", size);
675 
676  size = sizeof(buffer);
678  ok(ret == ERROR_SUCCESS, "PdhLookupPerfNameByIndexA failed 0x%08x\n", ret);
679  ok(!lstrcmpA( buffer, "Processor" ),
680  "PdhLookupPerfNameByIndexA failed, got %s expected \'Processor\'\n", buffer);
681  ok(size == sizeof("Processor"), "PdhLookupPerfNameByIndexA failed %d\n", size);
682 
683  size = sizeof(buffer);
686  ret == PDH_MORE_DATA, /* win2k3 */
687  "PdhLookupPerfNameByIndexA failed 0x%08x\n", ret);
688 
689  size = sizeof(buffer);
691  ok(ret == ERROR_SUCCESS, "PdhLookupPerfNameByIndexA failed 0x%08x\n", ret);
692  ok(!lstrcmpA( buffer, "System Up Time" ),
693  "PdhLookupPerfNameByIndexA failed, got %s expected \'System Up Time\'\n", buffer);
694  ok(size == sizeof("System Up Time"), "PdhLookupPerfNameByIndexA failed %d\n", size);
695 }
696 
698 {
699  PDH_STATUS ret;
701  DWORD size;
702 
704  ok(ret == PDH_INVALID_ARGUMENT, "PdhLookupPerfNameByIndexW failed 0x%08x\n", ret);
705 
706  size = 0;
708  ok(ret == PDH_MORE_DATA || ret == PDH_INSUFFICIENT_BUFFER, "PdhLookupPerfNameByIndexW failed 0x%08x\n", ret);
709 
712  ok(ret == ERROR_SUCCESS, "PdhLookupPerfNameByIndexW failed 0x%08x\n", ret);
713  ok(size == ARRAY_SIZE(processor_time), "PdhLookupPerfNameByIndexW failed %d\n", size);
714 
718  ret == PDH_MORE_DATA, /* win2k3 */
719  "PdhLookupPerfNameByIndexW failed 0x%08x\n", ret);
720 
723  ok(ret == ERROR_SUCCESS, "PdhLookupPerfNameByIndexW failed 0x%08x\n", ret);
724  ok(size == ARRAY_SIZE(uptime), "PdhLookupPerfNameByIndexW failed %d\n", size);
725 }
726 
727 static void test_PdhValidatePathA( void )
728 {
729  PDH_STATUS ret;
730 
732  ok(ret == PDH_INVALID_ARGUMENT, "PdhValidatePathA failed 0x%08x\n", ret);
733 
734  ret = PdhValidatePathA( "" );
735  ok(ret == PDH_INVALID_ARGUMENT, "PdhValidatePathA failed 0x%08x\n", ret);
736 
737  ret = PdhValidatePathA( "\\System" );
738  ok(ret == PDH_CSTATUS_BAD_COUNTERNAME, "PdhValidatePathA failed 0x%08x\n", ret);
739 
740  ret = PdhValidatePathA( "System Up Time" );
741  ok(ret == PDH_CSTATUS_BAD_COUNTERNAME, "PdhValidatePathA failed 0x%08x\n", ret);
742 
743  ret = PdhValidatePathA( "\\System\\Nonexistent Counter" );
744  ok(ret == PDH_CSTATUS_NO_COUNTER, "PdhValidatePathA failed 0x%08x\n", ret);
745 
746  ret = PdhValidatePathA( "\\System\\System Up Time" );
747  ok(ret == ERROR_SUCCESS, "PdhValidatePathA failed 0x%08x\n", ret);
748 }
749 
750 static void test_PdhValidatePathW( void )
751 {
752  PDH_STATUS ret;
753 
754  static const WCHAR empty[] = {0};
755  static const WCHAR system[] = {'\\','S','y','s','t','e','m',0};
756 
758  ok(ret == PDH_INVALID_ARGUMENT, "PdhValidatePathW failed 0x%08x\n", ret);
759 
761  ok(ret == PDH_INVALID_ARGUMENT, "PdhValidatePathW failed 0x%08x\n", ret);
762 
764  ok(ret == PDH_CSTATUS_BAD_COUNTERNAME, "PdhValidatePathW failed 0x%08x\n", ret);
765 
767  ok(ret == PDH_CSTATUS_BAD_COUNTERNAME, "PdhValidatePathW failed 0x%08x\n", ret);
768 
770  ok(ret == PDH_CSTATUS_NO_COUNTER, "PdhValidatePathW failed 0x%08x\n", ret);
771 
773  ok(ret == ERROR_SUCCESS, "PdhValidatePathW failed 0x%08x\n", ret);
774 }
775 
776 static void test_PdhValidatePathExA( void )
777 {
778  PDH_STATUS ret;
779 
780  ret = pPdhValidatePathExA( NULL, NULL );
781  ok(ret == PDH_INVALID_ARGUMENT, "PdhValidatePathExA failed 0x%08x\n", ret);
782 
783  ret = pPdhValidatePathExA( NULL, "" );
784  ok(ret == PDH_INVALID_ARGUMENT, "PdhValidatePathExA failed 0x%08x\n", ret);
785 
786  ret = pPdhValidatePathExA( NULL, "\\System" );
787  ok(ret == PDH_CSTATUS_BAD_COUNTERNAME, "PdhValidatePathExA failed 0x%08x\n", ret);
788 
789  ret = pPdhValidatePathExA( NULL, "System Up Time" );
790  ok(ret == PDH_CSTATUS_BAD_COUNTERNAME, "PdhValidatePathExA failed 0x%08x\n", ret);
791 
792  ret = pPdhValidatePathExA( NULL, "\\System\\System Down Time" );
793  ok(ret == PDH_CSTATUS_NO_COUNTER, "PdhValidatePathExA failed 0x%08x\n", ret);
794 
795  ret = pPdhValidatePathExA( NULL, "\\System\\System Up Time" );
796  ok(ret == ERROR_SUCCESS, "PdhValidatePathExA failed 0x%08x\n", ret);
797 }
798 
799 static void test_PdhValidatePathExW( void )
800 {
801  PDH_STATUS ret;
802 
803  static const WCHAR empty[] = {0};
804  static const WCHAR system[] = {'\\','S','y','s','t','e','m',0};
805 
806  ret = pPdhValidatePathExW( NULL, NULL );
807  ok(ret == PDH_INVALID_ARGUMENT, "PdhValidatePathExW failed 0x%08x\n", ret);
808 
809  ret = pPdhValidatePathExW( NULL, empty );
810  ok(ret == PDH_INVALID_ARGUMENT, "PdhValidatePathExW failed 0x%08x\n", ret);
811 
812  ret = pPdhValidatePathExW( NULL, system );
813  ok(ret == PDH_CSTATUS_BAD_COUNTERNAME, "PdhValidatePathExW failed 0x%08x\n", ret);
814 
815  ret = pPdhValidatePathExW( NULL, uptime );
816  ok(ret == PDH_CSTATUS_BAD_COUNTERNAME, "PdhValidatePathExW failed 0x%08x\n", ret);
817 
818  ret = pPdhValidatePathExW( NULL, nonexistent_counter );
819  ok(ret == PDH_CSTATUS_NO_COUNTER, "PdhValidatePathExW failed 0x%08x\n", ret);
820 
821  ret = pPdhValidatePathExW( NULL, system_uptime );
822  ok(ret == ERROR_SUCCESS, "PdhValidatePathExW failed 0x%08x\n", ret);
823 }
824 
825 static void test_PdhCollectQueryDataEx(void)
826 {
830  HANDLE event;
831  BOOL ret;
832  UINT i;
833 
834  status = PdhOpenQueryA( NULL, 0, &query );
835  ok(status == ERROR_SUCCESS, "PdhOpenQuery failed 0x%08x\n", status);
836 
837  event = CreateEventA( NULL, FALSE, FALSE, "winetest" );
838  ok(event != NULL, "CreateEvent failed\n");
839 
840  status = PdhAddCounterA( query, "\\System\\System Up Time", 0, &counter );
841  ok(status == ERROR_SUCCESS, "PdhAddCounterA failed 0x%08x\n", status);
842 
844  ok(status == PDH_INVALID_HANDLE, "PdhCollectQueryDataEx failed 0x%08x\n", status);
845 
847  ok(status == ERROR_SUCCESS, "PdhCollectQueryDataEx failed 0x%08x\n", status);
848 
850  ok(status == ERROR_SUCCESS, "PdhCollectQueryDataEx failed 0x%08x\n", status);
851 
853  ok(status == ERROR_SUCCESS, "PdhCollectQueryData failed 0x%08x\n", status);
854 
855  for (i = 0; i < 3; i++)
856  {
858  {
860 
862  ok(status == ERROR_SUCCESS, "PdhGetFormattedCounterValue failed 0x%08x\n", status);
863 
864  trace( "uptime %s\n", wine_dbgstr_longlong(U(value).largeValue) );
865  }
866  }
867 
868  ret = CloseHandle( event );
869  ok(ret, "CloseHandle failed\n");
870 
872  ok(status == ERROR_SUCCESS, "PdhCloseQuery failed 0x%08x\n", status);
873 }
874 
875 static void test_PdhMakeCounterPathA(void)
876 {
877  PDH_STATUS ret;
879  char buffer[1024];
880  DWORD buflen;
881 
883  ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
884 
885  buflen = 0;
886  ret = PdhMakeCounterPathA(NULL, NULL, &buflen, 0);
887  ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
888 
889  buflen = 0;
890  ret = PdhMakeCounterPathA(NULL, buffer, &buflen, 0);
891  ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
892 
893  buflen = sizeof(buffer);
894  memset(&e, 0, sizeof(e));
895  ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
896  ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
897 
898  buffer[0] = 0;
899  buflen = sizeof(buffer);
900  e.szMachineName = (char *)"machine";
901  ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
902  ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
903  ok(!strcmp(buffer, ""), "expected \"machine\" got %s\n", buffer);
904 
905  buffer[0] = 0;
906  buflen = sizeof(buffer);
907  e.szObjectName = (char *)"object";
908  ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
909  ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
910  ok(!strcmp(buffer, ""), "expected \"machine\" got %s\n", buffer);
911 
912  buffer[0] = 0;
913  buflen = sizeof(buffer);
914  e.szInstanceName = (char *)"instance";
915  ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
916  ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
917  ok(!strcmp(buffer, ""), "expected \"machine\" got %s\n", buffer);
918 
919  buffer[0] = 0;
920  buflen = sizeof(buffer);
921  e.szParentInstance = (char *)"parent";
922  ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
923  ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
924  ok(!strcmp(buffer, ""), "expected \"machine\" got %s\n", buffer);
925 
926  buffer[0] = 0;
927  buflen = sizeof(buffer);
928  e.dwInstanceIndex = 1;
929  ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
930  ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
931  ok(!strcmp(buffer, ""), "expected \"machine\" got %s\n", buffer);
932 
933  buffer[0] = 0;
934  buflen = sizeof(buffer);
935  e.szCounterName = (char *)"counter";
936  ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
937  ok(ret == ERROR_SUCCESS, "PdhMakeCounterPathA failed 0x%08x\n", ret);
938  ok(!strcmp(buffer, "\\\\machine\\object(parent/instance#1)\\counter"),
939  "expected \"\\\\machine\\object(parent/instance#1)\\counter\" got %s\n", buffer);
940 
941  buffer[0] = 0;
942  buflen = sizeof(buffer);
943  e.szParentInstance = NULL;
944  ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
945  ok(ret == ERROR_SUCCESS, "PdhMakeCounterPathA failed 0x%08x\n", ret);
946  ok(!strcmp(buffer, "\\\\machine\\object(instance#1)\\counter"),
947  "expected \"\\\\machine\\object(instance#1)\\counter\" got %s\n", buffer);
948 
949  buffer[0] = 0;
950  buflen = sizeof(buffer);
951  e.szInstanceName = NULL;
952  ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
953  ok(ret == ERROR_SUCCESS, "PdhMakeCounterPathA failed 0x%08x\n", ret);
954  ok(!strcmp(buffer, "\\\\machine\\object\\counter"),
955  "expected \"\\\\machine\\object\\counter\" got %s\n", buffer);
956 
957  buffer[0] = 0;
958  buflen = sizeof(buffer);
959  e.szMachineName = NULL;
960  ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
961  ok(ret == ERROR_SUCCESS, "PdhMakeCounterPathA failed 0x%08x\n", ret);
962  ok(!strcmp(buffer, "\\object\\counter"),
963  "expected \"\\object\\counter\" got %s\n", buffer);
964 
965  buffer[0] = 0;
966  buflen = sizeof(buffer);
967  e.szObjectName = NULL;
968  ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
969  ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
970 }
971 
972 static void test_PdhGetDllVersion(void)
973 {
974  PDH_STATUS ret;
975  DWORD version;
976 
979  broken(ret == ERROR_SUCCESS), /* Vista+ */
980  "Expected PdhGetDllVersion to return PDH_INVALID_ARGUMENT, got %d\n", ret);
981 
983  ok(ret == ERROR_SUCCESS,
984  "Expected PdhGetDllVersion to return ERROR_SUCCESS, got %d\n", ret);
985 
986  if (ret == ERROR_SUCCESS)
987  {
989  version == PDH_VERSION,
990  "Expected version number to be PDH_CVERSION_WIN50 or PDH_VERSION, got %u\n", version);
991  }
992 }
993 
995 {
996  if (!is_lang_english())
997  {
998  skip("An English UI is needed for the pdh tests\n");
999  return;
1000  }
1002 
1005 
1008 
1009  if (pPdhAddEnglishCounterA) test_PdhAddEnglishCounterA();
1010  if (pPdhAddEnglishCounterW) test_PdhAddEnglishCounterW();
1011  if (pPdhCollectQueryDataWithTime) test_PdhCollectQueryDataWithTime();
1012 
1017 
1020 
1023 
1026 
1029 
1030  if (pPdhValidatePathExA) test_PdhValidatePathExA();
1031  if (pPdhValidatePathExW) test_PdhValidatePathExW();
1032 
1036 }
#define PDH_FMT_NOCAP100
Definition: pdh.h:54
static void test_PdhGetCounterInfoA(void)
Definition: pdh.c:494
static void test_PdhAddEnglishCounterA(void)
Definition: pdh.c:233
#define PDH_INSUFFICIENT_BUFFER
Definition: pdhmsg.h:51
PDH_STATUS WINAPI PdhMakeCounterPathA(PDH_COUNTER_PATH_ELEMENTS_A *e, LPSTR buffer, LPDWORD buflen, DWORD flags)
Definition: pdh_main.c:1137
#define CloseHandle
Definition: compat.h:406
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:49
HANDLE PDH_HLOG
Definition: pdh.h:38
static void test_PdhGetCounterTimeBase(void)
Definition: pdh.c:465
PDH_STATUS WINAPI PdhAddCounterA(PDH_HQUERY query, LPCSTR path, DWORD_PTR userdata, PDH_HCOUNTER *counter)
Definition: pdh_main.c:242
#define ERROR_SUCCESS
Definition: deptool.c:10
PDH_STATUS WINAPI PdhLookupPerfNameByIndexW(LPCWSTR machine, DWORD index, LPWSTR buffer, LPDWORD size)
Definition: pdh_main.c:918
static void test_PdhAddCounterA(void)
Definition: pdh.c:135
static const WCHAR percentage_processor_time[]
Definition: pdh.c:83
#define PDH_VERSION
Definition: pdh.h:42
PDH_STATUS WINAPI PdhGetCounterInfoW(PDH_HCOUNTER handle, BOOLEAN text, LPDWORD size, PPDH_COUNTER_INFO_W info)
Definition: pdh_main.c:693
static void test_PdhValidatePathW(void)
Definition: pdh.c:750
#define U(x)
Definition: wordpad.c:44
PDH_STATUS WINAPI PdhCollectQueryDataEx(PDH_HQUERY handle, DWORD interval, HANDLE event)
Definition: pdh_main.c:520
static HINSTANCE hkernel32
Definition: process.c:66
PDH_STATUS WINAPI PdhGetCounterInfoA(PDH_HCOUNTER handle, BOOLEAN text, LPDWORD size, PPDH_COUNTER_INFO_A info)
Definition: pdh_main.c:651
int WINAPI lstrcmpA(LPCSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:18
static void test_PdhLookupPerfNameByIndexA(void)
Definition: pdh.c:656
GLuint buffer
Definition: glext.h:5915
static void test_PdhAddEnglishCounterW(void)
Definition: pdh.c:274
#define PDH_INVALID_ARGUMENT
Definition: pdhmsg.h:46
#define PDH_CSTATUS_NO_COUNTER
Definition: pdhmsg.h:42
#define PDH_STRING_NOT_FOUND
Definition: pdhmsg.h:69
static const WCHAR uptime[]
Definition: pdh.c:76
WORD LANGID
Definition: typedefs.h:79
__u16 time
Definition: mkdosfs.c:366
#define PDH_CVERSION_WIN50
Definition: pdh.h:41
PDH_STATUS WINAPI PdhAddEnglishCounterW(PDH_HQUERY query, LPCWSTR path, DWORD_PTR userdata, PDH_HCOUNTER *counter)
Definition: pdh_main.c:326
static void init_function_ptrs(void)
Definition: pdh.c:64
static BOOL is_lang_english(void)
Definition: pdh.c:44
static void test_PdhValidatePathExW(void)
Definition: pdh.c:799
PDH_STATUS WINAPI PdhGetFormattedCounterValue(PDH_HCOUNTER handle, DWORD format, LPDWORD type, PPDH_FMT_COUNTERVALUE value)
Definition: pdh_main.c:772
PDH_STATUS WINAPI PdhAddEnglishCounterA(PDH_HQUERY query, LPCSTR path, DWORD_PTR userdata, PDH_HCOUNTER *counter)
Definition: pdh_main.c:314
struct _test_info info[]
Definition: SetCursorPos.c:19
#define PDH_INVALID_PATH
Definition: pdhmsg.h:53
PDH_STATUS WINAPI PdhOpenQueryA(LPCSTR source, DWORD_PTR userdata, PDH_HQUERY *query)
Definition: pdh_main.c:957
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
PDH_STATUS WINAPI PdhAddCounterW(PDH_HQUERY hquery, LPCWSTR path, DWORD_PTR userdata, PDH_HCOUNTER *hcounter)
Definition: pdh_main.c:264
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static void test_PdhValidatePathA(void)
Definition: pdh.c:727
unsigned int BOOL
Definition: ntddk_ex.h:94
GLuint base
Definition: 3dtext.c:35
#define e
Definition: ke_i.h:82
PDH_STATUS WINAPI PdhCloseQuery(PDH_HQUERY handle)
Definition: pdh_main.c:397
HANDLE PDH_HQUERY
Definition: pdh.h:36
smooth NULL
Definition: ftsmooth.c:416
static const WCHAR version[]
Definition: asmname.c:66
#define GETFUNCPTR(func)
Definition: pdh.c:38
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventA(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCSTR lpName OPTIONAL)
Definition: synch.c:637
PDH_STATUS WINAPI PdhGetRawCounterValue(PDH_HCOUNTER handle, LPDWORD type, PPDH_RAW_COUNTER value)
Definition: pdh_main.c:806
PDH_STATUS WINAPI PdhRemoveCounter(PDH_HCOUNTER handle)
Definition: pdh_main.c:1001
GLuint index
Definition: glext.h:6031
int __cdecl system(_In_opt_z_ const char *_Command)
GLuint counter
Definition: glext.h:11116
static const WCHAR nonexistent_counter[]
Definition: pdh.c:81
PDH_STATUS WINAPI PdhValidatePathExW(PDH_HLOG source, LPCWSTR path)
Definition: pdh_main.c:1122
int64_t LONGLONG
Definition: typedefs.h:66
PDH_STATUS WINAPI PdhCollectQueryDataWithTime(PDH_HQUERY handle, LONGLONG *timestamp)
Definition: pdh_main.c:579
static void test_PdhGetDllVersion(void)
Definition: pdh.c:972
PDH_STATUS WINAPI PdhGetCounterTimeBase(PDH_HCOUNTER handle, LONGLONG *base)
Definition: pdh_main.c:735
#define PDH_MORE_DATA
Definition: pdhmsg.h:28
#define WAIT_OBJECT_0
Definition: winbase.h:387
GLsizeiptr size
Definition: glext.h:5919
#define trace
Definition: atltest.h:70
LONG PDH_STATUS
Definition: pdh.h:35
__wchar_t WCHAR
Definition: xmlstorage.h:180
PDH_STATUS WINAPI PdhCollectQueryData(PDH_HQUERY handle)
Definition: pdh_main.c:464
#define WINAPI
Definition: msvc.h:6
static void test_PdhSetCounterScaleFactor(void)
Definition: pdh.c:431
unsigned long DWORD
Definition: ntddk_ex.h:95
static void test_PdhValidatePathExA(void)
Definition: pdh.c:776
static PDH_HCOUNTER *static LPCWSTR
Definition: pdh.c:33
#define PDH_FMT_LARGE
Definition: pdh.h:51
PDH_STATUS WINAPI PdhValidatePathExA(PDH_HLOG source, LPCSTR path)
Definition: pdh_main.c:1107
#define LANG_ENGLISH
Definition: nls.h:52
int ret
PDH_STATUS WINAPI PdhLookupPerfNameByIndexA(LPCSTR machine, DWORD index, LPSTR buffer, LPDWORD size)
Definition: pdh_main.c:890
#define index(s, c)
Definition: various.h:29
static const WCHAR system_uptime[]
Definition: pdh.c:79
static void test_PdhOpenQueryW(void)
Definition: pdh.c:111
static DWORD_PTR
Definition: pdh.c:32
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:821
struct _cl_event * event
Definition: glext.h:7739
GLsizei const GLfloat * value
Definition: glext.h:6069
static void test_PdhLookupPerfIndexByNameW(void)
Definition: pdh.c:628
#define broken(x)
Definition: _sntprintf.h:21
#define PDH_CSTATUS_BAD_COUNTERNAME
Definition: pdhmsg.h:49
#define ARRAY_SIZE(a)
Definition: main.h:24
static const WCHAR processor_time[]
Definition: pdh.c:74
#define ok(value,...)
Definition: atltest.h:57
static PDH_STATUS(WINAPI *pPdhAddEnglishCounterA)(PDH_HQUERY
#define PDH_FMT_NOSCALE
Definition: pdh.h:52
unsigned int UINT
Definition: ndis.h:50
BOOL empty
Definition: button.c:170
PDH_STATUS WINAPI PdhValidatePathA(LPCSTR path)
Definition: pdh_main.c:1051
#define PDH_FMT_1000
Definition: pdh.h:53
static void test_PdhGetCounterInfoW(void)
Definition: pdh.c:548
#define skip(...)
Definition: atltest.h:64
PDH_STATUS WINAPI PdhSetCounterScaleFactor(PDH_HCOUNTER handle, LONG factor)
Definition: pdh_main.c:1024
#define PDH_NO_DATA
Definition: pdhmsg.h:31
static LPCSTR
Definition: pdh.c:32
#define PDH_INVALID_HANDLE
Definition: pdhmsg.h:45
static void test_PdhOpenQueryA(void)
Definition: pdh.c:87
static HMODULE pdh
Definition: pdh.c:30
static void test_PdhGetRawCounterValue(void)
Definition: pdh.c:397
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:41
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
#define GetProcAddress(x, y)
Definition: compat.h:418
LANGID WINAPI GetUserDefaultLangID(void)
Definition: lang.c:734
static void test_PdhLookupPerfNameByIndexW(void)
Definition: pdh.c:697
START_TEST(pdh)
Definition: pdh.c:994
#define PDH_MAX_COUNTER_NAME
Definition: pdh.h:47
static void test_PdhGetFormattedCounterValue(void)
Definition: pdh.c:347
PDH_STATUS WINAPI PdhGetDllVersion(LPDWORD version)
Definition: pdh_main.c:759
#define INFINITE
Definition: serial.h:102
PDH_STATUS WINAPI PdhLookupPerfIndexByNameW(LPCWSTR machine, LPCWSTR name, LPDWORD index)
Definition: pdh_main.c:863
PDH_STATUS WINAPI PdhValidatePathW(LPCWSTR path)
Definition: pdh_main.c:1077
#define memset(x, y, z)
Definition: compat.h:39
static SERVICE_STATUS status
Definition: service.c:31
static void test_PdhLookupPerfIndexByNameA(void)
Definition: pdh.c:602
GLenum query
Definition: glext.h:7781
static void test_PdhAddCounterW(void)
Definition: pdh.c:184
static void test_PdhMakeCounterPathA(void)
Definition: pdh.c:875
PDH_STATUS WINAPI PdhOpenQueryW(LPCWSTR source, DWORD_PTR userdata, PDH_HQUERY *handle)
Definition: pdh_main.c:975
static void test_PdhCollectQueryDataWithTime(void)
Definition: pdh.c:315
PDH_STATUS WINAPI PdhLookupPerfIndexByNameA(LPCSTR machine, LPCSTR name, LPDWORD index)
Definition: pdh_main.c:838
static void test_PdhCollectQueryDataEx(void)
Definition: pdh.c:825
#define PRIMARYLANGID(l)
Definition: nls.h:16
Definition: ps.c:97