Функция PdhExpandCounterPathA (pdh.h)
Проверяет указанный компьютер (или локальный компьютер, если он не указан) на наличие счетчиков и экземпляров счетчиков, соответствующих строкам с подстановочными знаками в пути к счетчику.
Синтаксис
PDH_FUNCTION PdhExpandCounterPathA(
[in] LPCSTR szWildCardPath,
[out] PZZSTR mszExpandedPathList,
[in, out] LPDWORD pcchPathListLength
);
Параметры
[in] szWildCardPath
Строка, завершающаяся значением NULL, содержащая путь счетчика для развертывания. Функция выполняет поиск совпадений на компьютере, указанном в пути. Если путь не указывает компьютер, функция выполняет поиск на локальном компьютере. Максимальная длина пути счетчика составляет PDH_MAX_COUNTER_PATH.
[out] mszExpandedPathList
Буфер, выделенный вызывающим объектом, который получает список развернутых путей счетчиков, соответствующих спецификации с подстановочными знаками в szWildCardPath. Каждый путь счетчика в этом списке завершается символом NULL . Список завершается двумя символами NULL . Установите значение NULL , если pcchPathListLength равно нулю.
[in, out] pcchPathListLength
Размер буфера mszExpandedPathList в TCHAR. Если значение равно нулю при входе, функция возвращает PDH_MORE_DATA и задает для этого параметра требуемый размер буфера. Если буфер больше требуемого размера, функция задает для этого параметра фактический размер используемого буфера. Если указанный размер входных данных больше нуля, но меньше требуемого размера, не следует полагаться на возвращаемый размер для перераспределения буфера.
Возвращаемое значение
Если функция выполняется успешно, она возвращает ERROR_SUCCESS.
Если функция завершается ошибкой, возвращаемым значением является системный код ошибки или код ошибки PDH.
Код возврата | Описание |
---|---|
|
Буфер mszExpandedPathList слишком мал, чтобы содержать список путей. Это возвращаемое значение ожидается, если pcchPathListLength равно нулю на входных данных. Если указанный размер входных данных больше нуля, но меньше требуемого размера, не следует полагаться на возвращаемый размер для перераспределения буфера. |
|
Недействительный параметр. Например, в некоторых выпусках эта ошибка может возникнуть, если указанный размер входных данных больше нуля, но меньше требуемого размера. |
|
Не удалось выделить память для поддержки этой функции. |
Комментарии
Эту функцию следует вызывать дважды: первый раз, чтобы получить требуемый размер буфера (задайте для mszExpandedPathListзначение NULL , а pcchPathListLength — 0), а второй раз — для получения данных.
Общий формат пути счетчика выглядит следующим образом:
\computer\object(parent/instance#index)\counter
Родительские компоненты, компоненты экземпляра, индекса и счетчика пути счетчика могут содержать допустимое имя или подстановочный знак. Компоненты компьютера, родительского компонента, экземпляра и индекса не являются обязательными для всех счетчиков.
Пути счетчиков, которые необходимо использовать, определяются самим счетчиком. Например, объект LogicalDisk имеет индекс экземпляра, поэтому необходимо указать #index или подстановочный знак. Поэтому можно использовать следующий формат:
\LogicalDisk(/#*)*
Для сравнения, объекту Process не требуется индекс экземпляра. Поэтому можно использовать следующий формат:
\Process(*)\ID Process
Ниже приведен список возможных форматов.
- \\computer\object(parent/instance#index)\counter
- \\computer\object(parent/instance)\counter
- \\computer\object(instance#index)\counter
- \\computer\object(instance)\counter
- \\computer\object\counter
- \object(parent/instance#index)\counter
- \object(parent/instance)\counter
- \object(instance#index)\counter
- \object(instance)\counter
- \object\counter
Если в имени экземпляра указан подстановочный знак, все экземпляры указанного объекта и родительского объекта будут возвращены, если все имена экземпляров, соответствующие указанному индексу, соответствуют подстановочным знакам.
Если в имени счетчика указан подстановочный знак, возвращаются все счетчики указанного объекта.
Совпадения со строкой пути частичного счетчика (например, "pro*") не поддерживаются.
Примеры
В следующем примере показано, как выполнять эту функцию.
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <pdh.h>
#include <pdhmsg.h>
#pragma comment(lib, "pdh.lib")
CONST PWSTR WILDCARD_PATH = L"\\Processor(*)\\*";
void wmain(void)
{
PDH_STATUS Status;
PWSTR EndOfPaths;
PWSTR Paths = NULL;
DWORD BufferSize = 0;
Status = PdhExpandCounterPath(WILDCARD_PATH, Paths, &BufferSize);
while (Status == PDH_MORE_DATA)
{
Paths = (PWSTR)malloc(BufferSize * sizeof(WCHAR));
Status = PdhExpandCounterPath(WILDCARD_PATH, Paths, &BufferSize);
}
if (Status != ERROR_SUCCESS)
{
wprintf(L"\nPdhExpandCounterPath failed with status 0x%x", Status);
goto Cleanup;
}
if (Paths == NULL)
{
wprintf(L"\nThe counter path %s cannot be expanded.", WILDCARD_PATH);
goto Cleanup;
}
EndOfPaths = Paths + BufferSize;
// On Vista and later operating systems, the buffer is terminated with two
// null-terminator characters; however, on earlier systems, the buffer is
// not terminated with two null-terminator characters. This covers both cases.
for (PWSTR p = Paths; ((p != EndOfPaths) && (*p != L'\0')); p += wcslen(p) + 1)
{
wprintf(L"\n%s", p);
}
Cleanup:
if (Paths)
{
free(Paths);
}
}
Примечание
Заголовок pdh.h определяет PdhExpandCounterPath в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | pdh.h |
Библиотека | Pdh.lib |
DLL | Pdh.dll |