百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

由摄像头服务FrameServer启动学到的

haoteby 2025-05-14 13:31 59 浏览

最近有同事深入分析了沙箱中摄像头服务FrameServer的启动问题,分享说摄像头的启动是通过ETW事件来启动的,这个真是盲区,于是搜索学习了一番,记录在此:

Windows的服务一般认为是由Services.exe启动,它会读取注册表,根据服务的Type和Start属性来启动:

但是我们在FrameServer服务的下面发现了特别的内容,TriggerInfo:

在微软文档中搜索可以查到,原来服务还有这种触发式的启动方式!

A service can register to be started or stopped when a trigger event occurs. This eliminates the need for services to start when the system starts, or for services to poll or actively wait for an event; a service can start when it is needed, instead of starting automatically whether or not there is work to do. Examples of predefined trigger events include arrival of a device of a specified device interface class or availability of a particular firewall port. A service can also register for a custom trigger event generated by an Event Tracing for Windows (ETW) provider.

服务可以注册成当触发事件发生时启动和停止。它避免了必须在系统启动时启动服务,也不需服务去主动查询或等待某个事件。服务可以在需要时再启动,而不是有没有事儿做就自动启动。常见的预先定义的触发事件例子有:某种特定的设备接口类发生了设备接入,某个特别的防火墙端口的可用性等。服务也可以自定义一个由ETW提供者来产生的触发事件。

FrameServer完美的阐述了微软的上述理论!可以通过命令来展示一下FrameServer注册表中TriggerInfo所描述的信息:

从上图我们可以看到,FrameServer定义了5种触发事件,其中有两种是自定义的触发事件;5种事件都是触发服务启动。分别来说:

  • 事件1: 网络事件,即通过RPC接口调用触发, bc90d167-9470-4139-a9ba-be0bbbf5b74d(Rpc interface event);6DDFC7D1-7FCA-44EB-A279-E9988F4DB32B(RPC接口ID)
  • 事件2: 自定义系统状态更改事件触发, 2d7a2816-0c5e-45fc-9ce7-570e5ecde9c9(自定义系统状态通知即WNF通知 );75 10 bc a3 26 1d 90 41(0x41901d26a3bc1075, 知名的wnf状态通知 WNF_KSV_DEVICESTATE)
  • 事件3: 自定义系统状态更新事件触发, 2d7a2816-0c5e-45fc-9ce7-570e5ecde9c9(自定义系统状态通知即WNF通知);35 21 bc a3 2e 0f 8b 41 (0x418b0f2ea3bc2135, 知名WNF状态通知, WNF_CAM_CAMERA_ACCESS_CHANGED)
  • 事件4: 设备接口到达通知(即Data Arrival), e5323777-f976-4f5b-9b55-b94699c46e44(KSCATEGORY_VIDEO_CAMERA【可从contentdeliverymanager.utilities.dll中查到】)
  • 事件5: 设备接口到达通知, 24e552d7-6523-47f7-a647-d3465bf1f5ca(KSCATEGORY_SENSOR_CAMERA)

从Services.exe中ScGetTriggerInfo可以看到解析TriggerInfo的代码,解析后放在SERVICE_TRIGGER_INFO结构中(可看微软文档详细解析,内容较多):

typedef struct _SERVICE_TRIGGER_INFO {
  DWORD            cTriggers;
  PSERVICE_TRIGGER pTriggers;
  PBYTE            pReserved;
} SERVICE_TRIGGER_INFO, *PSERVICE_TRIGGER_INFO;


ScRegisterForTriggerAction中会调用ScGetTriggerInfo获取TriggerInfo并调用
ScExtRegisterTriggerConsumer->ScExtpRegisterTriggers->
DabRegisterTriggerConsumer监听事件。在ScExtpTriggerArrived中处理事件发生后的操作,主要是ScExtpLaunchService和ScExtpStopService。

相关推荐

法网公开赛再遭雨水突袭“三无赛事”困局一年后破解

