效能資料協助程式錯誤碼

所有效能資料協助程式 (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) 無法辨識指定的 Log Service 命令值。
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) 呼叫 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) 無法改變 SQL 資料庫中的 CounterDetail 數據表配置。
0xC0000BFE (PDH_QUERY_PERF_DATA_TIMEOUT) 系統忙碌中。 收集計數器數據時發生逾時。 請稍後重試或增加 CollectTime 登錄值。