gpt4 book ai didi

winapi - IcmpSendEcho2 因 WSA_QOS_ADMISSION_FAILURE 和 ERROR_NOACCESS 失败而失败

转载 作者:行者123 更新时间:2023-12-04 06:08:25 41 4
gpt4 key购买 nike

我有一个应用程序可以 ping 一堆服务器。它运行了好几天,但突然会出现以下两种类型之一的许多故障:

WSA_QOS_ADMISSION_FAILURE (11010) "由于缺乏资源,出现 QoS 错误"

或者

ERROR_NOACCESS (998) "对内存位置的访问无效。"

奇怪的是错误成群结队。即所有 ping 可能会因上述错误之一而失败几分钟。然后它就清除了。稍后所有 ping 都会失败并出现其他错误。他们似乎永远不会交错。

这发生在 Windows 2008 R2 上。我不能随意重现它,但如果我等一两天,它总是会再次发生。

我检查并重新检查,然后再次检查以确保我关闭了所有打开的句柄。

当应用程序首次启动时它永远不会发生,因此似乎与查找或加载 DLL 无关。而且它会在一段时间后自行修复,因此似乎不会耗尽资源。它运行了好几天,所以它似乎不是 API 使用问题。

在这里不知所措。有没有人有任何想法?

谢谢

最佳答案

事实证明,错误代码 11010 实际上不是来自 WinSock 的 WSA_QOS_ADMISSION_FAILURE(此处不涉及),而是与 IP 堆栈的 ICMP_ECHO_REPLY structure 完全不同的值,具有更有意义的含义:

IP_REQ_TIMED_OUT   (11010)   The request timed out



您应该首先调用 GetIpErrorString() 并且只有“如果函数失败,请使用 FormatMessage 获取返回错误的消息字符串”。

不幸的是,这对其他值 998 没有帮助。

一个线索可能是“ Mapping NT Status Error Codes to Win32 Error Codes ”页面,它表示映射(或映射上次更新时,在 2005 年)到 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 堆栈中的某些错误。恐怕只有一些核心内核调试才能揭示真正的原因。

关于winapi - IcmpSendEcho2 因 WSA_QOS_ADMISSION_FAILURE 和 ERROR_NOACCESS 失败而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23374710/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com