in helpers/windows/pdh/pdh_query_windows.go [234:277]
func (q *Query) ExpandWildCardPath(wildCardPath string) ([]string, error) {
if wildCardPath == "" {
return nil, errors.New("no query path given")
}
utfPath, err := syscall.UTF16PtrFromString(wildCardPath)
if err != nil {
return nil, err
}
var expdPaths []uint16
// PdhExpandWildCardPath will not return the counter paths for windows 32 bit systems but PdhExpandCounterPath will.
if runtime.GOARCH == "386" {
if expdPaths, err = PdhExpandCounterPath(utfPath); err != nil {
return nil, err
}
if expdPaths == nil {
return nil, errors.New("no counter paths found")
}
return UTF16ToStringArray(expdPaths), nil
} else {
if expdPaths, err = PdhExpandWildCardPath(utfPath); err != nil {
if err == PDH_MORE_DATA {
if expdPaths, err = PdhExpandWildCardPath(utfPath); err != nil {
return nil, err
}
} else {
return nil, err
}
}
paths := UTF16ToStringArray(expdPaths)
// in several cases ExpandWildCardPath win32 api seems to return initial wildcard without any errors, adding some waiting time between the 2 ExpandWildCardPath api calls seems to be succesfull but that will delay data retrieval
// A call is triggered again
if len(paths) == 1 && strings.Contains(paths[0], "*") && paths[0] == wildCardPath {
expdPaths, err = PdhExpandWildCardPath(utfPath)
if err == nil {
return paths, err
}
} else {
return paths, err
}
}
return nil, PdhErrno(syscall.ERROR_NOT_FOUND)
}