xref: /reactos/sdk/include/psdk/pdh.h (revision 4561998a)
1 /*
2  * 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 #ifndef _PDH_H_
22 #define _PDH_H_
23 
24 #ifdef __WINESRC__
25 # include <windef.h>
26 #else
27 # include <windows.h>
28 #endif
29 #include <winperf.h>
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 typedef LONG   PDH_STATUS;
36 typedef HANDLE PDH_HQUERY;
37 typedef HANDLE PDH_HCOUNTER;
38 typedef HANDLE PDH_HLOG;
39 
40 #define PDH_CVERSION_WIN40  0x0400
41 #define PDH_CVERSION_WIN50  0x0500
42 #define PDH_VERSION         0x0503
43 
44 #define PDH_MAX_SCALE 7
45 #define PDH_MIN_SCALE (-7)
46 
47 #define PDH_MAX_COUNTER_NAME    1024
48 
49 #define PDH_FMT_LONG        0x00000100
50 #define PDH_FMT_DOUBLE      0x00000200
51 #define PDH_FMT_LARGE       0x00000400
52 #define PDH_FMT_NOSCALE     0x00001000
53 #define PDH_FMT_1000        0x00002000
54 #define PDH_FMT_NOCAP100    0x00008000
55 
56 #define DATA_SOURCE_REGISTRY    0x00000001
57 #define DATA_SOURCE_LOGFILE     0x00000002
58 #define DATA_SOURCE_WBEM        0x00000004
59 
60 typedef struct _PDH_FMT_COUNTERVALUE
61 {
62     DWORD CStatus;
63     union
64     {
65         LONG     longValue;
66         double   doubleValue;
67         LONGLONG largeValue;
68         LPCSTR   AnsiStringValue;
69         LPCWSTR  WideStringValue;
70     } DUMMYUNIONNAME;
71 } PDH_FMT_COUNTERVALUE, *PPDH_FMT_COUNTERVALUE;
72 
73 typedef struct _PDH_RAW_COUNTER
74 {
75     DWORD    CStatus;
76     FILETIME TimeStamp;
77     LONGLONG FirstValue;
78     LONGLONG SecondValue;
79     DWORD    MultiCount;
80 } PDH_RAW_COUNTER, *PPDH_RAW_COUNTER;
81 
82 typedef struct _PDH_COUNTER_PATH_ELEMENTS_A
83 {
84     LPSTR szMachineName;
85     LPSTR szObjectName;
86     LPSTR szInstanceName;
87     LPSTR szParentInstance;
88     DWORD dwInstanceIndex;
89     LPSTR szCounterName;
90 } PDH_COUNTER_PATH_ELEMENTS_A, *PPDH_COUNTER_PATH_ELEMENTS_A;
91 
92 typedef struct _PDH_COUNTER_PATH_ELEMENTS_W
93 {
94     LPWSTR szMachineName;
95     LPWSTR szObjectName;
96     LPWSTR szInstanceName;
97     LPWSTR szParentInstance;
98     DWORD  dwInstanceIndex;
99     LPWSTR szCounterName;
100 } PDH_COUNTER_PATH_ELEMENTS_W, *PPDH_COUNTER_PATH_ELEMENTS_W;
101 
102 typedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_A
103 {
104     LPSTR szMachineName;
105     GUID  ObjectGUID;
106     DWORD dwItemId;
107     LPSTR szInstanceName;
108 } PDH_DATA_ITEM_PATH_ELEMENTS_A, *PPDH_DATA_ITEM_PATH_ELEMENTS_A;
109 
110 typedef struct _PDH_DATA_ITEM_PATH_ELEMENTS_W
111 {
112     LPWSTR szMachineName;
113     GUID   ObjectGUID;
114     DWORD  dwItemId;
115     LPWSTR szInstanceName;
116 } PDH_DATA_ITEM_PATH_ELEMENTS_W, *PPDH_DATA_ITEM_PATH_ELEMENTS_W;
117 
118 typedef struct _PDH_COUNTER_INFO_A
119 {
120     DWORD     dwLength;
121     DWORD     dwType;
122     DWORD     CVersion;
123     DWORD     CStatus;
124     LONG      lScale;
125     LONG      lDefaultScale;
126     DWORD_PTR dwUserData;
127     DWORD_PTR dwQueryUserData;
128     LPSTR     szFullPath;
129     union
130     {
131         PDH_DATA_ITEM_PATH_ELEMENTS_A DataItemPath;
132         PDH_COUNTER_PATH_ELEMENTS_A   CounterPath;
133         struct
134         {
135             LPSTR szMachineName;
136             LPSTR szObjectName;
137             LPSTR szInstanceName;
138             LPSTR szParentInstance;
139             DWORD dwInstanceIndex;
140             LPSTR szCounterName;
141         } DUMMYSTRUCTNAME;
142     } DUMMYUNIONNAME;
143     LPSTR szExplainText;
144     DWORD DataBuffer[1];
145 } PDH_COUNTER_INFO_A, *PPDH_COUNTER_INFO_A;
146 
147 typedef struct _PDH_COUNTER_INFO_W
148 {
149     DWORD     dwLength;
150     DWORD     dwType;
151     DWORD     CVersion;
152     DWORD     CStatus;
153     LONG      lScale;
154     LONG      lDefaultScale;
155     DWORD_PTR dwUserData;
156     DWORD_PTR dwQueryUserData;
157     LPWSTR    szFullPath;
158     union
159     {
160         PDH_DATA_ITEM_PATH_ELEMENTS_W DataItemPath;
161         PDH_COUNTER_PATH_ELEMENTS_W   CounterPath;
162         struct
163         {
164             LPWSTR szMachineName;
165             LPWSTR szObjectName;
166             LPWSTR szInstanceName;
167             LPWSTR szParentInstance;
168             DWORD  dwInstanceIndex;
169             LPWSTR szCounterName;
170         } DUMMYSTRUCTNAME;
171     } DUMMYUNIONNAME;
172     LPWSTR szExplainText;
173     DWORD DataBuffer[1];
174 } PDH_COUNTER_INFO_W, *PPDH_COUNTER_INFO_W;
175 
176 PDH_STATUS WINAPI PdhAddCounterA(PDH_HQUERY, LPCSTR, DWORD_PTR, PDH_HCOUNTER *);
177 PDH_STATUS WINAPI PdhAddCounterW(PDH_HQUERY, LPCWSTR, DWORD_PTR, PDH_HCOUNTER *);
178 #define    PdhAddCounter WINELIB_NAME_AW(PdhAddCounter)
179 PDH_STATUS WINAPI PdhAddEnglishCounterA(PDH_HQUERY, LPCSTR, DWORD_PTR, PDH_HCOUNTER *);
180 PDH_STATUS WINAPI PdhAddEnglishCounterW(PDH_HQUERY, LPCWSTR, DWORD_PTR, PDH_HCOUNTER *);
181 #define    PdhAddEnglishCounter WINELIB_NAME_AW(PdhAddEnglishCounter)
182 PDH_STATUS WINAPI PdhCloseQuery(PDH_HQUERY);
183 PDH_STATUS WINAPI PdhCollectQueryData(PDH_HQUERY);
184 PDH_STATUS WINAPI PdhCollectQueryDataEx(PDH_HQUERY, DWORD, HANDLE);
185 PDH_STATUS WINAPI PdhCollectQueryDataWithTime(PDH_HQUERY,LONGLONG *);
186 PDH_STATUS WINAPI PdhEnumObjectItemsA(LPCSTR, LPCSTR, LPCSTR, LPSTR, LPDWORD, LPSTR, LPDWORD, DWORD, DWORD);
187 PDH_STATUS WINAPI PdhEnumObjectItemsW(LPCWSTR, LPCWSTR, LPCWSTR, LPWSTR, LPDWORD, LPWSTR, LPDWORD, DWORD, DWORD);
188 #define    PdhEnumObjectItems WINELIB_NAME_AW(PdhEnumObjectItems)
189 PDH_STATUS WINAPI PdhGetCounterInfoA(PDH_HCOUNTER, BOOLEAN, LPDWORD, PPDH_COUNTER_INFO_A);
190 PDH_STATUS WINAPI PdhGetCounterInfoW(PDH_HCOUNTER, BOOLEAN, LPDWORD, PPDH_COUNTER_INFO_W);
191 #define    PdhGetCounterInfo WINELIB_NAME_AW(PdhGetCounterInfo)
192 PDH_STATUS WINAPI PdhGetCounterTimeBase(PDH_HCOUNTER, LONGLONG *);
193 PDH_STATUS WINAPI PdhGetDllVersion(LPDWORD);
194 PDH_STATUS WINAPI PdhGetFormattedCounterValue(PDH_HCOUNTER, DWORD, LPDWORD, PPDH_FMT_COUNTERVALUE);
195 PDH_STATUS WINAPI PdhGetRawCounterValue(PDH_HCOUNTER, LPDWORD, PPDH_RAW_COUNTER);
196 PDH_STATUS WINAPI PdhLookupPerfIndexByNameA(LPCSTR, LPCSTR, LPDWORD);
197 PDH_STATUS WINAPI PdhLookupPerfIndexByNameW(LPCWSTR, LPCWSTR, LPDWORD);
198 #define    PdhLookupPerfIndexByName WINELIB_NAME_AW(PdhLookupPerfIndexByName)
199 PDH_STATUS WINAPI PdhLookupPerfNameByIndexA(LPCSTR, DWORD, LPSTR, LPDWORD);
200 PDH_STATUS WINAPI PdhLookupPerfNameByIndexW(LPCWSTR, DWORD, LPWSTR, LPDWORD);
201 #define    PdhLookupPerfNameByIndex WINELIB_NAME_AW(PdhLookupPerfNameByIndex)
202 PDH_STATUS WINAPI PdhMakeCounterPathA(PDH_COUNTER_PATH_ELEMENTS_A *, LPSTR, LPDWORD, DWORD);
203 PDH_STATUS WINAPI PdhMakeCounterPathW(PDH_COUNTER_PATH_ELEMENTS_W *, LPWSTR, LPDWORD, DWORD);
204 #define    PdhMakeCounterPath WINELIB_NAME_AW(PdhMakeCounterPath)
205 PDH_STATUS WINAPI PdhOpenQueryA(LPCSTR, DWORD_PTR, PDH_HQUERY *);
206 PDH_STATUS WINAPI PdhOpenQueryW(LPCWSTR, DWORD_PTR, PDH_HQUERY *);
207 #define    PdhOpenQuery WINELIB_NAME_AW(PdhOpenQuery)
208 PDH_STATUS WINAPI PdhRemoveCounter(PDH_HCOUNTER);
209 PDH_STATUS WINAPI PdhSetCounterScaleFactor(PDH_HCOUNTER, LONG);
210 PDH_STATUS WINAPI PdhSetDefaultRealTimeDataSource(DWORD);
211 PDH_STATUS WINAPI PdhValidatePathA(LPCSTR);
212 PDH_STATUS WINAPI PdhValidatePathW(LPCWSTR);
213 #define    PdhValidatePath WINELIB_NAME_AW(PdhValidatePath)
214 PDH_STATUS WINAPI PdhValidatePathExA(PDH_HLOG, LPCSTR);
215 PDH_STATUS WINAPI PdhValidatePathExW(PDH_HLOG, LPCWSTR);
216 #define    PdhValidatePathEx WINELIB_NAME_AW(PdhValidatePathEx)
217 
218 #ifdef __cplusplus
219 }
220 #endif
221 
222 #endif /* _PDH_H_ */
223