应用程序验证工具 您所在的位置:网站首页 ug错误代码c0000005 应用程序验证工具

应用程序验证工具

2023-12-15 04:35| 来源: 网络整理| 查看: 265

应用程序验证工具 - 停止代码 - 基础知识 项目 06/15/2023

以下停止代码包含在基本测试集中。

异常停止详细信息 尝试在非可执行内存中执行代码 (第一次机会) 。

可能的原因

如果应用程序尝试从不可执行或免费地址运行代码,则会生成此停止。 若要调试此停止:$ u parameter2 - 取消组合罪魁祸首代码 $ .exr parameter3 - 以显示异常信息;$ .cxr 参数 4 后跟 kb - 显示异常上下文信息和引发异常时的堆栈跟踪。

应用程序验证程序显示的信息 参数 1 - 正在访问的地址。 参数 2 - 执行无效访问的代码。 参数 3 - 异常记录。 使用 .exr 显示它。 参数 4 - Context record。 使用 .cxr 显示它。

其他信息 测试层: 异常 停止 ID: FIRST_CHANCE_ACCESS_VIOLATION_CODE 停止代码: 650NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

处理停止详细信息 当前堆栈跟踪的句柄异常无效。

可能的原因

如果堆栈顶部的函数将无效句柄传递给系统例程,则会生成此停止。 通常,简单的 kb 命令会显示传递 (句柄的值必须是参数之一 - 通常是) 的第一个参数。 如果值为 null,则这显然是错误的。 如果值看起来正常,则需要使用 !htrace 调试器扩展来获取与此句柄值相关的操作历史记录。 在大多数情况下,必须在关闭后使用句柄值。

应用程序验证程序显示的信息 参数 1 - 异常代码。 参数 2 - 异常记录。 使用 .exr 显示它。 参数 3 - Context record。 使用 .cxr 显示它。 参数 4 - 未使用。

其他信息 测试层: 处理 停止 ID: INVALID_HANDLE 停止代码: 300NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

用于当前堆栈跟踪的 TLS 索引无效。

可能的原因

如果堆栈顶部的函数将无效的 TLS 索引传递给 TLS 系统例程,则会生成此停止。 通常,简单的 kb 命令会显示错误。 此处的典型 bug 是假定 TLS 索引具有特定值,而不是调用 TlsAlloc。 如果认为始终获取值 N,因此无需调用 TlsAlloc,或者更频繁地由于未初始化的变量,可能会发生这种情况。

应用程序验证程序显示的信息 参数 1 - 无效的 TLS 索引。 参数 2 - 索引的预期下半部分。 参数 3 - 未使用。 参数 4 - 未使用。

其他信息 测试层: 处理 停止 ID: INVALID_TLS_VALUE 停止代码: 300NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

WaitForMultipleObjects 调用的参数无效。

可能的原因

如果堆栈顶部的名为 WaitForMultipleObjects 的函数以 NULL 作为要等待的句柄数组的地址,或者将零作为句柄数,则会生成此停止。 简单的 kb 命令会错误地显示调用此 API 的函数。

应用程序验证程序显示的信息 参数 1 - 对象的地址处理向量。 参数 2 - 句柄数。 参数 3 - 未使用。 参数 4 - 未使用。

其他信息 测试层: 处理 停止 ID: INCORRECT_WAIT_CALL 停止代码: 300NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

作为参数传递的 NULL 句柄。 必须使用有效的句柄。

可能的原因

如果堆栈顶部的函数将 NULL 句柄传递给系统例程,则会生成此停止。

应用程序验证程序显示的信息 参数 1 - 未使用。 参数 2 - 未使用。 参数 3 - 未使用。 参数 4 - 未使用。

其他信息 测试层: 处理 停止 ID: NULL_HANDLE 停止代码: 300NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

在 DllMain 中等待线程句柄。

可能的原因

