应用程序验证工具 - 停止代码 - 网络

以下停止代码包含在这组测试中。

从 DllMain 调用的非法网络 API

可能的原因

调用了不支持从 DllMain 中调用的网络 API。 许多 Win32 API(而不仅仅是 Win32 网络 API)无法从 DllMain 调用。 有关详细信息,请阅读 MSDN 库中有关 DllMain 的文档。 若要标识发出调用的例程,请在调试器中使用“k”命令转储当前堆栈跟踪。

应用程序验证程序显示的信息

其他信息

尝试使用封闭的 SOCKET

可能的原因

套接字在关闭后被使用。 若要标识尝试使用闭合 SOCKET 的例程,请使用调试器中的“k”命令转储当前堆栈跟踪。 若要转储关闭 SOCKET 的例程的堆栈跟踪,请将 dps 命令与 stop 的第二个参数一起使用。

应用程序验证程序显示的信息

其他信息

尝试使用未知 SOCKET

可能的原因

尝试对不是通过调用 Winsock 创建的 SOCKET 使用未知值。 若要查看尝试此操作的例程的堆栈跟踪,请在调试器中使用“k”命令。

应用程序验证程序显示的信息

其他信息

检测到泄漏的 SOCKET 句柄

可能的原因

检测到从 Winsock 基础服务提供程序打开的 SOCKET 已从正在卸载的 DLL 中泄漏。 若要排查此停止问题,请在此验证程序停止的第二个参数上使用调试器中的 dps 命令,转储打开 SOCKET 句柄的线程的堆栈跟踪。

应用程序验证程序显示的信息

其他信息

尝试使用封闭的 SOCKET

可能的原因

关闭后,使用了来自 Winsock 基本提供程序的 SOCKET。 这通常表示分层服务提供程序 (LSP 中的错误 - 应用程序和 Winsock) 之间的 DLL。 若要标识尝试使用闭合 SOCKET 的例程,请使用调试器中的“k”命令转储当前堆栈跟踪。 若要转储关闭 SOCKET 的例程的堆栈跟踪,请将 dps 命令与 stop 的第二个参数一起使用。

应用程序验证程序显示的信息

其他信息

尝试使用未知 SOCKET

可能的原因

Winsock 分层服务提供商 (LSP) 使用了未知 SOCKET 句柄值。 这通常指向应用程序与 Winsock 之间分层的特定 LSP 的错误。 若要标识尝试使用未知 SOCKET 的例程,请在调试器中使用“k”命令转储当前堆栈跟踪。

应用程序验证程序显示的信息

其他信息

检测到泄漏的 SOCKET 句柄

可能的原因

检测到 Winsock 基础服务提供程序的开放 SOCKET 已泄漏。 这通常指向应用程序与 Winsock 之间分层的特定 LSP 的错误。 若要排查此停止问题,请在此验证程序停止的第二个参数上使用调试器中的 dps 命令,转储打开 SOCKET 句柄的线程的堆栈跟踪。

应用程序验证程序显示的信息

其他信息

在 WSAStartup () 成功调用之前或在成功调用 WSACleanup () 之后调用 Winsock API

可能的原因

在成功的 WSAStarup () 之前或均衡成功的 WSACleanup () 调用之后,对网络 API 进行了调用。 任何使用 Winsock 的组件都需要 WSAStartup 提供引用计数,以保证使用 Winsock API 的初始化。 组件不均衡的 WSAStartup/WSACleanup 调用模式可能会导致未定义的行为,因为这可能会使 Winsock 层在仍在使用的同时卸载库并释放资源。

应用程序验证程序显示的信息

其他信息

在成功执行 WSPStartup () 之前或在成功进行 WSPCleanup () 调用之后调用的网络 API

可能的原因

在 WSPStarup () 成功调用之前或均衡成功的 WSPCleanup () 调用之后,调用了 Winsock 服务提供商 API。 这通常指向应用程序与 Winsock 之间分层的特定 Winsock 分层服务提供商 (LSP) 故障。 任何使用 Winsock 的 LSP 都需要 WSPStartup 提供引用计数,以保证 Winsock 服务提供商 API 使用情况的初始化。 LSP 的不平衡 WSPStartup/WSPCleanup 调用模式可能会导致未定义的行为,因为这可能会使 Winsock 层在仍在使用时卸载库并释放资源。

应用程序验证程序显示的信息

其他信息

在成功执行 NSPStartup () 之前或在成功调用 NSPCleanup () 之后调用 Winsock 名称服务提供程序 API

可能的原因

在成功的 NSPStarup () 之前或平衡成功的 NSPCleanup () 调用之后,调用了 Winsock 名称服务提供程序 API。 这通常指向特定 Winsock 名称服务提供商的错误, (NSP) 应用程序与 Winsock 之间分层。 需要使用 NSPStartup 来提供任何 NSP 使用 Winsock 的引用计数,以保证使用 Winsock 名称服务提供程序 API 的初始化。 NSP 的不平衡 NSPStartup/NSPCleanup 调用模式可能会导致未定义的行为,因为这可能会使 Winsock 层在仍在使用时卸载库和释放资源。

应用程序验证程序显示的信息

其他信息

检测到使用无效的 Winsock 扩展函数指针

可能的原因

Microsoft Winsock 扩展函数只能通过在运行时查询 Winsock 的函数指针值来调用。 自返回此函数指针以来,Winsock 运行时已卸载。 调用方在调用 WSACleanup 后可能会保留函数指针的副本,并尝试重复使用它。

应用程序验证程序显示的信息

其他信息

WSACleanup 中止并关闭了拥有这些 SOCKET 的代码下的现有 SOCKET 句柄

可能的原因

调用 WSACleanup,将 Winsock 引用计数递减为 0,而打开的 SOCKET 句柄存在于此进程中。 当引用计数达到零时,Winsock 将关闭任何打开的 SOCKET 句柄。 这通常是通过 WSACleanup 递减 Winsock 引用计数的 bug, (WSAStartup) 不平衡,或者调用方不再正确跟踪 SOCKET 句柄 (泄漏) 。 在调试器中键入 k 以显示当前正在调用 WSACleanup 的人员,并将 Winsock 引用计数设置为 0。

应用程序验证程序显示的信息

其他信息

WSPCleanup 中止并关闭了拥有这些 SOCKET 的代码下的现有服务提供商 SOCKET 句柄

可能的原因

WSPCleanup 由分层服务提供商 (LSP 调用,) 在此进程中存在打开的 SOCKET 句柄时,将 Winsock 引用计数递减为 0。 当引用计数达到零时,Winsock 将关闭任何打开的 SOCKET 句柄。 这通常是 LSP 通过 WSPCleanup 递减 Winsock 引用计数的 bug, (WSPStartup) 不平衡,或者调用方不再正确跟踪 SOCKET 句柄 (泄漏) 。 在调试器中键入 k 以显示谁当前正在调用 WSPCleanup,将 Winsock 引用计数设置为 0。

应用程序验证程序显示的信息

其他信息

当前 Winsock 调用的即时返回值或 GetLastError 无效。 这通常指向服务提供商中的错误

可能的原因

要返回的值或 GetLastError 中的当前值未遵循指定的 Winsock 2 规范。 这通常指向分层服务提供程序中的 bug (LSP) - 应用程序与 Winsock 之间分层的 DLL。 在这些情况下,LSP 已破坏 Winsock API 协定,并将虚假值返回给调用方。 在调试器中的参数 3 上使用 ln,在 DLL 中查找返回错误返回代码的函数。 查看参数 1 和 2,查看与 Winsock 调用相关的错误值。 如果调用的是任何 Winsock send 或 recv 函数,请查看参数 4,以查看请求发送或接收的实际字节数。 返回的字节数大于请求发送或接收的字节数无效。

应用程序验证程序显示的信息

其他信息

对于当前 Winsock 调用,返回值或 lpError 无效。 这通常指向基础服务提供商或网络堆栈中的故障

可能的原因

返回的值或 lpError 中的当前值未遵循指定的 Winsock 2 规范。 这通常指向加载的基本服务提供程序 (通常 mswsock.dll) 或网络堆栈中的 bug。 在调试器中的参数 3 上使用 ln,在 DLL 中查找返回错误返回代码的函数。 查看参数 1 和 2,查看与 Winsock 调用相关的错误值。 如果调用的是任何 Winsock send 或 recv 函数,请查看参数 4,以查看请求发送或接收的实际字节数。 返回的字节数大于请求发送或接收的字节数无效。

应用程序验证程序显示的信息

其他信息

另请参阅

应用程序验证工具 - 停止代码和定义

应用程序验证程序 - 概述

应用程序验证工具 - 功能

应用程序验证工具 - 测试应用程序

应用程序验证工具 - 应用程序验证工具中的测试

应用程序验证工具 - 调试应用程序验证工具停止

应用程序验证工具 - 常见问题解答