应用程序验证工具 - 停止代码 - 打印

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

检测到打印机句柄泄漏

可能的原因

应用程序终止时检测到打开的打印机句柄。 创建线程很可能没有调用 ClosePrinter () 来关闭打印机句柄。 若要对此停止进行故障排除,请使用此验证程序停止的第二个参数提供堆栈跟踪来确定打开打印机句柄的线程。 在调试器中使用 dps 命令转储堆栈跟踪。 查找名为 vfPrint 的第一个非 winspool 和非 vfPrint 模块名称!VfHookOpenPrinter* 或 vfPrint!VfHookAddPrinter* - 这通常是列表中的第 4 个或第 6 个堆栈帧。

应用程序验证程序显示的信息
  • 参数 1 - 打印机句柄泄漏。
  • 参数 2 - 初始化堆栈跟踪。 如果此参数不为 NULL,请使用 dps 转储堆栈。
  • 参数 3 打开 句柄的线程的线程 ID。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: LEAKED_PRINTER_HANDLE
  • 停止代码: 0000A000
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

检测到打印机更改通知句柄泄漏

可能的原因

应用程序退出时检测到未关闭的打印机更改通知句柄。 打开句柄的线程很可能在线程退出之前未调用 FindClosePrinterChangeNotification () 来关闭句柄。 若要对此停止进行故障排除,请确定打开打印机更改通知句柄的线程:此停止的第二个参数提供堆栈地址。 使用 dps 命令转储堆栈跟踪。 查找名为 vfPrint 的第一个非 winspool 和非 vfPrint 模块名称!VfHookFindFirstPrinterChangeNotification。 这通常位于第 4 个堆栈帧中。

应用程序验证程序显示的信息
  • 参数 1 - 打印机更改通知句柄泄漏。
  • 参数 2 - 初始化堆栈跟踪。 如果堆栈跟踪不是 NULL,请使用 dps 转储堆栈跟踪。
  • 参数 3 - 使用它的最后一个线程的线程 ID。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: LEAKED_PRINTER_CHANGE_NOTIFICATION_HANDLE
  • 停止代码: 0000A001
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

检测到泄漏PRINTER_NOTIFY_INFO

可能的原因

程序退出时,检测到尚未释放的已分配PRINTER_NOTIFY_INFO对象。 最有可能的是,在退出之前,需要通过调用 FreePrinterNotifyInfo () 来释放它。 若要对此停止进行故障排除:使用此验证程序停止的第二个参数确定调用 winspool 以代表其分配PRINTER_NOTIFY_INFO对象的例程。 使用调试器中的 dps 命令转储初始化堆栈跟踪。 查找名为 vfPrint 的第一个非 winspool 和非 vfPrint 模块名称!VfHookFindNextPrinterChangeNotification。 此例程通常位于第 3 个堆栈帧中。

应用程序验证程序显示的信息
  • 参数 1 - 指向泄漏PRINTER_NOTIFY_INFO对象的指针。
  • 参数 2 - 初始化堆栈跟踪。 如果堆栈跟踪不是 NULL,请使用 dps 转储堆栈跟踪。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: LEAKED_PPRINTER_NOTIFY_INFO
  • 停止代码: 0000A002
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

使用打印机句柄时检测到的争用条件

可能的原因

打印机句柄在多个线程中并发使用。 打印机句柄不是线程安全的,这意味着在没有应用程序级同步的情况下,不允许在多个线程中同时使用打印机句柄来安全地协调对句柄的访问。 应用程序应在每个线程中打开单独的打印机句柄,或使用 Win32 同步 API 提供对打印机句柄的自定义同步访问。 Win32 同步 API 在 http://msdn.microsoft.com/library/en-us/dllproc/base/synchronization_functions.asp.

应用程序验证程序显示的信息
  • 参数 1 - 正在访问的打印机句柄。
  • 参数 2 - 当前线程 ID。
  • 参数 3 - 并发线程的线程 ID。
  • 参数 4 - 并发计数。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: MULTITHREADED_ACCESS_TO_PRINTER_HANDLE
  • 停止代码: 0000A003
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

检测到对打印机句柄的潜在多线程访问

可能的原因

打印机句柄用于与创建打印机的线程不同的线程。 打印机句柄不是线程安全的,这意味着在没有应用程序级同步的情况下,不允许在多个线程中同时使用打印机句柄来安全地协调对句柄的访问。 应用程序应在每个线程中打开单独的打印机句柄,或者使用 Win32 同步 API 提供对打印机句柄的自定义同步访问权限。 Win32 同步 API 在 http://msdn.microsoft.com/library/en-us/dllproc/base/synchronization_functions.asp.

应用程序验证程序显示的信息
  • 参数 1 - 正在访问的打印机句柄。
  • 参数 2 - 初始化线程的线程 ID。
  • 参数 3 - 初始化的堆栈跟踪。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: PRINTER_HANDLE_ACCESSED_NOT_ON_THE_THREAD_THAT_OPENED_IT
  • 停止代码: 0000A004
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 不
  • 创建回溯: 不

尝试使用已关闭的打印机句柄

可能的原因

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

应用程序验证程序显示的信息
  • 参数 1 - 正在访问的打印机句柄。
  • 参数 2 - 结束的堆栈跟踪。 如果堆栈跟踪不为 NULL,请使用 dps 转储堆栈跟踪。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: PRINTER_HANDLE_ALREADY_CLOSED
  • 停止代码: 0000A005
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

尝试使用未知打印机句柄

可能的原因

