Коды ошибок вспомогательного приложения для получения данных о производительности

Все вспомогательные функции данных производительности (PDH) возвращают значение типа PDH_STATUS. Если функция выполнена успешно, возвращается ERROR_SUCCESSзначение. В противном случае функция возвращает системный код ошибки или код ошибки PDH. Чтобы получить текст описания ошибки в приложении, используйте функцию FormatMessage , как показано в следующем примере.

#include <windows.h>
#include <stdio.h>
#include <pdhmsg.h>

void main(void)
{
    HANDLE hPdhLibrary = NULL;
    LPWSTR pMessage = NULL;
    DWORD dwErrorCode = PDH_PLA_ERROR_ALREADY_EXISTS;

    hPdhLibrary = LoadLibrary(L"pdh.dll");
    if (NULL == hPdhLibrary)
    {
        wprintf(L"LoadLibrary failed with %lu\n", GetLastError());
        return;
    }

    if (!FormatMessage(FORMAT_MESSAGE_FROM_HMODULE |
                       FORMAT_MESSAGE_ALLOCATE_BUFFER |
                       FORMAT_MESSAGE_IGNORE_INSERTS,
                       hPdhLibrary,
                       dwErrorCode,
                       0,
                       (LPWSTR)&pMessage,
                       0,
                       NULL))
    {
        wprintf(L"Format message failed with 0x%x\n", GetLastError());
        return;
    }

    wprintf(L"Formatted message: %ls\n", pMessage);
    LocalFree(pMessage);
}

Для функций сбора и форматирования данных важно помнить, что возвращаемое значение функции указывает на успешность или ошибку вызова функции, а не обязательно для данных счетчика. Всегда проверка член CStatus возвращаемого значения счетчика, чтобы убедиться, что возвращенные данные допустимы перед использованием. Если значение элемента CStatus не указывает на успех, не используйте данные.

В следующей таблице приведен список кодов ошибок, относящихся к PDH. Эти значения определены в файле заголовка pdhmsg.h .