如果当前线程当前在当前进程中加载的某个 DLL 的 DllMain 函数内运行代码,并且调用 WaitForSingleObject 或 WaitForMultipleObjects 来等待同一进程中的线程句柄,则会生成此停止。 这很可能导致死锁,因为除非第二个线程退出,否则线程句柄不会收到信号。 当第二个线程调用 ExitThread 时,它将尝试获取 DLL 加载程序锁,然后为当前进程中的所有 DLL 调用 DllMain (DLL_THREAD_DETACH) 。 但加载程序锁由第一个线程拥有, (等待线程句柄的线程) 因此两个线程将死锁。

应用程序验证程序显示的信息 参数 1 - 线程句柄。 参数 2 - 未使用。 参数 3 - 未使用。 参数 4 - 未使用。

其他信息 测试层: 处理 停止 ID: WAIT_IN_DLLMAIN 停止代码: 300NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

句柄的对象类型不正确。

可能的原因

如果当前线程调用具有对象类型不正确的对象的句柄的 API,则会生成此停止。 例如,使用信号灯句柄作为参数调用 SetEvent 将生成此停止。 若要调试此停止:$ kb - 显示当前堆栈跟踪。 罪魁祸首可能是调用 verifier.dll 的 DLL;$ du parameter2 - 显示句柄的实际类型。 句柄值为 parameter1。 在上面的示例中,将显示:信号灯。 $ du parameter3 - 显示 API 所需的对象类型。 在上面的示例中,此名称将为:Event。 $ !htrace parameter1 可能很有用,因为它将显示此句柄上最近的打开/关闭操作的堆栈跟踪。

应用程序验证程序显示的信息 参数 1 - Handle 值。 参数 2 - Object 类型名称。 使用 du 显示它 参数 3 - 预期的对象类型名称。 使用 du 显示它 参数 4 - 未使用。

其他信息 测试层: 处理 停止 ID: INCORRECT_OBJECT_TYPE 停止代码: 300NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

堆停止详细信息 未知错误。

可能的原因

如果无法以任何其他方式对遇到的错误进行分类,则可能会出现此消息。 当前未使用。

应用程序验证程序显示的信息 参数 1 - 未使用 参数 2 - 未使用 参数 3 - 未使用 参数 4 - 未使用

其他信息 测试层: 堆 停止 ID: UNKNOWN_ERROR 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

访问冲突异常。

可能的原因

这是最常见的应用程序验证程序停止。 通常,这是由缓冲区溢出错误引起的。 堆验证程序将不可访问的页面放置在堆分配的末尾,缓冲区溢出将通过触摸此页面导致异常。 若要调试此停止,请确定导致异常的访问地址,然后使用以下调试器命令:!heap -p -a ACCESS_ADDRESS此命令将提供有关错误性质和堆块溢出的详细信息。 它还将为块分配提供堆栈跟踪。 此停止还有其他几个原因。 例如,在释放后访问堆块。 对于这种情况,同一调试器命令也很有用。

应用程序验证程序显示的信息 参数 1 - 导致异常的地址无效 参数 2 - 执行无效访问的代码地址 参数 3 - 异常记录 参数 4 - Context record

其他信息 测试层: 堆 停止 ID: ACCESS_VIOLATION 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

使用 HEAP_NO_SERIALIZE 标志创建的堆中的多线程访问。

可能的原因

不应从两个线程同时访问使用 HEAP_NO_SERIALIZE 标志创建的堆。 如果检测到这种情况,你将收到此消息。 这种情况进入程序的典型方式是与 C 运行时的单线程版本链接。 例如,使用适当的标志时,Visual C++ 可以静态链接此类库。 然后,人们会忘记此详细信息,并使用多个线程。 该 bug 在现实生活中很难调试,因为它会显示为神秘的数据损坏。

应用程序验证程序显示的信息 参数 1 - 在其中执行操作的堆。 参数 2 - 堆关键部分当前所有者的线程 ID。 参数 3 - 尝试进入堆的当前线程的线程 ID。 参数 4 - 未使用

其他信息 测试层: 堆 停止 ID: UNSYNCHRONIZED_ACCESS 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

