[英]VirtualProtectEx fails with ERROR_NOACCESS (error code 998)
[英]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.