Код ошибки Description
0x00000000 (PDH_CSTATUS_VALID_DATA) Возвращаемые данные допустимы.
0x00000001 (PDH_CSTATUS_NEW_DATA) Возвращаемое значение данных является допустимым и отличается от последнего примера.
0x800007D0 (PDH_CSTATUS_NO_MACHINE) Не удается подключиться к указанному компьютеру или компьютер находится в автономном режиме.
0x800007D1 (PDH_CSTATUS_NO_INSTANCE) Указанный экземпляр отсутствует.
0x800007D2 (PDH_MORE_DATA) Существует больше данных для возврата, чем в предоставленном буфере. Выделите больший буфер и снова вызовите функцию.
0x800007D3 (PDH_CSTATUS_ITEM_NOT_VALIDATED) Элемент данных добавлен в запрос, но не был проверен и недоступен. Другие сведения о состоянии этого элемента данных недоступны.
0x800007D4 (PDH_RETRY) Выбранная операция должна быть извлечена.
0x800007D5 (PDH_NO_DATA) Нет возвращаемых данных.
0x800007D6 (PDH_CALC_NEGATIVE_DENOMINATOR) Обнаружен счетчик с отрицательным значением знаменателя.
0x800007D7 (PDH_CALC_NEGATIVE_TIMEBASE) Обнаружен счетчик с отрицательным базовым значением времени.
0x800007D8 (PDH_CALC_NEGATIVE_VALUE) Обнаружен счетчик с отрицательным значением.
0x800007D9 (PDH_DIALOG_CANCELLED) Пользователь отменил диалоговое окно.
0x800007DA (PDH_END_OF_LOG_FILE) Был достигнут конец файла журнала.
0x800007DB (PDH_ASYNC_QUERY_TIMEOUT) Время ожидания завершения потока асинхронной коллекции счетчиков произошло.
0x800007DC (PDH_CANNOT_SET_DEFAULT_REALTIME_DATASOURCE) Не удается изменить источник данных по умолчанию в режиме реального времени. Существуют сеансы запросов в режиме реального времени, собирающие данные счетчика.
0xC0000BB8 (PDH_CSTATUS_NO_OBJECT) Указанный объект не найден в системе.
0xC0000BB9 (PDH_CSTATUS_NO_COUNTER) Не удалось найти указанный счетчик.
0xC0000BBA (PDH_CSTATUS_INVALID_DATA) Возвращаемые данные недопустимы.
0xC0000BBB (PDH_MEMORY_ALLOCATION_FAILURE) Функция PDH не могла выделить достаточно временной памяти для завершения операции. Закройте некоторые приложения или расширьте файл страницы и повторите функцию.
0xC0000BBC (PDH_INVALID_HANDLE) Дескриптор не является допустимым объектом PDH.
0xC0000BBD (PDH_INVALID_ARGUMENT) Обязательный аргумент отсутствует или неверный.
0xC0000BBE (PDH_FUNCTION_NOT_FOUND) Не удалось найти указанную функцию.
0xC0000BBF (PDH_CSTATUS_NO_COUNTERNAME) Счетчик не указан.
0xC0000BC0 (PDH_CSTATUS_BAD_COUNTERNAME) Не удается проанализировать путь счетчика. Проверьте формат и синтаксис указанного пути.
0xC0000BC1 (PDH_INVALID_BUFFER) Буфер, переданный вызывающим объектом, недопустим.
0xC0000BC2 (PDH_INSUFFICIENT_BUFFER) Запрошенные данные больше, чем предоставленный буфер. Не удалось вернуть запрошенные данные.
0xC0000BC3 (PDH_CANNOT_CONNECT_MACHINE) Не удается подключиться к запрошенной компьютеру.
0xC0000BC4 (PDH_INVALID_PATH) Не удалось интерпретировать указанный путь счетчика.
0xC0000BC5 (PDH_INVALID_INSTANCE) Не удалось прочитать имя экземпляра из указанного пути счетчика.
0xC0000BC6 (PDH_INVALID_DATA) Недопустимые данные.
0xC0000BC7 (PDH_NO_DIALOG_DATA) Блок данных диалогового окна отсутствует или недопустим.
0xC0000BC8 (PDH_CANNOT_READ_NAME_STRINGS) Не удается прочитать счетчик и /или текст справки с указанного компьютера.
0xC0000BC9 (PDH_LOG_FILE_CREATE_ERROR) Не удалось создать указанный файл журнала.
0xC0000BCA (PDH_LOG_FILE_OPEN_ERROR) Не удается открыть указанный файл журнала.
0xC0000BCB (PDH_LOG_TYPE_NOT_FOUND) Указанный тип файла журнала не установлен в этой системе.
0xC0000BCC (PDH_NO_MORE_DATA) Больше нет доступных данных.
0xC0000BCD (PDH_ENTRY_NOT_IN_LOG_FILE) Указанная запись не найдена в файле журнала.
0xC0000BCE (PDH_DATA_SOURCE_IS_LOG_FILE) Указанный источник данных — это файл журнала.
0xC0000BCF (PDH_DATA_SOURCE_IS_REAL_TIME) Указанный источник данных — текущее действие.
0xC0000BD0 (PDH_UNABLE_READ_LOG_HEADER) Не удалось прочитать заголовок файла журнала.
0xC0000BD1 (PDH_FILE_NOT_FOUND) Не удалось найти указанный файл.
0xC0000BD2 (PDH_FILE_ALREADY_EXISTS) Файл уже имеет указанное имя файла.
0xC0000BD3 (PDH_NOT_IMPLEMENTED) Ссылка на функцию не реализована.
0xC0000BD4 (PDH_STRING_NOT_FOUND) Не удалось найти указанную строку в списке имени производительности и помочь текстовым строкам.
0x80000BD5 (PDH_UNABLE_MAP_NAME_FILES) Не удалось сопоставить файлы данных счетчика производительности. Данные будут считываться из реестра и храниться локально.
0xC0000BD6 (PDH_UNKNOWN_LOG_FORMAT) Формат указанного файла журнала не распознается библиотекой DLL PDH.
0xC0000BD7 (PDH_UNKNOWN_LOGSVC_COMMAND) Указанное значение команды службы журналов не распознается.
0xC0000BD8 (PDH_LOGSVC_QUERY_NOT_FOUND) Указанный запрос из службы журналов не удалось найти или не удалось открыть.
0xC0000BD9 (PDH_LOGSVC_NOT_OPENED) Не удалось открыть ключ службы журнала данных производительности. Это может быть связано с недостаточной привилегией или из-за того, что служба не установлена.
0xC0000BDA (PDH_WBEM_ERROR) Произошла ошибка при доступе к хранилищу данных WBEM.
0xC0000BDB (PDH_ACCESS_DENIED) Не удается получить доступ к требуемому компьютеру или службе. Проверьте разрешения и проверку подлинности службы журналов или интерактивного сеанса пользователя для отслеживаемых пользователей на компьютере или службе.
0xC0000BDC (PDH_LOG_FILE_TOO_SMALL) Максимальный размер файла журнала слишком мал, чтобы регистрировать выбранные счетчики. В этом файле журнала данные не записываются. Укажите меньший набор счетчиков для журнала или большего размера файла и повторите этот вызов.
0xC0000BDD (PDH_INVALID_DATASOURCE) Не удается подключиться к имени источника данных ODBC.
0xC0000BDE (PDH_INVALID_SQLDB) База данных SQL не содержит допустимый набор таблиц для Perfmon.
0xC0000BDF (PDH_NO_COUNTERS) Для этого набора журналов PERfmon SQL не найдены счетчики.
0xC0000BE0 (PDH_SQL_ALLOC_FAILED) Сбой вызова SQLAllocStmt с %1.
0xC0000BE1 (PDH_SQL_ALLOCCON_FAILED) Вызов SQLAlloc Подключение произошел с ошибкой %1.
0xC0000BE2 (PDH_SQL_EXEC_DIRECT_FAILED) Сбой вызова SQLExecDirect с %1.
0xC0000BE3 (PDH_SQL_FETCH_FAILED) Сбой вызова SQLFetch с %1.
0xC0000BE4 (PDH_SQL_ROWCOUNT_FAILED) Сбой вызова SQLRowCount с %1.
0xC0000BE5 (PDH_SQL_MORE_RESULTS_FAILED) Сбой вызова SQLMoreResults с %1.
0xC0000BE6 (PDH_SQL_CONNECT_FAILED) Вызов SQL Подключение произошел сбоем с %1.
0xC0000BE7 (PDH_SQL_BIND_FAILED) Сбой вызова SQLBindCol с %1.
0xC0000BE8 (PDH_CANNOT_CONNECT_WMI_SERVER) Не удается подключиться к серверу WMI на запрошенном компьютере.
0xC0000BE9 (PDH_PLA_COLLECTION_ALREADY_RUNNING) Коллекция "%1!s!" уже запущена.
0xC0000BEA (PDH_PLA_ERROR_SCHEDULE_OVERLAP) Указанное время начала после окончания.
0xC0000BEB (PDH_PLA_COLLECTION_NOT_FOUND) Коллекция "%1!s!" не существует.
0xC0000BEC (PDH_PLA_ERROR_SCHEDULE_ELAPSED) Указанное время окончания уже истекло.
0xC0000BED (PDH_PLA_ERROR_NOSTART) Коллекция "%1!s!" не начиналась; проверка журнал событий приложения для любых ошибок.
0xC0000BEE (PDH_PLA_ERROR_ALREADY_EXISTS) Коллекция "%1!s!" уже существует.
0xC0000BEF (PDH_PLA_ERROR_TYPE_MISMATCH) В типе параметров имеется несоответствие.
0xC0000BF0 (PDH_PLA_ERROR_FILEPATH) Указанные сведения не разрешаются в допустимое имя пути.
0xC0000BF1 (PDH_PLA_SERVICE_ERROR) Служба "Журналы производительности и оповещения" не ответила.
0xC0000BF2 (PDH_PLA_VALIDATION_ERROR) Передаваемая информация недопустима.
0x80000BF3 (PDH_PLA_VALIDATION_WARNING) Передаваемая информация недопустима.
0xC0000BF4 (PDH_PLA_ERROR_NAME_TOO_LONG) Указанное имя слишком длинное.
0xC0000BF5 (PDH_INVALID_SQL_LOG_FORMAT) Неправильный формат журнала SQL. Правильный формат.SQL:<DSN-name>!<LogSet-Name>
0xC0000BF6 (PDH_COUNTER_ALREADY_IN_QUERY) Счетчик производительности в вызове PdhAddCounter уже добавлен в запрос производительности. Этот счетчик игнорируется.
0xC0000BF7 (PDH_BINARY_LOG_CORRUPT) Не удается считывать данные счетчика и данные из входных двоичных файлов журнала.
0xC0000BF8 (PDH_LOG_SAMPLE_TOO_SMALL) По крайней мере один из входных двоичных файлов журнала содержит менее двух примеров данных.
0xC0000BF9 (PDH_OS_LATER_VERSION) Версия операционной системы на компьютере с именем %1 позже, чем на локальном компьютере. Эта операция недоступна на локальном компьютере.
0xC0000BFA (PDH_OS_EARLIER_VERSION) %1 поддерживает %2 или более поздней версии. Проверьте версию операционной системы на компьютере с именем %3.
0xC0000BFB (PDH_INCORRECT_APPEND_TIME) Выходной файл должен содержать более ранние данные, чем добавляемый файл.
0xC0000BFC (PDH_UNMATCHED_APPEND_COUNTER) Оба файла должны иметь одинаковые счетчики для добавления.
0xC0000BFD (PDH_SQL_ALTER_DETAIL_FAILED) Невозможно изменить макет таблицы CounterDetail в базе данных SQL.
0xC0000BFE (PDH_QUERY_PERF_DATA_TIMEOUT) Система занята. Время ожидания произошло при сборе данных счетчика. Повторите попытку позже или увеличьте значение реестра CollectTime .