极端大小请求。

可能的原因

如果在 HeapAlloc () 或 HeapReAlloc () 操作中,块的大小高于任何合理值,则会生成此消息。 通常,此值在 32 位平台上0x80000000,在 64 位平台上要大得多。

应用程序验证程序显示的信息 参数 1 - 在其中执行操作的堆。 参数 2 - 请求的大小 参数 3 - 未使用 参数 4 - 未使用

其他信息 测试层: 堆 停止 ID: EXTREME_SIZE_REQUEST 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

具有不正确签名的堆句柄。

可能的原因

堆结构使用 magic 值进行标记。 如果调用堆接口时使用的堆句柄没有此模式,则将生成此停止。 如果内部堆结构以某种方式损坏, (随机损坏) 或者只是将虚假值用作堆句柄,则会发生此 bug。 若要获取有效堆句柄值的列表,请使用以下调试器命令: !heap -p 请注意,如果只是在堆操作中将有效堆句柄与另一个有效堆句柄切换,则不会获得此停止 (句柄在所有) 后看起来有效。 但是,堆验证程序会检测到这种情况,并报告SWITCHED_HEAP_HANDLE停止。

应用程序验证程序显示的信息 参数 1 - 调用堆接口中使用的堆句柄 参数 2 - 未使用 参数 3 - 未使用 参数 4 - 未使用

其他信息 测试层: 堆 停止 ID: BAD_HEAP_HANDLE 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

堆指针损坏或使用错误的堆。

可能的原因

如果块在一个堆中分配并在另一个堆中释放,则通常会发生这种情况。 使用 !heap -p 命令获取所有有效堆句柄值的列表。 最常见的示例是使用 malloc () 与使用 HeapFree () 的 kernel32 解除分配配对的 msvcrt 分配。

应用程序验证程序显示的信息 参数 1 - 调用中使用的堆句柄。 参数 2 - 操作中涉及的堆块。 参数 3 - 堆块的大小。 参数 4 - 最初分配块的堆。

其他信息 测试层: 堆 停止 ID: SWITCHED_HEAP_HANDLE 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

堆块已释放。

可能的原因

如果释放块两次,则会出现这种情况。 释放的块以特殊方式标记,并在延迟的免费队列中保留一段时间。 如果错误程序再次尝试释放该块,则会捕获该错误,前提是该块未从延迟的可用队列中取消排队,并且其内存已重新用于其他分配。 延迟免费队列的深度为数千个块,因此很有可能捕获大多数双可用。

应用程序验证程序显示的信息 参数 1 - 拥有块的堆的堆句柄。 参数 2 - 将再次释放堆块。 参数 3 - 堆块的大小。 参数 4 - 未使用

其他信息 测试层: 堆 停止 ID: DOUBLE_FREE 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

堆块损坏。

可能的原因

如果堆块中的损坏不能置于更具体的类别中,则发出此错误。

应用程序验证程序显示的信息 参数 1 - 调用中使用的堆句柄。 参数 2 - 操作中涉及的堆块。 参数 3 - 堆块的大小。 参数 4 - Reserved

其他信息 测试层: 堆 停止 ID: CORRUPTED_HEAP_BLOCK 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

尝试销毁进程堆。

可能的原因

尝试销毁默认进程堆 (GetProcessHeap () 接口) 返回的进程堆是错误的。

应用程序验证程序显示的信息 参数 1 - 与 HeapDestroy 一起使用的堆句柄。 参数 2 - 未使用 参数 3 - 未使用 参数 4 - 未使用

其他信息 测试层: 堆 停止 ID: DESTROY_PROCESS_HEAP 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

执行堆管理代码时引发意外异常。

可能的原因

如果在执行堆管理器代码时在非法情况下引发访问冲突,则会生成此停止。 在极少数情况下,这可以正常使用,例如在调用 HeapValidate () 或 HeapSize () 时。 异常记录信息 (第三个参数) 可用于查找异常的确切上下文。 对此使用以下调试器命令: $ .exr STOP-PARAMETER-2 $ .cxr STOP-PARAMETER-3 通常,如果内部堆结构中存在一些随机损坏,则会发生此停止。

