簡體   English   中英

IcmpSendEcho2因WSA_QOS_ADMISSION_FAILURE和ERROR_NOACCESS失敗而失敗

[英]IcmpSendEcho2 fails with fails with WSA_QOS_ADMISSION_FAILURE and ERROR_NOACCESS

我有一個應用程序ping一堆服務器。 它運行良好的幾天,但突然會有兩種類型之一的許多失敗:

WSA_QOS_ADMISSION_FAILURE(11010)“由於資源不足而發生QoS錯誤”

要么

ERROR_NOACCESS(998)“對內存位置的訪問無效。”

奇怪的是錯誤串起來了。 即上述錯誤之一,所有ping可能會失敗幾分鍾。 然后它就清理了。 之后所有的ping都會因為另一個錯誤而失敗幾分鍾。 它們似乎並不交錯。

這種情況發生在Windows 2008 R2上。 我無法隨意重現它,但如果我等待一兩天,它總會再次發生。

我檢查並重新檢查,然后再次檢查以確保我關閉所有打開的手柄。

應用程序首次啟動時從未發生過,因此似乎與查找或加載DLL無關。 它會在一段時間后自行修復,所以似乎不會耗費資源。 它運行好幾天,所以它似乎不是一個API使用問題。

在這里不知所措。 有沒有人有任何想法?

謝謝

事實證明,錯誤代碼11010 ,其實並不是WSA_QOS_ADMISSION_FAILURE從的WinSock(此處未涉及),而是從IP堆棧的一個完全不同的值ICMP_ECHO_REPLY結構具有更加有意義的含義:

IP_REQ_TIMED_OUT (11010)請求超時

您應該首先調用GetIpErrorString()並且僅“ 如果函數失敗,請使用FormatMessage獲取返回錯誤的消息字符串 ”。


不幸的是,這對其他價值沒有幫助, 998

一個線索可能是“將NT狀態錯誤代碼映射到Win32錯誤代碼 ”頁面,其中說明將Win32代碼998( ERROR_NOACCESS )映射(或在上次更新時映射到的時間)的NT狀態條件更寬泛:

STATUS_DATATYPE_MISALIGNMENT            ERROR_NOACCESS
STATUS_ACCESS_VIOLATION                 ERROR_NOACCESS
STATUS_DATATYPE_MISALIGNMENT_ERROR      ERROR_NOACCESS

似乎每當IOCTL調用期間出現故障(將ICMP回應請求發送到內核以進行真正處理)時,如果可能,就會吞下底層異常,並且只返回此通用Win32代碼。

因此,您可能真的將一些不完全正確的數據傳遞給函數(如堆棧上的未對齊緩沖區,這可能解釋為什么它會偶爾發生),甚至暗示ICMP堆棧中的某些錯誤。 我擔心只有一些核心內核調試才能揭示真正的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM