性能数据帮助程序错误代码
所有性能数据帮助程序 (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 注册表值。 |