性能数据帮助程序错误代码

所有性能数据帮助程序 (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 头文件中定义。

错误代码 说明
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) PDH DLL 无法识别指定日志文件的格式。
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 DataSource 名称。
0xC0000BDE (PDH_INVALID_SQLDB) SQL 数据库不包含一组有效的 Perfmon 表。
0xC0000BDF (PDH_NO_COUNTERS) 找不到此 Perfmon SQL 日志集的计数器。
0xC0000BE0 (PDH_SQL_ALLOC_FAILED) 对 SQLAllocStmt 的调用失败,出现 %1。
0xC0000BE1 (PDH_SQL_ALLOCCON_FAILED) 调用 SQLAllocConnect 失败,出现 %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) 调用 SQLConnect 失败,出现 %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) 无法更改 SQL 数据库中的 CounterDetail 表布局。
0xC0000BFE (PDH_QUERY_PERF_DATA_TIMEOUT) 系统正忙。 收集计数器数据时发生超时。 请稍后重试或增加 CollectTime 注册表值。