大雨突降,比赛被迫取消。广州日报全媒体记者孙嘉晖摄今天,法网公开赛进入正赛第11个比赛日,突如其来的大雨让本该在当地时间14时开球的女单1/4决赛被迫延迟,最终组委会官方确认,当天比赛因恶劣天气全...

AC米兰队史今天:2005年3比1尤文,马尔蒂尼PK伊布+众将围殴穆图

AC米兰队史今天:2005年3比1尤文,马尔蒂尼PK伊布+众将围攻穆图2005年10月29日,2005-2006赛季意甲第10轮的一场焦点对决在圣西罗上演,AC米兰坐镇主场迎战老妇人尤文图斯。强强死磕...

如果2005年西部全明星阵容VS2021年全明星阵容

#NBA全明星#如果2004-05赛季的西部全明星阵容,分别对阵今年的詹姆斯和杜兰特队,会孰强孰弱呢?首先我们来看看2004-05赛季西部全明星的阵容,首发球员是:科比、麦迪、加内特、邓肯、姚明;替补...

EtherCAT从站EEPROM更新操作指南_ethercat stm32从站

@ZHangZMo升级EtherCAT从站EEPROM...

LAN8820I-ABZJ/MICROCHIP/微芯/代理现货库存/以太网/太航半导体

描述微芯片lan820/lan820i是低功率100BASE/100BASE/1000BASE-TX/1000BASE-TX/100000base是由IEEE802.3和802.3ab...

汽车的发明者到底是谁?哪一年?百年历史的汽车品牌有哪些

今天是解读大学本科汽车专业教材《汽车构造》解读的第一期“总论”部分。后面将以教材内容为基础,并结合汽车发展现状做有一些更丰富的延展,同时补充进一些相关的常见故障及维修内容。华歌通俗易懂讲原理的讲解方...

嵌入式Linux自学不走弯路!670+讲课程!应用层+底层系统学习路线

在智能设备爆发式进化的今天,智能设备正从单点控制迈向系统级智能。从工业机械臂的精准控制到智能座舱的多屏交互,从边缘AI推理到云端协同,...

从cpu角度理解PCIe_cpuz pcie

举报Herok...

什么是big.LITTLE,你真的了解吗_big 是什么

2015年最佳智能手机阵容处理器均基于ARM的big.LITTLE架构,采用该架构处理器的手机工作速度更快更高效。三星GalaxyS6、HTCM9、LGG4等手机均采用基于big...

网上疯传的乌克兰战争片段,其实是一段游戏视频

希望人没事。...

《爱奇艺视频》UWP已悄悄更新ARM版,支持Win10 Mobile部署安装

此前IT之家报道过,爱奇艺视频(Beta版)已经推出Win10UWP版,适配Windows10PC系统,Win10Mobile还不能下载,不过现在有IT之家网友发现,爱奇艺视频(Beta版)商店里已...

Arm版Chrome/Edge浏览器新改进:加速视频渲染、延长续航时间

IT之家6月29日消息,科技媒体WindowsReport昨日(6月28日)发布博文,挖掘ChromiumCommit发现了“EnableMediaFoundationA...

ARM全新视频处理器Mali Egil曝光:支持VP9编解码

5月30日,ARM正式发布了其最新的图形处理器Mail-G71,基于ARM全新的GPU架构“Bifrost”,并且结合了线程级并行(TLP)设计。实际上,完整的MaliGPU基于ARM图形产品堆栈设...

2020年手机最全资源app网站合集,你要的基本上都有

手机最全资源app合集,你要的基本上都有聚BT:(最强资源聚合网站)https://jubt.net安卓老子追剧+安卓南瓜影视破解版+安卓香蕉影视+韩剧TV安卓:https://www.lanzous...

闰秒宣布取消,网友:让Linus本人与谷歌微软达成一致,只有它了

詹士发自凹非寺量子位|公众号QbitAI决定了!这一秒,程序员们不用再续了!...