Windows服务/驱动能否在系统关机前接收通知消息?
Windows 10关机流程与安全断电通知实现方案
核心问题解答:Windows关机时会向服务/驱动发送消息吗?
会的,Windows在关机、重启或注销流程中,会按固定顺序向系统内的服务、驱动发送特定通知:
- 服务层面:Windows会向已注册的服务发送
SERVICE_CONTROL_SHUTDOWN控制码,服务可通过处理该控制码执行收尾操作。你可以编写自定义Windows服务,在收到该通知时向自研板的MCU发送断电指令。 - 驱动层面:内核模式驱动会收到
IRP_MJ_SHUTDOWN请求,驱动程序可在处理这个IRP时完成硬件相关收尾,包括向自研板发送信号。
实现安全断电通知的具体方案
方案1:自定义Windows服务实现
- 创建Windows服务,在
ServiceMain函数中注册控制码处理回调HandlerEx。 - 在回调函数中捕获
SERVICE_CONTROL_SHUTDOWN事件,此时执行向自研板MCU发送通知的逻辑(比如通过串口、GPIO或自定义通信协议)。 - 注意:服务处理关机通知的默认超时约20秒,若需更长时间,可调用
SetServiceStatus延长,但不建议过度延长,避免阻塞系统关机流程。
方案2:内核驱动实现
如果自研板与SBC有直接硬件交互(如GPIO、PCIe设备),内核驱动方案可靠性更高:
- 编写内核驱动,注册
IRP_MJ_SHUTDOWN的处理回调函数。 - 在回调中通过硬件接口向自研板发送安全断电信号。
- 系统会等待驱动完成IRP处理后再继续关机流程,该阶段的可靠性优于用户态服务,更适配嵌入式场景。
关键注意事项
- 无论采用哪种方案,通知发送逻辑需简洁高效,避免阻塞关机流程。
- 需测试极端场景:若系统意外崩溃,Windows可能无法发送正常关机通知,此时自研板MCU需具备独立看门狗或超时检测机制,确保异常情况下也能安全断电。
内容的提问来源于stack exchange,提问作者0___________
相关产品推荐
相关产品推荐

