一个关于消息结构体的讨论
好久没写点什么了,
这里发个课题,可以讨论一下,
我有个驱动程序,同时也有个应用层模块,
当然了,这个驱动SYS是一个保护模块,应用层模块DLL是个控制模块,
DLL控制SYS。
既然涉及到控制,同时就肯定涉及到通信,
既然涉及到通信,就涉及到通信安全的问题,
这里我们不讨论被别人干了的情况,只讨论我们自己的情况。
首先,模块化就是为了更新方便,
而既然是更新就包括SYS的更新和DLL的更新,
最好的情况下,当然就是同时更新,
但是有些比较差的情况是,DLL可以及时更新,但是SYS却不能及时更新,因为SYS不是任意时间都可以卸载的,
而且卸载时也要考虑当前是否可能有资源被占用的问题,
所以最好的情况就是,当电脑重新启动之前不卸载SYS,
那么,问题就来了,新的DLL,和旧的SYS同时存在,那么交互的时候怎么办,
如果新的DLL内存空间里面多了一个什么东西的话,那么SYS就可能解析出错,
结果就是轻者导致功能无效,重者直接BSOD,
这怎么办。
我和我老大讨论了一会,我老大给出一个结论是,给每个DLL和SYS通信的信息,增加一个版本号,
这样SYS做解析之前,先判断版本号,然后再解析。
这,你怎么看。
我说一下我的想法阿,其实我认为这完全是多余的,
首先,如果DLL升级加载成功,DLL再升级加载SYS,然后和SYS沟通,那么很必然DLL如果升级加载SYS失败了,DLL自己也会知道这个情况,
那么这时候有两种可能,
1:如果升级加载SYS成功了,那么DLL自然可以和自己加载的SYS正确沟通,正确交互,那么自然后续都没有问题,
2:如果升级加载SYS失败了,那么DLL肯定会知道自己对SYS的升级加载操作是失败的,这时,即便自己发给驱动的消息里面携带一个版本号,那么驱动识别版本号是自己不认识的,这时也无法正确执行消息,所以这条信息本身就是多余的。而,这时候,难道还指望新的DLL用老的版本号来发送一条消息么,这不是吃饱了撑的么,我们不是有老的DLL就在本地么,直接用老的DLL就行了阿。
实际上不管成功还是失败,我们都是可以有比较好的办法来解决这个问题。
实际上我老大想到这点,是因为,我老大是做云控的,云控发消息到本地的话,确实需要携带一个版本号(或者本地上发一个版本号告诉云控说我要哪个版本的消息),如果不这样的话,那么云控每一次升级,都会丢掉很多很多量。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」