应用程序验证程序显示的信息 参数 1 - 操作涉及的堆。 参数 2 - 异常记录。 参数 3 - Context record。 参数 4 - 异常代码 (C0000005 - 访问冲突)

其他信息 测试层: 堆 停止 ID: UNEXPECTED_EXCEPTION 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

验证堆块标头时引发异常。

可能的原因

如果确实无法确定块的任何特定类型的损坏,则会发生这种情况。 当堆块地址传递到堆可用点到不可访问的内存区域 (损坏的指针、未初始化的指针等) 时,很可能会发生此停止。

应用程序验证程序显示的信息 参数 1 - 拥有块的堆的堆句柄。 参数 2 - 已损坏的堆块。 参数 3 - 块的大小;如果无法确定大小,则为零。 参数 4 - 未使用。

其他信息 测试层: 堆 停止 ID: CORRUPTED_HEAP_BLOCK_EXCEPTION_RAISED_FOR_HEADER 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

验证堆块时引发的异常。

可能的原因

如果确实无法确定块的任何特定类型的损坏,则会发生这种情况。 例如,如果在无堆操作期间传递的地址指向不可访问的内存区域,则会得到此情况。 如果我们在整页堆块中找不到块,并且将其作为浅页堆块进行探测,则双可用情况下也会发生这种情况。

应用程序验证程序显示的信息 参数 1 - 调用中使用的堆句柄。 参数 2 - 操作中涉及的堆块。 参数 3 - 堆块的大小。 参数 4 - Reserved。

其他信息 测试层: 堆 停止 ID: CORRUPTED_HEAP_BLOCK_EXCEPTION_RAISED_FOR_PROBING 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

堆块在释放后损坏。

可能的原因

如果在释放内存块后写入内存块,则会发生这种情况。

应用程序验证程序显示的信息 参数 1 - 拥有块的堆的堆句柄。 参数 2 - 已损坏的堆块。 参数 3 - 块的大小;如果无法确定大小,则为零。 参数 4 - 未使用。

其他信息 测试层: 堆 停止 ID: CORRUPTED_HEAP_BLOCK_HEADER 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

已损坏释放的堆块的内缀模式。

可能的原因

释放的块有时标记为不可访问,接触它们的程序将违反 (不同的验证程序停止) 。 在其他情况下, (浅色页面堆) 块被标记为魔术图案,并会保留一段时间。 最终,以 FIFO 的方式,块被真正释放。 此时会检查内缀模式,如果已修改,则会出现此中断。 中断时的堆栈不相关。 你需要了解块的性质,并查看可能错误的代码。

应用程序验证程序显示的信息 参数 1 - 拥有块的堆的堆句柄。 参数 2 - 正在释放堆块。 参数 3 - 堆块的大小。 参数 4 - Reserved。

其他信息 测试层: 堆 停止 ID: CORRUPTED_FREED_HEAP_BLOCK 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

堆块的后缀模式已损坏。

可能的原因

大多数情况下,这发生在缓冲区溢出错误时。 有时,应用程序验证程序将不可访问的页面置于分配结束时,缓冲区溢出会导致访问冲突,有时堆块后跟一个 magic 模式。 如果在释放块时更改此模式,你将获得此中断。 这些中断可能很难调试,因为你没有发生损坏的实际时刻。 你只需访问 (停止发生的免费时刻) 和分配堆栈跟踪 (!heap -p -a HEAP_ADDRESS)

应用程序验证程序显示的信息 参数 1 - 调用中使用的堆句柄。 参数 2 - 操作中涉及的堆块。 参数 3 - 堆块的大小。 参数 4 - Reserved。

其他信息 测试层: 堆 停止 ID: CORRUPTED_HEAP_BLOCK_SUFFIX 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

