首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

XP 系統 GetExtendedTcpTable 返回 122 錯誤解決

     編輯:程式設計綜合問答

錯誤現象

同樣程式碼在 Win7 正常,XP 上呼叫 GetExtendedTcpTable 返回錯誤碼 122 (ERROR_INSUFFICIENT_BUFFER)。

原因分析

XP 版本的 GetExtendedTcpTable 對緩衝區大小計算方式與 Vista/Win7 不同。首次呼叫時傳入的緩衝區過小,函式會透過第二個參數 pdwSize 返回所需大小,但 XP 可能不正確更新此值,或需兩次呼叫才能取得正確大小。

解決步驟

  1. 首次呼叫傳入 NULL 緩衝區與 pdwSize 變數,取得所需大小。
  2. 依返回大小配置記憶體(建議額外加 10% 緩衝)。
  3. 第二次呼叫傳入配置的緩衝區與大小。
  4. 若仍失敗,迴圈增加緩衝區重試(上限 3 次)。
DWORD size = 0;
GetExtendedTcpTable(NULL, &size, TRUE, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0);
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
    size = (DWORD)(size * 1.1); // 預留餘量
    PVOID buf = malloc(size);
    if (GetExtendedTcpTable(buf, &size, TRUE, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0) == NO_ERROR) {
        // 解析 buf
    }
    free(buf);
}

關鍵點

  • 務必檢查 pdwSize 返回值,動態調整緩衝區。
  • XP 系統測試不可省略,API 行為差異是跨平台相容的常見坑。

遵循「兩次呼叫」模式,可兼容 XP 至最新 Windows 版本的 TCP 表查詢。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved