应用程序验证工具 - 停止代码 - 网络
以下停止代码包含在这组测试中。
从 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,以查看请求发送或接收的实际字节数。 返回的字节数大于请求发送或接收的字节数无效。
应用程序验证程序显示的信息另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