堆块的启动标记已损坏。

可能的原因

这发生在缓冲区不足时。

应用程序验证程序显示的信息 参数 1 - 调用中使用的堆句柄。 参数 2 - 操作中涉及的堆块。 参数 3 - 堆块的大小。 参数 4 - 损坏的标记值。

其他信息 测试层: 堆 停止 ID: CORRUPTED_HEAP_BLOCK_START_STAMP 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

堆块的结束标记已损坏。

可能的原因

这发生在缓冲区不足时。

应用程序验证程序显示的信息 参数 1 - 调用中使用的堆句柄。 参数 2 - 操作中涉及的堆块。 参数 3 - 堆块的大小。 参数 4 - 损坏的标记值。

其他信息 测试层: 堆 停止 ID: CORRUPTED_HEAP_BLOCK_END_STAMP 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

堆块的前缀模式已损坏。

可能的原因

这发生在缓冲区不足时。

应用程序验证程序显示的信息 参数 1 - 调用中使用的堆句柄。 参数 2 - 操作中涉及的堆块。 参数 3 - 堆块的大小。 参数 4 - Reserved。

其他信息 测试层: 堆 停止 ID: CORRUPTED_HEAP_BLOCK_PREFIX 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

当前堆栈跟踪的首次机会访问冲突。

可能的原因

这是最常见的应用程序验证程序停止。 通常,这是由缓冲区溢出错误引起的。 堆验证程序将不可访问的页面置于堆分配的末尾,缓冲区溢出将通过触摸此页面导致异常。 若要调试此停止,请确定导致异常的访问地址,然后使用以下调试器命令:!heap -p -a ACCESS_ADDRESS此命令将提供有关错误性质以及堆块溢出的详细信息。 它还将为块分配提供堆栈跟踪。 此停止还有其他几个原因。 例如,在释放后访问堆块。 对于这种情况,相同的调试器命令也很有用。

应用程序验证程序显示的信息 参数 1 - 导致异常的地址无效。 参数 2 - 执行无效访问的代码地址。 参数 3 - 异常记录。 参数 4 - Context record。

其他信息 测试层: 堆 停止 ID: FIRST_CHANCE_ACCESS_VIOLATION 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

无效的进程堆列表计数。

可能的原因

如果在调用 GetProcessHeaps 时页面堆管理器检测到一些内部不一致,则会发生此消息。 这可能是由进程空间中的一些随机损坏引起的。

应用程序验证程序显示的信息 参数 1 - 实际堆计数。 参数 2 - 页堆计数。 参数 3 - 未使用 参数 4 - 未使用

其他信息 测试层: 堆 停止 ID: CORRUPTED_HEAP_LIST 停止代码: 0NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

泄漏停止详细信息 堆分配泄漏。

可能的原因

如果分配的所有者 dll 在拥有资源时动态卸载,则会生成此停止。

应用程序验证程序显示的信息 参数 1 - 泄漏的分配的地址。 运行 !heap -p -a 以获取有关分配的其他信息。 参数 2 - 分配堆栈跟踪的地址。 运行 dps 以查看分配堆栈。 参数 3 - 所有者 dll 名称的地址。 运行 du 读取 dll 名称。 参数 4 - 所有者 dll 的基。 运行 .reload = 重新加载所有者 dll。 使用“lm”获取有关已加载和卸载模块的详细信息。

其他信息 测试层: 泄漏 停止 ID: 分配 停止代码: 900NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

句柄泄漏。

可能的原因

如果在拥有资源时动态卸载句柄的所有者 dll,则会生成此停止。 若要调试此停止,请运行 !htrace parameter1 以获取有关句柄的其他信息。

应用程序验证程序显示的信息 参数 1 - 泄漏句柄的值。 如果启用了句柄跟踪,>请运行 !htrace %i) 参数 1 - Callback 函数。 参数 2 - Context。 参数 3 - Threadpool 对象分配堆栈跟踪,使用 dps 将其转储。 参数 4 - 当前优先级。

