分享SSD TRIM代码

14年的早些时候发布过SSD TRIM技术的文章,文章里面记录了关于TRIM技术的一些东西,其中就包括在Windows上如何使用TRIM。当然Windows 7及其更高版本的系统都是自带TRIM功能的,只有XP没有这个功能,当时我就写了个工具,在XP下进行TRIM。现在想想确实也没啥意思,就把代码分享说来吧。

https://github.com/0cch/SSDTrim.git

Tips

用Service Tag区分共享类型服务线程

Windows中有一种共享类型的服务,这种服务的特点是,他们可能同时有多个不同服务运行在同一个进程内。这些服务通常都是一些dll,他们被加载到宿主进程内运行,这个宿主进程我们见到最多的就是svchost了,如下图所示:

20150124220922

Windows这样做的好处就是尽可能的节约资源,当然不好地方就是,如果出了问题那么难以调试和定位。所以,为了更好的定位共享服务的工作线程,微软支持了一种叫做Service Tag的东西。Service Tag简单的说就是标注线程属于哪个服务的,这个是由Service Control Manager支持的。在TEB中有一个SubProcessTag字段,每当一个服务注册并且运行的时候,Service Control Manager会分配给服务线程一个id,这个id就是SubProcessTag,它能够唯一的表示服务,而且这个值是一直都被继承的,也就是说,如果服务线程再创建线程,那么新的线程的SubProcessTag也会被标记为父线程的id。当然,也有一种例外,那就是如果用了线程池,就不会继承SubProcessTag了。

在Advapi32.dll中有一个函数,叫做I_QueryTagInformation,这个函数可以根据SubProcessTag去查询Service的信息,有兴趣的同学可以看看下面的链接:http://wj32.org/wp/2010/03/30/howto-use-i_querytaginformation/

DebuggingTips

总结和展望:东方不亮西方亮

一转眼,一年又过去了,又到了总结过去的一年,计划新年的时候了。过去的一年里,最大的感觉是,好想经过了好多事情,但却没有经历什么事情。说起来挺绕的,慢慢来回忆下吧。

首先是工作上的事情,由于在前年整个部门被裁,去了一个价值观上和自己的很不同公司。事实证明,这确实不是什么好的决定,吐槽的事情就不细说了。之所以没换公司,是因为我觉得在北京待不了多久了,跳槽只会坑了其他的公司。所以也就勉强的继续干着。虽说是勉强的干活,但是工作的时间还是将近占用了每天的三分之二。工作的内容也没有什么创造性,基本上就是在可怕的代码里改来改去,当然了,也许这也是他这么可怕的原因吧。

多米乐骨效应,工作占用大量的时间,也导致我2014年的计划大打折扣。脚本编译器,写了一半听了下来,minikernel也没什么进展,唯一比较让人舒心的是,0CCh的山寨小工具,还是在慢慢的变多,其中还有花了大量精力写的everything_study,不过由于算法还没没达到目标效果(没有everything快,数据库也比他的大很多),所以没有放出来,也就是自己在用。确实也是因为工作的原因,没有太多时间和精力去改造文件id间相互索引的算法了。再说说健身,同样的理由,工作时间长影响身体和健身,现在25分钟基本上就跑个4.7km,13年的最后,都是能跑5km多点的。

不过东方不亮西方亮了,有失意的地方,总会在其他地方补回来=v=,生命中终于又多了一个人,能让我更加坚定的回老家了。所以,今年的计划特别难定,因为不知道回老家后到底是什么个情况。只能说回去之前继续坚持着,回去之后去找个心仪的事情。然后,编译器和minikernel希望能继续写,编译器希望能写玩,因为并不难。minikernel就比较复杂了,只能说能写多少写多少。另外我也特别喜欢山寨各种各样的小工具,自己造轮子自己用,赶紧挺开心的。健身方面,回去前照旧,回去后尽量保持。

其实生活上14年真的还算挺开心的,和sysdbg的博主一起还打完了好几个ps3的游戏。比如《神秘海域3》,《第一次世界大战——勇敢的心》等等=v=,还有他13年欠我的金钱豹还没请我吃呢…

最后,我还是希望2015年,我自己和家人、亲戚以及基友们,身体健康,阖家辛福快乐,工作顺利发大财!