From 504e7c2ff7ec1c4e2ec648aa675460856c30ce7b Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Sat, 29 Sep 2007 21:05:53 +0200 Subject: [PATCH] pdh: Implement PdhValidatePath{, Ex}{A, W}. --- dlls/pdh/pdh.spec | 8 +++--- dlls/pdh/pdh_main.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++ include/pdh.h | 7 +++++ include/pdhmsg.h | 1 + 4 files changed, 86 insertions(+), 4 deletions(-) diff --git a/dlls/pdh/pdh.spec b/dlls/pdh/pdh.spec index c28d2a86bcc..795a45eaee0 100644 --- a/dlls/pdh/pdh.spec +++ b/dlls/pdh/pdh.spec @@ -137,10 +137,10 @@ @ stub PdhUpdateLogA @ stub PdhUpdateLogFileCatalog @ stub PdhUpdateLogW -@ stub PdhValidatePathA -@ stub PdhValidatePathExA -@ stub PdhValidatePathExW -@ stub PdhValidatePathW +@ stdcall PdhValidatePathA(str) +@ stdcall PdhValidatePathExA(ptr str) +@ stdcall PdhValidatePathExW(ptr wstr) +@ stdcall PdhValidatePathW(wstr) @ stub PdhVbAddCounter @ stub PdhVbCreateCounterPathList @ stub PdhVbGetCounterPathElements diff --git a/dlls/pdh/pdh_main.c b/dlls/pdh/pdh_main.c index 52536208db4..e49e64e5cf8 100644 --- a/dlls/pdh/pdh_main.c +++ b/dlls/pdh/pdh_main.c @@ -700,3 +700,77 @@ PDH_STATUS WINAPI PdhSetCounterScaleFactor( PDH_HCOUNTER handle, LONG factor ) counter->scale = factor; return ERROR_SUCCESS; } + +/*********************************************************************** + * PdhValidatePathA (PDH.@) + */ +PDH_STATUS WINAPI PdhValidatePathA( LPCSTR path ) +{ + PDH_STATUS ret; + WCHAR *pathW; + + TRACE("%s\n", debugstr_a(path)); + + if (!path) return PDH_INVALID_ARGUMENT; + if (!(pathW = pdh_strdup_aw( path ))) return PDH_MEMORY_ALLOCATION_FAILURE; + + ret = PdhValidatePathW( pathW ); + + pdh_free( pathW ); + return ret; +} + +static PDH_STATUS validate_path( LPCWSTR path ) +{ + if (!path || !*path) return PDH_INVALID_ARGUMENT; + if (*path++ != '\\' || !strchrW( path, '\\' )) return PDH_CSTATUS_BAD_COUNTERNAME; + return ERROR_SUCCESS; + } + +/*********************************************************************** + * PdhValidatePathW (PDH.@) + */ +PDH_STATUS WINAPI PdhValidatePathW( LPCWSTR path ) +{ + PDH_STATUS ret; + unsigned int i; + + TRACE("%s\n", debugstr_w(path)); + + if ((ret = validate_path( path ))) return ret; + + for (i = 0; i < sizeof(counter_sources) / sizeof(counter_sources[0]); i++) + if (pdh_match_path( counter_sources[i].path, path )) return ERROR_SUCCESS; + + return PDH_CSTATUS_NO_COUNTER; +} + +/*********************************************************************** + * PdhValidatePathExA (PDH.@) + */ +PDH_STATUS WINAPI PdhValidatePathExA( PDH_HLOG source, LPCSTR path ) +{ + TRACE("%p %s\n", source, debugstr_a(path)); + + if (source) + { + FIXME("log file data source not supported\n"); + return ERROR_SUCCESS; + } + return PdhValidatePathA( path ); +} + +/*********************************************************************** + * PdhValidatePathExW (PDH.@) + */ +PDH_STATUS WINAPI PdhValidatePathExW( PDH_HLOG source, LPCWSTR path ) +{ + TRACE("%p %s\n", source, debugstr_w(path)); + + if (source) + { + FIXME("log file data source not supported\n"); + return ERROR_SUCCESS; + } + return PdhValidatePathW( path ); +} diff --git a/include/pdh.h b/include/pdh.h index a392096cd2f..3aff6db154b 100644 --- a/include/pdh.h +++ b/include/pdh.h @@ -35,6 +35,7 @@ extern "C" { typedef LONG PDH_STATUS; typedef HANDLE PDH_HQUERY; typedef HANDLE PDH_HCOUNTER; +typedef HANDLE PDH_HLOG; #define PDH_MAX_SCALE 7 #define PDH_MIN_SCALE (-7) @@ -190,6 +191,12 @@ PDH_STATUS WINAPI PdhOpenQueryW(LPCWSTR, DWORD_PTR, PDH_HQUERY *); #define PdhOpenQuery WINELIB_NAME_AW(PdhOpenQuery) PDH_STATUS WINAPI PdhRemoveCounter(PDH_HCOUNTER); PDH_STATUS WINAPI PdhSetCounterScaleFactor(PDH_HCOUNTER, LONG); +PDH_STATUS WINAPI PdhValidatePathA(LPCSTR); +PDH_STATUS WINAPI PdhValidatePathW(LPCWSTR); +#define PdhValidatePath WINELIB_NAME_AW(PdhValidatePath) +PDH_STATUS WINAPI PdhValidatePathExA(PDH_HLOG, LPCSTR); +PDH_STATUS WINAPI PdhValidatePathExW(PDH_HLOG, LPCWSTR); +#define PdhValidatePathEx WINELIB_NAME_AW(PdhValidatePathEx) #ifdef __cplusplus } diff --git a/include/pdhmsg.h b/include/pdhmsg.h index 00563a0a455..bee466e228c 100644 --- a/include/pdhmsg.h +++ b/include/pdhmsg.h @@ -30,6 +30,7 @@ #define PDH_MEMORY_ALLOCATION_FAILURE 0xc0000bbb #define PDH_INVALID_HANDLE 0xc0000bbc #define PDH_INVALID_ARGUMENT 0xc0000bbd +#define PDH_CSTATUS_BAD_COUNTERNAME 0xc0000bc0 #define PDH_INSUFFICIENT_BUFFER 0xc0000bc2 #define PDH_INVALID_DATA 0xc0000bc6 #define PDH_STRING_NOT_FOUND 0xc0000bd4 -- 2.11.4.GIT