其他信息 测试层: Threadpool 停止 ID: INCONSISTENT_PRIORITY 停止代码: 700NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

此线程池线程的相关性已更改。

可能的原因

如果线程相关性在返回到线程池时发生更改,则会生成此停止。

应用程序验证程序显示的信息 格式: - threadpool 线程 (%x) 已执行回调 (%p) 具有更改的线程关联掩码 (%p -> %p) 参数 1 - Callback 函数。 参数 2 - Context。 参数 3 - Threadpool 对象分配堆栈跟踪,使用 dps 将其转储。 参数 4 - 当前相关性。

其他信息 测试层: Threadpool 停止 ID: INCONSISTENT_AFFINITY_MASK 停止代码: 700NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

当前线程的 msg 池中未处理的 msg。

可能的原因

如果此线程池线程返回到池时,任何消息都保留为未处理,则会生成此停止。 这是危险的,因为它将在完全不同的上下文中处理。 请使用 !avrf -tp 查看发布到此线程的消息。

应用程序验证程序显示的信息 格式: - threadpool 线程 (%x) 已执行的回调 (%p) 具有未完成的窗口消息 (%x: %x) 参数 1 - Callback 函数。 参数 2 - Context。 参数 3 - Threadpool 对象分配堆栈跟踪,使用 dps 将其转储。 参数 4 - Threadpool 线程 ID。请使用 !avrf -tp 查看发布到此线程的消息。

其他信息 测试层: Threadpool 停止 ID: ORPHANED_THREAD_MESSAGE 停止代码: 700NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

未封闭的窗口属于当前线程。

可能的原因

如果此线程池线程返回到池时,任何窗口保持活动状态,则会生成此停止。

应用程序验证程序显示的信息 格式: -  线程池线程 (%x) 执行回调 (%p) 具有有效的 hwnd (%x: %s) ,可接收消息 参数 1 - Callback 函数。 参数 2 - Context。 参数 3 - Threadpool 对象分配堆栈跟踪,使用 dps 将其转储。 参数 4 - Threadpool 线程 ID。

其他信息 测试层: Threadpool 停止 ID: ORPHANED_THREAD_WINDOW 停止代码: 700NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

线程池线程上的 ExitThread () 。

可能的原因

如果在线程池线程上调用 ExitThread,则会生成此停止。这是禁止的,因为它会使系统不稳定。 这将导致资源泄漏、冻结或 AV。

应用程序验证程序显示的信息 参数 1 - Callback 函数。 参数 2 - Context。 参数 3 - Threadpool 对象分配堆栈跟踪,使用 dps 将其转储。 参数 4 - 未使用。

其他信息 测试层: Threadpool 停止 ID: ILLEGAL_THREAD_EXIT 停止代码: 700NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

当线程返回到线程池线程时,线程处于模拟状态。

可能的原因

如果回调函数将线程令牌更改为模拟另一个用户,而忘记在将它返回到线程池之前重置它,则会生成此停止。

应用程序验证程序显示的信息 参数 1 - Callback 函数。 参数 2 - Context。 参数 3 - Threadpool 对象分配堆栈跟踪,使用 dps 将其转储。 参数 4 - 未使用。

其他信息 测试层: Threadpool 停止 ID: THREAD_IN_IMPERSONATION 停止代码: 700NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

调用需要持久线程的函数。

可能的原因

某些 Microsoft Windows API 需要在专用或持久线程内调用。 在线程池中,通常应避免使用线程本地存储和排队需要持久线程的异步调用,例如 RegNotifyChangeKeyValue 函数。 但是,可以使用带有 WT_EXECUTEINPERSISTENTTHREAD 选项的 QueueUserWorkItem 将此类函数排队到永久性工作线程。 调试器中的 kb 会显示调用方。

应用程序验证程序显示的信息 参数 1 - Callback 函数。 参数 2 - Context。 参数 3 - Threadpool 对象分配堆栈跟踪,使用 dps 将其转储。 参数 4 - 未使用。