尝试使用未打开的打印机句柄,方法是在 Windows Vista) 、AddPrinterA 或 AddPrinterW 上调用 OpenPrinterA、OpenPrinterW、OpenPrinter2W (。 若要查看尝试此操作的例程的堆栈跟踪,请在调试器中使用“k”命令。

应用程序验证程序显示的信息
  • 参数 1 - 正在访问的打印机句柄。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: INVALID_PRINTER_HANDLE
  • 停止代码: 0000A006
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

尝试使用关闭的打印机更改通知句柄

可能的原因

打印机更改通知句柄在关闭后使用。 若要查看尝试使用关闭的打印机更改通知句柄的例程,请使用调试器中的“k”命令转储当前堆栈跟踪。 若要转储关闭句柄的例程的堆栈跟踪,请将 dps 命令与 stop 的第二个参数一起使用。

应用程序验证程序显示的信息
  • 参数 1 - 正在访问的打印机更改通知句柄。
  • 参数 2 - 结束的堆栈跟踪。 如果堆栈跟踪不为 NULL,请使用 dps 转储堆栈跟踪。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: PRINTER_CHANGE_NOTIFICATION_HANDLE_ALREADY_CLOSED
  • 停止代码: 0000A007
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

尝试使用无效的打印机更改通知句柄

可能的原因

未使用 FindFirstPrinterChangeNotification Win32 API 函数打开的句柄作为打印机更改通知句柄传递。 若要查看尝试此操作的例程的堆栈跟踪,请在调试器中使用“k”命令。

应用程序验证程序显示的信息
  • 参数 1 - 正在访问的打印机更改通知句柄。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: UNKNOWN_PRINTER_CHANGE_NOTIFICATION_HANDLE
  • 停止代码: 0000A008
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

尝试使用释放PRINTER_NOTIFY_INFO对象

可能的原因

释放PRINTER_NOTIFY_INFO对象后使用了该对象。 若要查看尝试使用释放PRINTER_NOTIFY_INFO对象的例程,请使用调试器中的“k”命令转储当前堆栈跟踪。 若要转储关闭句柄的例程的堆栈跟踪,请将 dps 命令与 stop 的第二个参数一起使用。

应用程序验证程序显示的信息
  • 参数 1 - 正在访问的PRINTER_NOTIFY_INFO的地址。
  • 参数 2 - 结束的堆栈跟踪。 如果堆栈跟踪不为 NULL,请使用 dps 转储堆栈跟踪。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: PRINTER_NOTIFY_INFO_ALREADY_FREED
  • 停止代码: 0000A009
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

尝试使用无效PRINTER_NOTIFY_INFO对象

可能的原因

FindNextPrinterChangeNotification Win32 API 函数未打开PRINTER_NOTIFY_INFO对象。 若要查看尝试此操作的例程的堆栈跟踪,请在调试器中使用“k”命令。

应用程序验证程序显示的信息
  • 参数 1 - 正在访问的PRINTER_NOTIFY_INFO的地址。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: INVALID_PRINTER_NOTIFY_INFO
  • 停止代码: 0000A00A
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

打开的打印机句柄过多

可能的原因

打开的打印机句柄过多。 可能存在资源泄漏。

应用程序验证程序显示的信息
  • 参数 1 - 当前打开的打印机句柄数。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: TOO_MANY_OPENED_PRINTER_HANDLES
  • 停止代码: 0000A00B
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

OpenPrinter2W 似乎已从早期版本的 Windows 的 winspool.drv 导出

可能的原因

未知。 向 Microsoft 报告此错误。

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

其他信息
  • 测试层: PrintAPI
  • 停止 ID: WINSPOOL_OPENPRINTER2W_EXPORTED_ON_PRE_VISTA_OS
  • 停止代码: 0000A00C
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

打开的 PrintTicket 提供程序处理 (HPTPROVIDER)

可能的原因

通过调用 PTOpenProvider (Ex) 打开了太多 PrintTicket 提供程序句柄。 这可能是由于不再需要句柄时不调用 PTCloseProvider 而导致资源泄漏。

应用程序验证程序显示的信息
  • 参数 1 - 当前打开的 PrintTicket 提供程序句柄的数目。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: TOO_MANY_OPENED_PRINT_TICKET_PROVIDER_HANDLES
  • 停止代码: 0000A00D
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

尝试使用关闭的 PrintTicket 提供程序句柄 (HPTPROVIDER)

可能的原因

PrintTicket 提供程序句柄在释放后使用。 若要查看尝试使用关闭的 PrintTicket 提供程序处理程序的例程,请使用调试器中的“k”命令转储当前堆栈跟踪。 若要转储关闭句柄的例程的堆栈跟踪,请将 dps 命令与 stop 的第二个参数一起使用。

应用程序验证程序显示的信息
  • 参数 1 - 正在访问的 HPTPROVIDER 句柄。
  • 参数 2 - 结束的堆栈跟踪。 如果堆栈跟踪不为 NULL,请使用 dps 转储堆栈跟踪。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: PRINT_TICKET_PROVIDER_HANDLE_ALREADY_CLOSED
  • 停止代码: 0000A00E
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

尝试使用未知的 PrintTicket 提供程序句柄 (HPTPROVIDER)

可能的原因

使用了未通过调用 PTOpenProvider 或 PTOpenProviderEx 打开的 PrintTicket 提供程序句柄。

应用程序验证程序显示的信息
  • 参数 1 - 正在访问的 HPTPROVIDER 句柄。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: UNKNOWN_PRINT_TICKET_PROVIDER_HANDLE
  • 停止代码: 0000A00F
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

使用 PrintTicket 提供程序句柄时检测到的争用条件

可能的原因

在多个线程中同时使用 PrintTicket 提供程序句柄。 这需要对句柄的访问进行应用程序级别的同步。 PrintTicket 提供程序句柄不是线程安全的,这意味着不允许在多个线程中同时使用 PrintTicket 提供程序句柄。 相反,应用程序应在每个线程中打开单独的 PrintTicket 提供程序句柄,或使用 Win32 同步 API 提供对 PrintTicket 提供程序句柄的自定义同步访问。 Win32 同步 API 在 http://msdn.microsoft.com/library/en-us/dllproc/base/synchronization_functions.asp.

应用程序验证程序显示的信息
  • 参数 1 - 正在访问的 PrintTicket 提供程序句柄。
  • 参数 2 - 当前线程 ID。
  • 参数 3 - 并发线程的线程 ID。
  • 参数 4 - 并发计数。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: MULTITHREADED_ACCESS_TO_PRINT_TICKET_PROVIDER_HANDLE
  • 停止代码: 0000A010
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

检测到对 PrintTicket 提供程序句柄的潜在多线程访问

可能的原因

这是一条警告,指示 PrintTicket 提供程序句柄在与创建它的线程不同的线程中使用。 这可能需要应用程序级同步才能安全地访问句柄。 PrintTicket 提供程序句柄不是线程安全的,这意味着不允许在多个线程中同时使用 PrintTicket 提供程序句柄。 相反,应用程序应在每个线程中打开单独的 PrintTicket 提供程序句柄,或使用 Win32 同步 API 提供对 PrintTicket 提供程序句柄的自定义同步访问。 Win32 同步 API 在 http://msdn.microsoft.com/library/en-us/dllproc/base/synchronization_functions.asp.

应用程序验证程序显示的信息
  • 参数 1 - 正在访问的 PrintTicket 提供程序句柄。
  • 参数 2 - 初始化线程的线程 ID。
  • 参数 3 初始化 的堆栈跟踪。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: PRINT_TICKET_PROVIDER_HANDLE_ACCESSED_NOT_ON_THE_THREAD_THAT_OPENED_IT
  • 停止代码: 0000A011
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

检测到泄漏的 PrintTicket 提供程序句柄

可能的原因

线程退出时检测到打开的 PrintTicket 提供程序句柄。 创建例程在退出之前可能没有调用 PTCloseProvider () 来关闭它。 若要对此停止进行故障排除,请使用此验证程序停止的第二个参数提供堆栈跟踪,确定打开 PrintTicket 提供程序句柄的线程。 在调试器中使用 dps 命令转储堆栈跟踪。 查找名为 vfPrint 的第一个非 prntvpt 和非 vfPrint 模块名称!VfPTOpenProvider 或 vfPrint!VfPTOpenProviderEx - 这通常是列表中的第 4 个或第 6 个堆栈帧。

应用程序验证程序显示的信息
  • 参数 1 - PrintTicket 提供程序句柄泄漏。
  • 参数 2 - 初始化堆栈跟踪。 如果堆栈跟踪不是 NULL,请使用 dps 转储堆栈跟踪。
  • 参数 3 打开 句柄的线程的线程 ID。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: LEAKED_PRINT_TICKET_PROVIDER_HANDLE
  • 停止代码: 0000A012
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

打开的打印机更改通知句柄太多

可能的原因

打开的打印机更改通知句柄太多。 可能存在资源泄漏。 一种常见的资源泄漏形式是例程将打开打印机更改通知句柄,而不是在退出之前关闭它。

应用程序验证程序显示的信息
  • 参数 1 - 当前打开的打印机更改通知句柄数。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: TOO_MANY_OPENED_PRINTER_CHANGE_NOTIFICATION_HANDLES
  • 停止代码: 0000A013
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

打开PRINTER_NOTIFY_INFO对象太多

可能的原因

打开PRINTER_NOTIFY_INFO对象太多。 可能存在资源泄漏。 资源泄漏的一种常见形式是例程会在退出之前打开PRINTER_NOTIFY_INFO对象而不将其关闭。

应用程序验证程序显示的信息
  • 参数 1 - 当前打开PRINTER_NOTIFY_INFO对象的数目。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: TOO_MANY_OPENED_PRINTER_NOTIFY_INFO_OBJECTS
  • 停止代码: 0000A014
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

尝试使用无效的 PrintTicket

可能的原因

当应用程序使用无效的 PrintTicket 调用 PrintTicket 方法时,会发生此验证程序停止。

应用程序验证程序显示的信息
  • 格式: - 当应用程序使用无效的 PrintTicket 调用 %lS 方法时,导致此验证程序停止
  • 参数 1 - PTConform 返回的错误消息。 如果此参数不为 NULL,请使用 du 转储消息。
  • 参数 2 - PrintTicket XML 文本。 如果此参数不为 NULL,请使用 du 转储 XML。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: INVALID_APPLICATION_PRINTTICKET
  • 停止代码: 0000A015
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

尝试使用无效的 PrintCapabilities 文档

可能的原因

当应用程序调用 PrintCapabilities 文档无效的 PrintTicket 方法时,将停止此验证程序。

应用程序验证程序显示的信息
  • 格式: - 当应用程序使用无效的 PrintCapabilities 文档调用 %lS 方法时,导致此验证程序停止
  • 参数 1 - PTConform 返回的错误消息。 如果此参数不为 NULL,请使用 du 转储消息。
  • 参数 2 - PrintCapabilities XML 文本。 如果此参数不为 NULL,请使用 du 转储 XML。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: INVALID_APPLICATION_PRINTCAPABILITIES
  • 停止代码: 0000A016
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

向 PrintTicket 方法传递了无效的 NULL 参数

可能的原因

当应用程序调用具有无效 NULL 参数的 PrintTicket 方法时,会发生此验证程序停止。

应用程序验证程序显示的信息
  • 格式: - 当应用程序使用 NULL %lS 参数调用 %lS 方法时,导致此验证程序停止
  • 参数 1 - 未使用。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: PRINTTICKET_API_INVALID_NULL_ARGUMENT
  • 停止代码: 0000A017
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

PTConform 遇到意外错误

可能的原因

当 PrintVerifier 在尝试验证 PrintTicket/PrintCapabilities 是否符合 PrintSchema 时遇到意外错误时,将停止此验证程序。 将此错误报告给 Microsoft,因为它可能是 PrintVerifier 中的问题。

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

其他信息
  • 测试层: PrintAPI
  • 停止 ID: PTCONFORM_UNEXPECTED_ERROR
  • 停止代码: 0000A018
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

从 DllMain 调用的非法打印 API

可能的原因

调用了不支持从 DllMain 中调用的打印 API。 许多 Win32 API(而不仅仅是 Win32 打印 API)无法从 DllMain 调用。 有关详细信息,请阅读 MSDN 库中有关 DllMain 的文档。

应用程序验证程序显示的信息
  • 格式: -  从 DllMain 调用的打印 API: %s
  • 参数 1 - 未使用。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: UNSUPPORTED_API_CALL_IN_DLLMAIN
  • 停止代码: 0000A019
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

检测到泄漏的假脱机文件句柄

可能的原因

应用程序终止时检测到打开的后台处理程序文件句柄。 最有可能的是,未调用 CloseSpoolFileHandle () 。 若要对此停止进行故障排除:确定打开打印机句柄的线程。 如果参数 2 不为 NULL,请使用 dps 转储堆栈。 查找名为 vfPrint 的第一个非 winspool 和非 vfPrint 模块名称!VfHookOpenPrinter* 或 vfPrint!VfHookAddPrinter*。 此例程通常是列表中的第 4 个或第 6 个堆栈帧。

应用程序验证程序显示的信息
  • 参数 1 - 处理泄漏。
  • 参数 2 - 初始化堆栈跟踪。 如果此参数不为 NULL,请使用 dps 转储堆栈。
  • 参数 3 打开 句柄的线程的线程 ID。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: LEAKED_SPOOL_FILE_HANDLE
  • 停止代码: 0000A01A
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 不
  • 创建回溯: 不

尝试使用已关闭的后台处理程序文件句柄

可能的原因

后台处理程序文件句柄在关闭后使用。 若要对此停止进行故障排除,请使用调试器中的“k”命令转储当前堆栈跟踪,以识别尝试使用已关闭句柄的例程。 使用 dps 命令和 stop 的第二个参数,转储关闭句柄的例程的堆栈跟踪。

应用程序验证程序显示的信息
  • 参数 1 - 正在访问的后台处理文件句柄。
  • 参数 2 - 结束的堆栈跟踪。 如果堆栈跟踪不是 NULL,请使用 dps 转储堆栈跟踪。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: SPOOL_FILE_HANDLE_ALREADY_CLOSED
  • 停止代码: 0000A01B
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

尝试使用未知的后台处理程序文件句柄

可能的原因

尝试使用未通过调用 GetSpoolFileHandle 或 CommitSpoolData 打开的后台处理程序文件句柄。 使用调试器中的“k”命令查看尝试此操作的例程的堆栈跟踪。

应用程序验证程序显示的信息
  • 参数 1 - 正在访问的句柄。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: INVALID_SPOOL_FILE_HANDLE
  • 停止代码: 0000A01C
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

打开的后台打印文件句柄太多

可能的原因

已打开过多的后台处理文件句柄。 可能存在资源泄漏。

应用程序验证程序显示的信息
  • 参数 1 - 当前打开的句柄数。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: TOO_MANY_OPENED_SPOOL_FILE_HANDLES
  • 停止代码: 0000A01D
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

DEVMODE 缓冲区参数跨不可读内存页 () 。

可能的原因

此停止可能由以下几个条件引起:DEVMODE 缓冲区已释放,通过为 dmSize 和 dmDriverExtra 成员分配一个大于其应的值而错误地构造了 DEVMODE 缓冲区,或者在预期非 NULL 缓冲区的情况下使用了 NULL 开发模式缓冲区。

应用程序验证程序显示的信息
  • 格式: -  此验证程序停止是由调用具有错误 DEVMODE 缓冲区的打印子系统的软件组件引起的。 查看当前堆栈跟踪和检查:分配、构造和开发模式的生存期,以确定 bug 位置。
  • 参数 1 - 错误的 DEVMODE 缓冲区
  • 参数 2 - 根据 devmode dmSize 和 dmDriverExtra 字段计算的总缓冲区大小。 如果缓冲区完全位于不可读内存中,则为零。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: DEVMODE_BUFFER_SPANS_IN_NON_READABLE_MEMORY_PAGE
  • 停止代码: 0000A01E
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

使用活动 COM 回调卸载模块。

可能的原因

卸载目标模块时,检测到 COM 接口上的正 refcount。 可能是由于模块中 DllCanUnloadNow 导出的实现不正确或引用计数不正确导致的。

应用程序验证程序显示的信息
  • 格式: -  此验证程序停止是由 %lS 模块卸载引起的,而系统仍持有指向它的 %lS 指针。
  • 参数 1 - COM 接口地址。
  • 参数 2 - 提供回调的堆栈跟踪。 如果堆栈跟踪不为 NULL,请使用 dps 转储堆栈跟踪。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: MODULE_UNLOAD
  • 停止代码: 0000A01F
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

RegisterForPrintAsyncNotifications 返回的异步通知句柄未正确释放

可能的原因

在程序退出之前,RegisterForPrintAsyncNotifications API 函数分配的句柄尚未释放。 最有可能的是,在退出之前,需要通过调用 UnRegisterForPrintAsyncNotifications () 来释放它。 排查此停止问题:确定调用 winspool 的例程,以使用此验证程序停止的第二个参数代表其分配句柄。 在调试器中使用 dps 命令转储初始化堆栈跟踪。 查找名为 vfPrint 的第一个非 winspool 和非 vfPrint 模块名称!VfHookRegisterForPrintAsyncNotifications。 此例程通常位于第三个堆栈帧中。

应用程序验证程序显示的信息
  • 参数 1 - Handle 值。
  • 参数 2 - 初始化堆栈跟踪。 如果堆栈跟踪不为 NULL,请使用 dps 转储堆栈跟踪。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: LEAKED_ASYNC_NOTIFY_HANDLE
  • 停止代码: 0000A020
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

尝试在 UnRegisterForPrintAsyncNotifications 中使用无效句柄。

可能的原因

RegisterForPrintAsyncNotifications Win32 API 函数未打开句柄。 若要查看尝试此操作的例程的堆栈跟踪,请在调试器中使用“k”命令。

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

其他信息
  • 测试层: PrintAPI
  • 停止 ID: INVALID_ASYNC_NOTIFY_HANDLE
  • 停止代码: 0000A021
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

尝试在 UnRegisterForPrintAsyncNotifications API 函数中使用闭合句柄

可能的原因

异步通知句柄在关闭后已使用。 若要查看尝试使用闭合句柄的例程,请使用调试器中的“k”命令转储当前堆栈跟踪。 若要转储关闭句柄的例程的堆栈跟踪,请将 dps 命令与 stop 的第二个参数一起使用。

应用程序验证程序显示的信息
  • 参数 1 - Handle 值。
  • 参数 2 - 结束的堆栈跟踪。 如果堆栈跟踪不为 NULL,请使用 dps 转储堆栈跟踪。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: ASYNC_NOTIFY_HANDLE_ALREADY_CLOSED
  • 停止代码: 0000A022
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

第三方函数报告失败,但会增加输入接口的引用计数

可能的原因

第三方方法接收接口指针作为输入。 当此类方法返回失败代码时,接口引用计数应保持不变。 但在这种情况下,引用计数已增加。

应用程序验证程序显示的信息
  • 格式: -  %lS 方法返回 %x 错误代码,但增加了 %lS 参数的引用计数。
  • 参数 1 - 调用接口指针。 如果为 NULL,则调用的函数为静态函数。
  • 参数 2 - 输入接口指针。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: REFCOUNT_PLUS_AFTER_FAIL
  • 停止代码: 0000A023
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

Windows API 函数报告失败,但增加了输入接口的引用计数

可能的原因

API 方法接收接口指针作为输入。 当此类方法返回失败代码时,接口引用计数应保持不变。 但在这种情况下,引用计数已增加。 请向 Microsoft 报告此错误,因为它可能是 API 代码中的问题。

应用程序验证程序显示的信息
  • 格式: -  %lS 方法返回 %x 错误代码,但增加了 %lS 参数的引用计数。
  • 参数 1 - 调用接口指针。 如果为 NULL,则调用的函数为静态函数。
  • 参数 2 - 输入接口指针。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: REFCOUNT_PLUS_AFTER_API_FAIL
  • 停止代码: 0000A024
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

操作系统违反 IPrintAsyncNotifyChannel 协定。

可能的原因

IPrintAsyncNotifyChannel 的平台实现违反了 IPrintAsyncNotifyChannel 隐含或定义的部分特殊协定。 IPrintAsyncNotifyChannel 对 AddRef 和 Release 有特殊例外。 这要求平台使用与创建通道时相同的指针值调用 OnEventNotify 和 ChannelClosed。

应用程序验证程序显示的信息
  • 格式: 使用错误的接口指针调用了 - %s。
  • 参数 1 - 实际接口指针。
  • 参数 2 - 预期的接口指针。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: ASYNCCHANNEL_OS_CONTRACT_VIOLATION
  • 停止代码: 0000A025
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

通道使用者违反 IPrintAsyncNotifyChannel 协定。

可能的原因

在双向通道上,调用 SendNotification、CloseChannel 或使接口指针上的最终 Release 放弃“所有权”。 创建通道并发送第一个通知后,在调用回调的 OnEventNotify 之前,无法调用 Release () 。 如果调用 CloseChannel () 或收到 ChannelClosed 通知,则不得执行最终 Release () 调用。

应用程序验证程序显示的信息
  • 格式: - %s 已调用,但通道“所有权”当前属于打印后台处理程序
  • 参数 1 - IPrintAsyncNotifyChannel 接口指针。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: ASYNCCHANNEL_CLIENT_CONTRACT_VIOLATION
  • 停止代码: 0000A026
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

关闭 IPrintAsyncNotifyChannel 期间检测到争用

可能的原因

请向 Microsoft 报告此停止。 此停止表示通知到达 _during_ 对 CloseChannel 的调用。 如果出现这种情况,则使用者可能无法正确释放通道。 不应经常遇到此停止。 可以通过在创建双向通道之前始终确保侦听器可用,以及/或确保在尝试关闭已发送通知但未收到回调的通道之前无法启动侦听器来防止此事件。

应用程序验证程序显示的信息
  • 格式: - 在函数 %s 中,已在另一线程上进行调用。 有关详细信息,请参阅帮助。
  • 参数 1 - IPrintAsyncNotifyChannel 接口指针。
  • 参数 2 - 调用的成员函数的线程 ID。
  • 参数 3 - 回调事件函数的线程 ID。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: ASYNCCHANNEL_CLOSECHANNEL_RACE_DETECTED
  • 停止代码: 0000A027
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

调用在 GUI 线程上进行网络调用的打印 API。 这可能会导致时间 UI 挂起不受限制。

可能的原因

调用了一个打印 API,该 API 在 GUI 线程上进行网络调用。 这可能会导致时间 UI 挂起不受限制。 通常,需要在没有消息泵的工作线程上调用此类 API。

应用程序验证程序显示的信息
  • 格式: - %s 是在作为 GUI 线程的线程上调用的。 这可能会导致时间 UI 挂起不受限制。
  • 参数 1 - 顶级可见窗口的 HWND。
  • 参数 2 - 当前线程 ID。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: CALLING_NETBOUND_PRINT_API_ON_GUI_THREAD
  • 停止代码: 0000A028
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

调用将弹出用户界面的 API 是 Session0。

可能的原因

调用了将弹出用户界面的 API Session0。

应用程序验证程序显示的信息
  • 格式: -  Session0 API 中的非法调用:%s
  • 参数 1 - 未使用。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintAPI
  • 停止 ID: UNSUPPORTED_API_CALLED_IN_SESSION_ZERO
  • 停止代码: 0000A029
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

检测到第一次机会访问冲突

可能的原因

当打印机驱动程序尝试访问由于不可执行、已释放或取消提交或保留但未提交而无法访问的虚拟内存地址时,将生成此停止。 若要调试此停止:$ u parameter2 - 取消组合可疑代码 $ .exr parameter3 - 以显示异常信息;$ .cxr parameter4 - 显示异常上下文信息 $ kb - 在引发异常时显示堆栈跟踪。

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

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

线程尝试将整数值除以整数除以零

可能的原因

当打印机驱动程序尝试将整数值除以整数除以零的整数除数时,将生成此停止。 若要调试此停止:$ u parameter1 - 取消组合可疑代码 $ .exr parameter2 - 以显示异常信息;$ .cxr 参数3 - 显示异常上下文信息 $ kb - 在引发异常时显示堆栈跟踪。

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

其他信息
  • 测试层: PrintDriver
  • 停止 ID: INT_DIVIDE_BY_ZERO
  • 停止代码: 0000D001
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

线程尝试在不提供对齐方式的硬件上读取或写入未对齐的数据

可能的原因

当驱动程序尝试在不提供对齐的硬件上读取或写入未对齐的数据时,将生成此停止。 例如,16 位值必须在 2 字节边界上对齐;4 字节边界上的 32 位值等。 若要调试此停止:$ u parameter1 - 取消组合罪魁祸首代码 $ .exr parameter2 - 以显示异常信息;$ .cxr 参数3 - 显示异常上下文信息 $ kb - 在引发异常时显示堆栈跟踪。

应用程序验证程序显示的信息
  • 参数 1 - 发生数据类型不一致的代码。
  • 参数 2 - 异常记录。 使用 .exr 显示它。
  • 参数 3 - Context record。 使用 .cxr 显示它。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: DATATYPE_MISALIGNMENT
  • 停止代码: 0000D002
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

当前堆栈跟踪的句柄异常无效

可能的原因

当堆栈顶部的函数将无效句柄传递给系统例程时,将生成此停止。 通常,kb 命令会显示在调用堆栈中传递的句柄的值。 句柄将是调用的参数之一。 通常是第一个参数。 null 句柄值是无效句柄值的一个示例。 如果句柄值看起来有效,请使用 !htrace 调试器扩展查看涉及句柄值的操作历史记录。 有时,如果在关闭句柄后使用该句柄,则看起来有效的句柄值可能无效。

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

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

核心驱动程序正在向插件发送已关闭的打印机句柄

可能的原因

核心驱动程序正在向插件发送已关闭的打印机句柄。 将此错误报告给 Microsoft,因为它可能是 Microsoft 核心打印机驱动程序模块中的问题。 若要识别尝试使用已关闭打印机句柄的例程,请在调试器中使用“k”命令转储当前堆栈跟踪。 若要转储关闭句柄的例程的堆栈跟踪,请将 dps 命令与 stop 的第二个参数一起使用。

应用程序验证程序显示的信息
  • 参数 1 - 正在发送到插件的打印机句柄。
  • 参数 2 - 结束例程的堆栈跟踪。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: PRINTER_HANDLE_ALREADY_CLOSED
  • 停止代码: 0000D004
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

核心驱动程序正在向插件发送未知的打印机句柄

可能的原因

核心驱动程序正在向插件发送未通过调用 Windows Vista 中的 OpenPrinterA、OpenPrinterW、OpenPrinter2W、AddPrinterA 或 AddPrinterW 打开的打印机句柄。 将此错误报告给 Microsoft,因为它可能是 Microsoft 核心打印机驱动程序模块中的问题。

应用程序验证程序显示的信息
  • 参数 1 - 正在将打印机句柄发送到插件。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: INVALID_PRINTER_HANDLE
  • 停止代码: 0000D005
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

插件关闭了打印机手柄

可能的原因

插件关闭了作为核心驱动程序输入接收的打印机句柄。 这违反了从核心驱动程序调用插件的 WDK 规则。 对 stop 的第二个参数使用 dps,以转储关闭句柄的例程的堆栈跟踪。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由 %lS 处插件模块中的 %lS 方法引起的
  • 参数 1 - 已关闭的打印机句柄。
  • 参数 2 - 结束的堆栈跟踪。 如果堆栈跟踪不是 NULL,请使用 dps 转储堆栈跟踪。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: PLUGIN_CLOSED_PRINTER_HANDLE
  • 停止代码: 0000D006
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

支持的打印架构主要版本数量无效

可能的原因

PrintTicket 提供程序插件返回了无效数量的受支持的打印架构主要版本。 插件中的 IPrintOemPrintTicketProvider::GetSupportedVersions 方法应返回至少一个受支持的主版本。 由于 Windows Vista 仅支持打印架构的一个主要版本,因此插件应返回值 1。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由 %lS 处插件模块中的 %lS 方法引起的
  • 参数 1 - 返回的受支持的架构版本数。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: PRINTTICKET_PROVIDER_INVALID_NUMBER_OF_SUPPORTED_SCHEMA_VERSIONS
  • 停止代码: 0000D007
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

缺少支持的打印架构版本

可能的原因

PrintTicket 提供程序插件指示它返回了至少一个受支持的打印架构版本,但未能返回任何版本。 对插件中的 IPrintOemPrintTicketProvider::GetSupportedVersions 方法的调用接受两个 out 指针作为参数。 ppVersions 参数指向表示支持的打印架构主要版本的整数数组。 cVersions 参数指向要返回的整数数组中的元素数。 当插件在 cVersions 中返回有效数字但无法返回 ppVersions 数组中的任何内容时,将停止此验证程序。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由位于 %lS 的插件模块中的 %lS 方法引起的
  • 参数 1 - 返回的受支持的打印架构版本数。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: PRINTTICKET_PROVIDER_MISSING_SUPPORTED_SCHEMA_VERSION
  • 停止代码: 0000D008
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

打印架构主版本无效

可能的原因

PrintTicket 提供程序插件返回了无效的打印架构主版本。 在插件中调用 IPrintOemPrintTicketProvider::GetSupportedVersions 方法应返回值 1 (1) ,因为 Windows Vista 支持的唯一打印架构主版本为 1。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由位于 %lS 的插件模块中的 %lS 方法引起的
  • 参数 1 - 打印返回的架构版本。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: PRINTTICKET_PROVIDER_INVALID_SUPPORTED_SCHEMA_VERSION
  • 停止代码: 0000D009
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

无效的 OEMPTOPTS 值

可能的原因

PrintTicket 提供程序插件返回了无效的 OEMPTOPTS 值。 插件中 IPrintOemPrintTicketProvider::BindPrinter 方法的参数之一是指向 OEMPTOPTS 枚举的指针。 插件应将此参数的值设置为 Windows Vista 支持的值之一。 Windows Vista 支持的值OEMPT_DEFAULT和OEMPT_NOSNAPSHOT。 当插件返回的值不是这些支持的值之一时,会发生此验证程序停止。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由位于 %lS 的插件模块中的 %lS 方法引起的
  • 参数 1 返回的 OEMPTOPTS  值。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: PRINTTICKET_PROVIDER_INVALID_OEMPTOPTS
  • 停止代码: 0000D00A
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

缺少打印架构专用命名空间

可能的原因

PrintTicket 提供程序插件指示它返回至少一个打印架构专用命名空间,但未返回任何命名空间。 插件中对 IPrintOemPrintTicketProvider::BindPrinter 方法的调用包含两个 out 指针参数,插件可以通过这些参数返回有关它支持的打印架构专用命名空间的信息。 ppNamespaces 参数指向表示支持的打印架构专用命名空间的字符串数组。 cNamespaces 参数指向要返回的字符串数组中的元素数。 当插件在 cNamespaces 中返回有效数字但不返回 ppNamespaces 数组中的任何内容时,将停止此验证程序。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由位于 %lS 的插件模块中的 %lS 方法引起的
  • 参数 1 - 预期的命名空间数。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: PRINTTICKET_PROVIDER_MISSING_NAMESPACE
  • 停止代码: 0000D00B
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

在插件中检测到不正确的引用计数

可能的原因

WDK 指出,插件必须在实现 IUnknown::AddRef 和 IUnknown::Release 方法时执行准确的引用计数。 插件接口对象的生存期取决于准确的引用计数。 如果引用计数不准确,则可能会导致资源泄漏或导致插件过早卸载,从而导致驱动程序失败。 在插件中检测到不正确的引用计数时,会发生此验证程序停止。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由 %lS 处的插件模块引起的
  • 参数 1 - 预期的引用计数。
  • 参数 2 - 插件维护的实际引用计数。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: PLUGIN_MISMATCHED_REFCOUNT
  • 停止代码: 0000D00C
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

pptl 在 OEMNextBand 中为 NULL

可能的原因

核心驱动程序传入插件中 OEMNextBand 挂钩的 pptl 为 NULL。 核心驱动程序应始终将有效的 pptl 发送到插件中的 OEMNextBand 挂钩。 将此错误报告给 Microsoft,因为这可能是 Microsoft 核心打印机驱动程序模块中的问题。

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

其他信息
  • 测试层: PrintDriver
  • 停止 ID: PPTL_IS_NULL_IN_OEMNEXTBAND
  • 停止代码: 0000D00D
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

从 EnablePDEV 方法返回S_OK后,插件返回 NULL PDEV

可能的原因

插件返回的专用 PDEV 为 NULL,但 EnablePDEV 方法的返回值S_OK指示成功。 WDK 指出,如果插件的 EnablePDEV 方法返回S_OK状态,则它还必须分配其专用 PDEV 结构的实例,对其进行初始化,并在方法的 pDevOem 参数中返回此结构的地址。 当插件从 EnablePDEV 方法的实现返回状态为S_OK时,插件未返回有效的专用 PDEV 结构时,会发生此验证程序停止。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由 %lS 处的插件模块引起的
  • 参数 1 - 未使用。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: PLUGIN_PRIVATE_PDEV_IS_NULL
  • 停止代码: 0000D00E
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

插件返回的专用 DEVMODE 小于允许的最小大小

可能的原因

插件返回的专用 DEVMODE 大小至少应为 OEM_DMEXTRAHEADER。 使用 OEMDM_SIZE 模式调用插件时,插件的 DevMode 方法必须返回存储其专用 DEVMODE 成员所需的大小。 此值是在首次调用方法时设置的。 插件中的 DevMode 方法必须将 OEMDMPARAM 结构中 cbBufSize 成员的值设置为所需的字节数,并且该值必须大于或等于 OEM_DMEXTRAHEADER 的大小。 当 OEMDMPARAM 结构的 cbBufSize 成员中返回的大小小于 OEM_DMEXTRAHEADER 的大小时,会发生此验证程序停止。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由 %lS 处的插件模块引起的
  • 参数 1 - 当前 DevMode 回调的模式。
  • 参数 2 - 插件的专用 DEVMODE 的大小。
  • 参数 3 - OEM_DMEXTRAHEADER的大小。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: INVALID_PLUGIN_PRIVATE_DEVMODE_SIZE
  • 停止代码: 0000D00F
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

插件返回的专用 DEVMODE 的大小与 DevMode (OEMDM_SIZE) 调用返回的大小不同

可能的原因

插件应返回一个专用 DEVMODE,其大小应与使用 OEMDM_SIZE 模式的 DevMode 调用返回的大小相同。 当使用OEMDM_SIZE模式调用 DevMode 方法时,插件的 DevMode 方法必须返回存储其专用 DEVMODE 成员所需的大小。 此值是一个常量,在首次调用该方法时设置。 当对插件的 DevMode 方法进行后续调用时,它不得更改。 当插件中的 DevMode 方法返回的值与首次调用时返回的值不同时,将发生此验证程序停止。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由 %lS 处的插件模块引起的
  • 参数 1 - 当前 Devmode 回调的模式。
  • 参数 2 - pOEMDMOut 中指定的输出插件专用 DEVMODE 的大小。
  • 参数 3 - pOEMDMParam 中指定的输出插件专用 DEVMODE 的大小。
  • 参数 4 - 在OEMDM_SIZE调用期间指定的插件专用 DEVMODE 的大小。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: PLUGIN_PRIVATE_DEVMODE_MISMATCHED_SIZE
  • 停止代码: 0000D010
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

插件从 GetInfo (OEMGI_GETSIGNATURE) 调用返回无效签名

可能的原因

在 GetInfo 调用期间以OEMGI_GETSIGNATURE模式调用插件时,应返回有效的非零签名。 插件中的 GetInfo 方法必须返回唯一的四字节标识签名。 当插件中的 GetInfo (OEMGI_GETSIGNATURE) 方法返回零签名时,会发生此验证程序停止。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由 %lS 处的插件模块引起的
  • 参数 1 - 未使用。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: INVALID_PLUGIN_SIGNATURE
  • 停止代码: 0000D011
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

插件在专用 DEVMODE 中返回的签名与从 GetInfo 调用返回的签名不同

可能的原因

插件应返回一个专用 DEVMODE,其中包含与插件中 GetInfo 方法OEMGI_GETSIGNATURE调用返回的相同唯一的四字节标识签名。 如果这两个签名不相同,则会发生此验证程序停止。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由 %lS 处的插件模块引起的
  • 参数 1 当前 DevMode 方法调用的 - Mode。
  • 参数 2 - 输出插件专用 DEVMODE 中指定的签名。
  • 参数 3 - 在 GetInfo 调用期间指定的签名。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: PLUGIN_PRIVATE_DEVMODE_MISMATCHED_SIGNATURE
  • 停止代码: 0000D012
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

插件中的 EnableDriver 方法失败。

可能的原因

插件中的 EnableDriver 方法预计不会失败,尽管在特殊情况下可能会失败。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由 %lS 处的插件模块引起的
  • 参数 1 -EnableDriver 返回的 HRESULT 。
  • 参数 2 - 插件设置的错误代码。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: ENABLEDRIVER_FAILED
  • 停止代码: 0000D013
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

插件中的 EnableDriver 方法在未设置最后一个错误代码的情况下失败

可能的原因

插件中的 EnableDriver 方法预计不会失败,尽管在特殊情况下可能会失败。 如果失败,则必须通过调用 SetLastError 来设置最后一个错误代码。 当插件中的 EnableDriver 方法在未设置最后一个错误的情况下失败时,会发生此验证程序停止。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由 %lS 处的插件模块引起的
  • 参数 1 -EnableDriver 返回的 HRESULT 。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: ENABLEDRIVER_FAILED_WITHOUT_ERROR_CODE
  • 停止代码: 0000D014
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

名为 SetBandSize 的核心驱动程序,尽管插件从 DriverDMS 返回了S_OK

可能的原因

如果插件实现 DriverDMS 方法,并且其 DriverDMS 方法的实现返回S_OK,则核心驱动程序不应调用 SetBandSize。 将此错误报告给 Microsoft,因为它可能是 Microsoft 核心打印机驱动程序模块中的问题。

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

其他信息
  • 测试层: PrintDriver
  • 停止 ID: INVALID_SETBANDSIZE_CALL
  • 停止代码: 0000D015
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

核心驱动程序使用无效参数发出 WritePrinter 初始化调用

可能的原因

在 WritePrinter 的初始化调用期间,pdevobj 和 pBuf 参数应为 NULL,cbBuf 应为零。 当核心驱动程序对插件中的 WritePrinter 方法进行初始化调用时,其中一个条件不是真的。 将此错误报告给 Microsoft,因为它可能是 Microsoft 核心打印机驱动程序模块中的问题。

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

其他信息
  • 测试层: PrintDriver
  • 停止 ID: INVALID_WRITEPRINTER_INITIALIZATION_CALL
  • 停止代码: 0000D016
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

插件中的 WritePrinter 方法失败

可能的原因

当插件中的 WritePrinter 方法失败时,会发生此验证程序停止。 这将导致打印作业中止。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由 %lS 处的插件模块引起的
  • 参数 1 - 由插件中的 WritePrinter 方法返回的 HRESULT。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: WRITEPRINTER_FAILED
  • 停止代码: 0000D017
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

核心驱动程序向插件发送了无效的 PrintTicket

可能的原因

当从核心驱动程序发送到插件的 PrintTicket 文档不符合 PrintSchema 时,将停止此验证程序。 由于核心驱动程序分析驱动程序的 GPD/PPD 以构造发送到插件的 PrintTicket,因此此停止通常表示驱动程序的 GPD/PPD 中存在 bug。

应用程序验证程序显示的信息
  • 格式: - 当核心驱动程序调用插件的 %lS 方法时,导致此验证程序停止
  • 参数 1 - PTConform 返回的错误消息。 如果此参数不为 NULL,请使用 du 转储消息。
  • 参数 2 - PrintTicket XML 文本。 如果此参数不为 NULL,请使用 du 转储 XML。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: INVALID_COREDRIVER_PRINTTICKET
  • 停止代码: 0000D018
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

插件向核心驱动程序返回了无效的 PrintTicket

可能的原因

如果从插件返回到核心驱动程序的 PrintTicket 文档不符合 PrintSchema,则会发生此验证程序停止。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由位于 %lS 的插件模块中的 %lS 方法引起的
  • 参数 1 - PTConform 返回的错误消息。 如果此参数不为 NULL,请使用 du 转储消息。
  • 参数 2 - PrintTicket XML 文本。 如果此参数不为 NULL,请使用 du 转储 XML。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: INVALID_PLUGIN_PRINTTICKET
  • 停止代码: 0000D019
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

核心驱动程序向插件发送了无效的 PrintCapabilities 文档

可能的原因

当从核心驱动程序发送到插件的 PrintCapabilities 文档不符合 PrintSchema 时,会发生此验证程序停止。 将此错误报告给 Microsoft,因为这可能是 Microsoft 核心打印机驱动程序模块中的问题。

应用程序验证程序显示的信息
  • 格式: - 当核心驱动程序调用插件的 %lS 方法时,导致此验证程序停止
  • 参数 1 - PTConform 返回的错误消息。 如果此参数不为 NULL,请使用 du 转储消息。
  • 参数 2 - PrintCapabilities XML 文本。 如果此参数不为 NULL,请使用 du 转储 XML。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: INVALID_COREDRIVER_PRINTCAPABILITIES
  • 停止代码: 0000D01A
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

插件向核心驱动程序返回了无效的 PrintCapabilities 文档

可能的原因

当从插件返回到核心驱动程序的 PrintCapabilities 文档不符合 PrintSchema 时,将停止此验证程序。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由位于 %lS 的插件模块中的 %lS 方法引起的
  • 参数 1 - PTConform 返回的错误消息。 如果此参数不为 NULL,请使用 du 转储消息。
  • 参数 2 - PrintCapabilities XML 文本。 如果此参数不为 NULL,请使用 du 转储 XML。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: INVALID_PLUGIN_PRINTCAPABILITIES
  • 停止代码: 0000D01B
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

PTConform 遇到意外错误

可能的原因

当 PrintVerifier 在尝试验证 PrintTicket/PrintCapabilities 是否符合 PrintSchema 时遇到意外错误时,将停止此验证程序。 将此错误报告给 Microsoft,因为它可能是 PrintVerifier 中的问题。

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

其他信息
  • 测试层: PrintDriver
  • 停止 ID: PTCONFORM_UNEXPECTED_ERROR
  • 停止代码: 0000D01C
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

打印筛选器使用无效的参数值调用管道管理器接口

可能的原因

当打印筛选器调用具有错误参数值的管道方法时,将停止此验证程序。 使用堆栈跟踪查找打印筛选器 DLL 的名称。

应用程序验证程序显示的信息
  • 格式: -  %s 方法:%s 参数的值无效。
  • 参数 1 - 打印筛选器 GUID。 如果此参数不为 NULL,请使用 dd 转储它。
  • 参数 2 - Argument 值。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: FILTER_INVALID_ARGUMENT
  • 停止代码: 0000D01D
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

对 IPrintPipelinePropertyBag 的打印筛选器调用覆盖或删除公共属性

可能的原因

当打印筛选器更改或删除打印管道属性包中的公共属性时,将停止此验证程序。

应用程序验证程序显示的信息
  • 格式: -  %s 方法:覆盖公共属性 %s
  • 参数 1 - 打印筛选器 GUID。 如果此参数不为 NULL,请使用 dd 转储它。
  • 参数 2 - 属性值 (变体) 。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: FILTER_PROPERTY_BAG_INVALID_CHANGE
  • 停止代码: 0000D01E
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

打印筛选器调用管道管理器接口无序

可能的原因

当打印筛选器以意外顺序调用管道管理器接口方法时,将停止此验证程序。

应用程序验证程序显示的信息
  • 格式: -  %s 接口的调用顺序不正确: %s
  • 参数 1 - 打印筛选器 GUID。 如果此参数不为 NULL,请使用 dd 转储它。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: FILTER_INVALID_CALL_ORDER
  • 停止代码: 0000D01F
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

打印筛选器对管道管理器接口的 AddRef/Release 调用不匹配

可能的原因

当打印筛选器错误地管理管道管理器接口的引用计数时,会发生此验证程序停止。

应用程序验证程序显示的信息
  • 格式: -  接口 %s 引用计数为 %d,预期为 %s。
  • 参数 1 - 打印筛选器 GUID。 如果此参数不为 NULL,请使用 dd 转储它。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: FILTER_REFCOUNT_MISMATCH
  • 停止代码: 0000D020
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

不期望对管道管理器接口方法进行打印筛选器调用

可能的原因

当打印筛选器对管道接口方法进行不必要的或意外调用时,会发生此验证程序停止。 例如,如果打印筛选器对 IPrintWriteStream::Close 进行第二次调用。

应用程序验证程序显示的信息
  • 格式: -  接口方法 %s : %s
  • 参数 1 - 打印筛选器 GUID。 如果此参数不为 NULL,请使用 dd 转储它。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: FILTER_UNEXPECTED_CALL
  • 停止代码: 0000D021
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

管道管理器无序调用打印筛选器接口方法

可能的原因

当管道管理器错误地调用打印筛选器接口的方法时,将停止此验证程序。 将此错误报告给 Microsoft,因为它可能是打印筛选器管道服务中的问题。

应用程序验证程序显示的信息
  • 格式: -  打印筛选器的调用顺序无效: %s
  • 参数 1 - 打印筛选器 GUID。 如果此参数不为 NULL,请使用 dd 转储它。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: PIPELINE_INVALID_CALL_ORDER
  • 停止代码: 0000D022
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

管道管理器调用具有无效参数值的打印筛选器接口方法

可能的原因

当管道管理器调用具有无效参数值的打印筛选器接口时,会发生此验证程序停止。 将此错误报告给 Microsoft,因为它可能是打印筛选器管道服务中的问题。

应用程序验证程序显示的信息
  • 格式: -  方法 %s: %s
  • 参数 1 - 打印筛选器 GUID。 如果此参数不为 NULL,请使用 dd 转储它。
  • 参数 2 - Argument 值。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: PIPELINE_INVALID_INPUT_ARGUMENT
  • 停止代码: 0000D023
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

管道管理器返回无效值以打印筛选器

可能的原因

当管道管理器向打印筛选器返回无效值时,会发生此验证程序停止。 将此错误报告给 Microsoft,因为它可能是打印筛选器管道服务中的问题。

应用程序验证程序显示的信息
  • 格式: -  方法 %s: %s
  • 参数 1 - 打印筛选器 GUID。 如果此参数不为 NULL,请使用 dd 转储它。
  • 参数 2 - Value。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: PIPELINE_INVALID_OUTPUT_ARGUMENT
  • 停止代码: 0000D024
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

对打印机驱动程序的调用更改了安全上下文。

可能的原因

当打印驱动程序调用 RevertToSelf () 或 RevertToPrinterSelf () 但未通过调用 ImpersonatePrinterClient () 将安全上下文更改回模拟用户时,通常会发生此停止。 这是不允许的,并且打印后台处理程序行为在发生这种情况后未定义。 这也可能会造成安全漏洞,并允许远程提升特权类型的攻击。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由插件模块'%lS'中'%lS'方法引起的
  • 参数 1 - 驱动程序条目中的帐户名称。 键入“du address”以转储它(如果不是 NULL)。
  • 参数 2 - 驱动程序退出时的帐户名称。 键入“du address”以转储它(如果不是 NULL)。
  • 参数 3 - 驱动程序入口处的安全令牌
  • 参数 4 - 驱动程序退出时的安全令牌

其他信息
  • 测试层: PrintDriver
  • 停止 ID: SECURITY_CONTEXT_CHANGED_BY_A_PRINT_DRIVER_CALL
  • 停止代码: 0000D025
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

打印筛选器向管道管理器发送了无效的 PrintTicket

可能的原因

如果 IPrintTicketPart 部件已发送到 SetPrintTicket 方法,但其内容不符合 PrintSchema,则会发生此验证程序停止。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止位于 %lS 方法中。 使用 GUID 标识打印筛选器。
  • 参数 1 - 打印筛选器 GUID。 如果此参数不为 NULL,请使用 dd 转储它。
  • 参数 2 - PTConform 返回的错误消息。 如果此参数不为 NULL,请使用 du 转储消息。
  • 参数 3 - PrintTicket XML 文本。 如果此参数不为 NULL,请使用 du 转储 XML。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: INVALID_FILTER_PRINTTICKET
  • 停止代码: 0000D026
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

打印筛选器从管道管理器收到无效的 PrintTicket

可能的原因

如果通过 GetPrintTicket 方法从打印筛选器收到 IPrintTicketPart 部件,但其内容不符合 PrintSchema,则会发生此验证程序停止。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止位于 %lS 方法中。 使用 GUID 标识打印筛选器。
  • 参数 1 - 打印筛选器 GUID。 如果此参数不为 NULL,请使用 dd 转储它。
  • 参数 2 - PTConform 返回的错误消息。 如果此参数不为 NULL,请使用 du 转储消息。
  • 参数 3 - PrintTicket XML 文本。 如果此参数不为 NULL,请使用 du 转储 XML。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: INVALID_PIPELINE_PRINTTICKET
  • 停止代码: 0000D027
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

使用活动 COM 回调卸载打印驱动程序 DLL。

可能的原因

卸载目标模块时,检测到 COM 接口上的正引用计数。 可能是由于模块中 DllCanUnloadNow 导出的实现不正确或引用计数不正确导致的。

应用程序验证程序显示的信息
  • 格式: -  此验证程序停止是由 %lS 模块卸载引起的,而系统仍保留指向它的 %lS 指针。
  • 参数 1 - COM 接口地址。
  • 参数 2 - 提供回调的堆栈跟踪。 如果堆栈跟踪不是 NULL,请使用 dps 转储堆栈跟踪。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: DLL_PREMATURE_UNLOAD
  • 停止代码: 0000D028
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

尝试使用已发布的 COM 接口

可能的原因

COM 接口在发布后已使用。 若要对此停止进行故障排除:- 使用调试器中的“k”命令转储当前堆栈跟踪,以识别尝试使用已发布接口的例程。 - 使用 dps 命令和 stop 的第二个参数(如果可用)转储释放它的例程的堆栈跟踪。

应用程序验证程序显示的信息
  • 格式: - 此验证程序停止是由发布后使用的 %lS 接口引起的。
  • 参数 1 - COM 接口地址。
  • 参数 2 - 引用计数变为零时发布调用的堆栈跟踪。 如果堆栈跟踪不是 NULL,请使用 dps 转储堆栈跟踪。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: COM_INTERFACE_ALREADY_RELEASED
  • 停止代码: 0000D029
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

名为 ExitThread 的打印驱动程序

可能的原因

名为 ExitThread 的打印驱动程序模块。 当打印驱动程序模块调用 ExitThread 时,线程将退出,然后才能调用任何析构函数或执行任何其他自动清理。 这可能会导致未定义的行为。 因此,打印驱动程序应始终从其线程函数返回。 若要对此停止进行故障排除,请使用调试器中的“k”命令转储当前堆栈跟踪,以标识调用 ExitThread 的例程。

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

其他信息
  • 测试层: PrintDriver
  • 停止 ID: DRIVER_CALLED_EXITTHREAD
  • 停止代码: 0000D02A
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

名为 TerminateThread 的打印驱动程序

可能的原因

一个名为 TerminateThread 的打印驱动程序模块。 TerminateThread 用于导致线程退出。 发生这种情况时,目标线程没有机会执行任何用户模式代码。 附加到线程的 DLL 不会通知线程正在终止。 系统释放线程的初始堆栈。 TerminateThread 是一个危险的函数,只能在最极端的情况下使用。 例如,TerminateThread 可能会导致以下问题: - 如果目标线程拥有关键节,则不会释放关键节。 - 如果目标线程正在分配堆中的内存,则不会释放堆锁。 - 如果目标线程在终止时执行某些 kernel32 调用,则线程进程的 kernel32 状态可能不一致。 - 如果目标线程正在操作共享 DLL 的全局状态,则 DLL 的状态可能会被销毁,从而影响 DLL 的其他用户。 若要对此停止进行故障排除,请使用调试器中的“k”命令转储当前堆栈跟踪,以标识调用 TerminateThread 的模块和例程。

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

其他信息
  • 测试层: PrintDriver
  • 停止 ID: DRIVER_CALLED_TERMINATETHREAD
  • 停止代码: 0000D02B
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

打印筛选器更改了当前线程的 COM 单元类型。

可能的原因

当打印筛选器 (InitializeFilter、StartOperation 或 ShutdownOperation) 方法之一更改 COM 单元类型时,会发生此验证程序停止。 使用调试器中的“ln poi (<Param1>) ”命令标识打印筛选器 DLL 的名称。

应用程序验证程序显示的信息
  • 格式: -  此验证程序停止的原因是打印筛选器的 %lS 方法将 COM 单元类型从 %lS (%d) 更改为 %lS (%d) 。
  • 参数 1 - Filter 接口指针。 使用“ln poi (<Param1>) ”查找筛选器。
  • 参数 2 - 预期单元类型
  • 参数 3 - 实际公寓类型
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: COM_APARTMENT_TYPE_CHANGED
  • 停止代码: 0000D02C
  • 严重性: 警告
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

调用打印筛选器方法后,不会为当前线程初始化 COM。

可能的原因

当打印筛选器具有不平衡 CoInitialize[Ex] 和 CoUninitialize 调用时,将停止此验证程序。 这可能是由于 CoInitialize[Ex] 意外返回失败,例如当请求单元类型与线程的当前类型不匹配时。 使用调试器中的“ln poi (<Param1>) ”命令标识打印筛选器 DLL 的名称。

应用程序验证程序显示的信息
  • 格式: -  此验证程序停止可能是由于打印筛选器的 %lS 方法调用 COM 的 CoUninitialize,但没有相应的成功 CoInitialize[Ex]。
  • 参数 1 - Filter 接口指针。 使用“ln poi (<值>) ”查找筛选器。
  • 参数 2 - 未使用。
  • 参数 3 - 未使用。
  • 参数 4 - 未使用。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: COM_NOT_INITIALIZED
  • 停止代码: 0000D02D
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

打印驱动程序与 PT/PC XML 文档的 AddRef/Release 调用不匹配。

可能的原因

如果打印驱动程序错误地管理 XML 文档的引用计数 (例如 PrintTicket 或 PrintCapabilities) ,则会发生此验证程序停止。 引用计数预计不会通过方法调用进行更改,并可能导致 XML DOC 中的泄漏和/或孤立的关键部分。

应用程序验证程序显示的信息
  • 格式: -  在 %lS 方法调用后,%lS XML 文档引用计数为 %d,预期为 %d。
  • 参数 1 - 违规方法调用的名称。 如果不是 NULL,请使用“du”来显示此内容。
  • 参数 2 - XML 文档的类型。 如果不是 NULL,请使用“du”来显示此内容。
  • 参数 3 - 当前引用计数。
  • 参数 4 - 预期的引用计数。

其他信息
  • 测试层: PrintDriver
  • 停止 ID: XML_DOM_REFCOUNT_CHANGED
  • 停止代码: 0000D02E
  • 严重性: 错误
  • 一次性错误: 不
  • 错误报告: 打破
  • 记录到文件: 是的
  • 创建回溯: 是的

已调用 FatalExit

可能的原因

已调用 FatalExit。 这是一种异常终止形式,可能导致报告其他验证程序停止 (例如。泄漏) ,但无法采取纠正措施 (即停止不可靠且) 干扰。 若要对此停止进行故障排除,请使用调试器中的“k”命令转储当前堆栈跟踪,以标识调用 FatalExit 的模块和例程。

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

其他信息
  • 测试层: PrintDriver
  • 停止 ID: FATALEXIT
  • 停止代码: 0000D02F
  • 严重性: 信息
  • 一次性错误: 不
  • 错误报告: 没有
  • 记录到文件: 是的
  • 创建回溯: 是的

另请参阅

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

应用程序验证程序 - 概述

应用程序验证工具 - 功能

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

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

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

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