应用程序验证工具 - 停止代码 - 服务

服务测试,检查是否正确使用 Windows 服务。 例如,正在正确启动和停止服务。 有关 Windows 服务的详细信息,请参阅 服务

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

使用非 Unicode API(例如 RegisterServiceCtrlHandlerA 而不是 RegisterServiceCtrlHandlerW)

可能导致

大多数可能应用程序未使用定义的 UNICODE 宏进行编译,因此使用了非 Unicode 接口。

应用程序验证程序 显示的 信息
  • 格式: -  API 名称 %ws
  • 参数 1 - 未使用 。
  • 参数 2 - 未使用 。
  • 参数 3 - 未使用 。
  • 参数 4 - 未使用 。

其他信息
  • 测试层: 服务
  • 停止 ID: USING_NON_UNICODE_API
  • 停止代码: 4000000
  • 严重性: 错误
  • 一次性错误: 否
  • 错误报告: 中断
  • 日志文件: 是
  • 创建回溯: 是

第二次调用 StartServiceCtrlDispatcher API

可能导致

此 API 只能在服务 wmain 函数开始时调用一次。

应用程序验证程序 显示的 信息
  • 格式: -  API 名称 %ws
  • 参数 1 - SERVICE_TABLE_ENTRY 参数。
  • 参数 2 - 未使用 。
  • 参数 3 - 未使用 。
  • 参数 4 - 未使用 。

其他信息
  • 测试层: 服务
  • 停止 ID: CTRL_DISPATCHER_CALLED_TWICE
  • 停止代码: 4000001
  • 严重性: 错误
  • 一次性错误: 否
  • 错误报告: 中断
  • 日志文件: 是
  • 创建回溯: 是

传递给 SetServiceStatus 的SERVICE_STATUS句柄无效

可能导致

SERVICE_STATUS句柄传递到 SetServiceStatus 无效。

应用程序验证程序 显示的 信息
  • 格式: -  API 名称 %ws
  • 参数 1 - SERVICE_STATUS_HANDLE 值。
  • 参数 2 - 未使用 。
  • 参数 3 - 未使用 。
  • 参数 4 - 未使用 。

其他信息
  • 测试层: 服务
  • 停止 ID: INVALID_SERVICE_STATUS_HANDLE
  • 停止代码: 4000002
  • 严重性: 错误
  • 一次性错误: 否
  • 错误报告: 中断
  • 日志文件: 是
  • 创建回溯: 是

从两个线程调用 SetServiceStatus

可能导致

此 API 旨在串行调用。

应用程序验证程序 显示的 信息
  • 格式: - 从 %ws 服务并发调用  API 名称 %ws
  • 参数 1 - 传递 LPSERVICE_STATUS 值。
  • 参数 2 - 未使用 。
  • 参数 3 - 未使用 。
  • 参数 4 - 未使用 。

其他信息
  • 测试层: 服务
  • 停止 ID: SET_SERVICE_STATUS_RACE
  • 停止代码: 4000003
  • 严重性: 错误
  • 一次性错误: 否
  • 错误报告: 中断
  • 日志文件: 是
  • 创建回溯: 是

服务处于START_PENDING状态时接受 STOP/SHUTDOWN 控件

可能导致

大多数服务在初始化期间无法接受停止/关闭控制

应用程序验证程序 显示的 信息
  • 格式: -  服务名称:%ws dwControlsAccepted: %08X
  • 参数 1 - 传递 LPSERVICE_STATUS 值。
  • 参数 2 - 未使用 。
  • 参数 3 - 未使用 。
  • 参数 4 - 未使用 。

其他信息
  • 测试层: 服务
  • 停止 ID: STOP_SHUTDOWN_ACCEPTED
  • 停止代码: 4000004
  • 严重性: 警告
  • 一次性错误: 否
  • 错误报告: 无
  • 日志文件: 是
  • 创建回溯: 是

SERVICE 正在尝试无效状态转换

可能导致

服务尝试执行无效状态转换或设置相同的状态参数

应用程序验证程序 显示的 信息
  • 格式: - 发现  服务 %ws 尝试无效状态转换
  • 参数 1 - LPSERVICE_STATUS 当前状态。
  • 参数 2 - LPSERVICE_STATUS 新状态。
  • 参数 3 - Last SetServiceStatus 堆栈跟踪。
  • 参数 4 - 未使用 。

其他信息
  • 测试层: 服务
  • 停止 ID: INVALID_STATE_TRANSITION
  • 停止代码: 4000005
  • 严重性: 错误
  • 一次性错误: 否
  • 错误报告: 中断
  • 日志文件: 是
  • 创建回溯: 是

SERVICE 正在尝试设置相同的状态参数

可能导致

服务尝试设置相同的状态参数

应用程序验证程序 显示的 信息
  • 格式: -  服务 %ws 尝试设置相同的状态参数
  • 参数 1 - LPSERVICE_STATUS 当前状态。
  • 参数 2 - LPSERVICE_STATUS 新状态。
  • 参数 3 - Last SetServiceStatus 堆栈跟踪。
  • 参数 4 - 未使用 。

其他信息
  • 测试层: 服务
  • 停止 ID: DUPLICATE_STATE_PARAMS
  • 停止代码: 4000006
  • 严重性: 警告
  • 一次性错误: 否
  • 错误报告: 无
  • 日志文件: 是
  • 创建回溯: 是

进入 STOPPED 状态后,SERVICE 将离开挂起的线程

可能导致

声明 STOPPED 状态后,服务将离开挂起的线程

应用程序验证程序 显示的 信息
  • 格式: -  服务 %ws 正在泄露线程
  • 参数 1 - 泄露线程的线程 ID。
  • 参数 2 - 服务标记。
  • 参数 3 - 未使用 。
  • 参数 4 - 未使用 。

其他信息
  • 测试层: 服务
  • 停止 ID: LEAKED_THREAD
  • 停止代码: 4000007
  • 严重性: 错误
  • 一次性错误: 否
  • 错误报告: 中断
  • 日志文件: 是
  • 创建回溯: 是

另请参阅

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

应用程序验证程序 - 概述

应用程序验证程序 - 功能

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

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

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

应用程序验证程序 - 常见问题