其他信息 测试层: Threadpool 停止 ID: PERSISTED_THREAD_NEEDED 停止代码: 700NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

线程处于脏事务状态。

可能的原因

如果回调函数忘记关闭或重置当前事务句柄,则会生成此停止。

应用程序验证程序显示的信息 参数 1 - Callback 函数。 参数 2 - Context。 参数 3 - Threadpool 对象分配堆栈跟踪,使用 dps 将其转储。 参数 4 - 事务句柄。

其他信息 测试层: Threadpool 停止 ID: DIRTY_TRANSACTION_CONTEXT 停止代码: 700NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

此线程池状态具有不平衡的 CoInit 和 CoUnInit 调用。

可能的原因

如果回调函数调用 CoInit 和 CoUnInit 不平衡,则会生成此停止。

应用程序验证程序显示的信息 参数 1 - Callback 函数。 参数 2 - Context。 参数 3 - Threadpool 对象分配堆栈跟踪,使用 dps 将其转储。 参数 4 - 均衡的调用计数。

其他信息 测试层: Threadpool 停止 ID: DIRTY_COM_STATE 停止代码: 700NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

计时器对象的参数不一致。 创建计时器时指定WT_EXECUTEONLYONCE时,句点应为 0

可能的原因

如果计时器设置为仅使用WT_EXECUTEONLYONCE标志发出一次信号时,要向计时器发出信号的时间段不为零,则会生成此停止

应用程序验证程序显示的信息 参数 1 - 指定的时间段。 参数 2 指定的标志 。 参数 3 - 未使用。 参数 4 - 未使用。

其他信息 测试层: Threadpool 停止 ID: INCONSISTENT_TIMER_PARAMS 停止代码: 700NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

加载程序锁已由回调中的线程池线程持有。

可能的原因

如果加载程序锁保留在回调中,并且不会在线程返回到线程池时释放,则会生成此停止。

应用程序验证程序显示的信息 参数 1 - Callback 函数。 参数 2 - Context。 参数 3 - Threadpool 对象分配堆栈跟踪,使用 dps 将其转储。 参数 4 - 未使用。

其他信息 测试层: Threadpool 停止 ID: LOADER_LOCK_HELD 停止代码: 700NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

首选语言由回调中的线程池线程设置。

可能的原因

如果首选语言在回调中设置,并且当线程返回到线程池时未清除,则会生成此停止。

应用程序验证程序显示的信息 参数 1 - Callback 函数。 参数 2 - Context。 参数 3 - Threadpool 对象分配堆栈跟踪,使用 dps 将其转储。 参数 4 - 未使用。

其他信息 测试层: Threadpool 停止 ID: PREFERRED_LANGUAGES_SET 停止代码: 700NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

后台优先级由回调中的线程池线程设置。

可能的原因

如果在回调中设置了后台优先级,并且当线程返回到线程池时不禁用,则会生成此停止。

应用程序验证程序显示的信息 参数 1 - Callback 函数。 参数 2 - Context。 参数 3 - Threadpool 对象分配堆栈跟踪,使用 dps 将其转储。 参数 4 - 未使用。

其他信息 测试层: Threadpool 停止 ID: BACKGROUND_PRIORITY_SET 停止代码: 700NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

线程池线程上的 TerminateThread () 。

可能的原因

如果在线程池线程上调用 TerminateThread,则会生成此停止。 这是禁止的,因为它会使系统不稳定。 这将导致资源泄漏、冻结或 AV。

应用程序验证程序显示的信息 参数 1 - 未使用。 参数 2 - 未使用。 参数 3 - 未使用。 参数 4 - 未使用。

其他信息 测试层: Threadpool 停止 ID: ILLEGAL_THREAD_TERMINATION 停止代码: 700NAN 严重性: 错误 一次性错误:  错误报告: 打破 记录到文件: 是的 创建回溯: 是的

另请参阅

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

应用程序验证程序 - 概述

应用程序验证工具 - 功能

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

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

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

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有