@笔记:窗口回调类程序结构的一种扩展写法
其实本篇文章代码结构早已不是什么新鲜写法了,只不过我一直没有在意吧了。前段时间在公司的一个模块中看到一位同事,这样写才引起我的注意。和罗牛人探讨了一下,便有了此文。现在想想最早见此种写法,是在侯杰先生写的《深入浅出MFC》中,他是在也是在模拟MFC消息循环时用的。现在对比下传统写法和我说的“新的”写法。
生活的天平本不平衡,只有通过努力改变其偏向。
其实本篇文章代码结构早已不是什么新鲜写法了,只不过我一直没有在意吧了。前段时间在公司的一个模块中看到一位同事,这样写才引起我的注意。和罗牛人探讨了一下,便有了此文。现在想想最早见此种写法,是在侯杰先生写的《深入浅出MFC》中,他是在也是在模拟MFC消息循环时用的。现在对比下传统写法和我说的“新的”写法。
序
早就想写点什么,自己都不知道一天在瞎忙什么,一直到最近才开始动手。。。我想通过这个乱谈系列跟大家分享一些心得。我打算在这个系列文章中讲点方法与思路,当然,很多方法并不是我的原创,只是我用这些方法和思路解决了我的实际问题。由于本人水平有限,很多说法只是我个人的理解,然后用我自己的语言表达出来,可能并不专业,所以在这里不负责任的乱谈一下,欢迎大家拍砖。
Subversion真是个好东西,大大提高了团队协同开发的效率,也为本地进行程序开发时保存不同版本提供了便捷。再也不用为一个个小程序在不同进度时,建立xxxx200808026.zip之类突兀文件了,一段时间后自己都不知道这个压缩内包含什么进度内容了。有了Subversion后一个update加一条清楚的注释搞定一切。
科大的牛人,出手就是不同凡响。不过居然工作后做Web方面的开发,也算是有才了。饭碗和爱好还是不能兼得的。by lonkil
发信人: ftofficer(0210|别了,科大), 信区: Kernel
标 题: Windows句柄表格式(1) – 2000句柄表格式
发信站: 瀚海星云 (2006年11月26日01:50:44 星期天), 站内信件
版大暗示我需要交一篇原创了。工作以后天天搞一些Web上面的开发,很久没有研究内核
了。翻翻以前自己的手记,拼凑了一篇,简单写些Windows当中的句柄表格式好了。
今天比较晚了,先写2000下面的,明天再整理一个XP的好了。两者之间差异巨大,几乎
是完全重写的。
句柄表是Windows Object Manager维护的一个进程范围有效的表,用来管理Windows的内
核对象。关于Object Manager和句柄表的基础可以参见《Windows Internal》,讲的很
清楚。但是一旦涉及到了句柄表的实际格式,《Windows Internal》就讳莫如深了,对
于2000的句柄表还说了一些,但是对于XP/2003就基本上没有说什么了。
我们对句柄表的探索是从EPROCESS开始的,EPROCESS结构当中有一个指向_HANDLE_TABLE
结构的指针,名字叫做 ObjectTable,2000在0×128处,XP在0xC4处。这个结构在2000和
XP当中是完全不同的。2000当中定义很简单:
kd> dt nt!_handle_table
nt!_HANDLE_TABLE
+0×000 Flags : Uint4B
+0×004 HandleCount : Int4B
+0×008 Table : Ptr32 Ptr32 Ptr32 _HANDLE_TABLE_ENTRY
+0×00c QuotaProcess : Ptr32 _EPROCESS
+0×010 UniqueProcessId : Ptr32 Void
+0×014 FirstFreeTableEntry : Int4B
+0×018 NextIndexNeedingPool : Int4B
+0×01c HandleTableLock : _ERESOURCE
+0×054 HandleTableList : _LIST_ENTRY
+0×05c HandleContentionEvent : _KEVENT
真正指向Handle table entry的就是那个Table指针了,这是一个类型为_HANDLE_TABLE_
ENTRY***的东西,所以从2000的句柄表当中查东西出来就是分三次查表就好了。在WI当
中也有讲,Windows 2000将句柄值除以4之后,把结果的后24位当作三个8位索引来看待
,每个都是在对应级别的索引表当中的索引,前两个是Ptr表,最后一级是
_HANDLE_TABLE_ENTRY表。(这一点Windows Internal说的不清楚,容易让人认为说不用
除以4)。
举个例子来说吧。随便找个handle比较多的进程,就拿Winlogon好了。
kd> !handle 0628 7 b8
processor number 0
Searching for Process with Cid == b8
PROCESS fd779820 SessionId: 0 Cid: 00b8 Peb: 7ffdf000 ParentCid: 008c
DirBase: 035bf000 ObjectTable: fd7806a8 TableSize: 372.
Image: WINLOGON.EXE
Handle Table at e1cc9000 with 372 Entries in use
0628: Object: fd670488 GrantedAccess: 0012019f
Object: fd670488 Type: (fd90b840) File
ObjectHeader: fd670470
HandleCount: 1 PointerCount: 1
Directory Object: 00000000 Name: \SfcApi {NamedPipe}
记着这个Handle 0×0628。下面我们手动来查查看。先看这个Handle的值,除以4之后是0
x18A,低三个字节分别代表三个索引:0×00,0×01,0×8A。下面从进程的EPROCESS开始
:
kd> dt nt!_eprocess fd779820
nt!_EPROCESS
+0×000 Pcb : _KPROCESS
…
+0×128 ObjectTable : 0xfd7806a8 _HANDLE_TABLE
kd> dt nt!_handle_table 0xfd7806a8
nt!_HANDLE_TABLE
+0×000 Flags : 0
+0×004 HandleCount : 372
+0×008 Table : 0xe1cc9000 -> 0xe1cc9400 -> 0xe1cc9800
_HANDLE_TABLE_ENTRY
…
第一级索引表在e1cc9000,索引为0,故:
kd> dd 0xe1cc9000
e1cc9000 e1cc9400 00000000 00000000 00000000
…
故第二级索引表在e1cc9400,索引为0×01,注意每个索引项为4字节:
kd> dd e1cc9400+0×01*4
e1cc9404 e1eb3000 e1eb3800 00000000 00000000
…
故sub handle table地址为e1eb3000,索引为0×8A,注意这时候表中存储的已经是_HAND
LE_TABLE_ENTRY了,故而每个大小为8字节:
kd> dd e1eb3000+0×8A*8
e1eb3450 7d670470 0012019f 7d6701e8 001f03ff
…
可见该对象的_OBJECT_HEADER结构位置在(7d670470 & FFFFFFF8) | 80000000 =
Fd670470,_OBJECT_HEADER当中的结构是0×18字节,之后就是各种对象的data了。所以
对象所在的位置就是fd670488
kd> !object Fd670488
Object: fd670488 Type: (fd90b840) File
ObjectHeader: fd670470
HandleCount: 1 PointerCount: 1
Directory Object: 00000000 Name: \SfcApi {NamedPipe}
这正与2000的句柄表格式相符。
–
Doing a little bit at a time, and an oyster makes a pearl.
※ 来源:·瀚海星云 bbs.ustc.edu.cn·[FROM: 222.95.168.191]
: -P,最近这段时间调程序调的累死人,目前团队这种开发环境下,抓一个异常或重现一个Bug将要花费成熟IDE的十倍时间。每次对程序的修改,只有将Bin烧录到芯片内才能看到效果,其间将要花费几分钟来折腾。不能断点,不能看堆栈,只有一条路,打trace。如果trace太多,COM口还会无情的给你来个罢工,连个Log都看不到。想想在VC下调试程序,是一件多么幸福的事情。
公司催着要量产,测试团队的MM也加入了进来,准备给你们“找茬”,近期将是一场恶战。关键我手头这个模块,真是把人给搞伤着了。不知道是我不争气,还是底层的平台不争气。一进模块就给我来个崩溃,今天的一天的工作估计有1/5的时间,是在插拔下载线中度过的。一次一次的崩溃,一次一次的重试,问题渐渐的浮出水面。就在这个关键时刻,机器居然被折腾的不行了,每烧到第六秒毕失败,难道传说中的Flash被烧挂了, T_T。真是屋漏偏逢连阴雨,>_<。
等过了此役,我的调试和代码阅读能力应该将会小有进步,: -D。
前一段时间就听讲CSDN和番茄花园都打不开了,以为都是在奥运期间被和谐掉了。CSDN是被和谐了几天,不过现在开了。番茄花园不是被和谐,是彻底关站。至于原因就不要用讲了,到电脑城一看便知,番茄花园太有名了。
这件事和前期的珊瑚虫的陈福寿事件很类似,都有一种过河拆桥的感觉。两位都为微软和腾讯的产品前期普及可以说立下汗马功劳,最后的结果又是惊人的相似。至于他们的对错,我不作讨论。
在国内这种大环境下,关于这样的措施真有效吗?能起到杀鸡给猴看的效果吗?我看难。现在不是照样有很多显IP的程序?Windows系统还照样有很多,深山红叶,电脑公司特别版,雨林木风等等。市场需求在这里呢,有需求肯定有供应,充其量改变个方式而已。
说说我个人用软件习惯,我的机器已逐渐走向开源或免费产品,这些免费的并不差,而且种类繁多。一些大型或平台性的软件,公司都已买了正版。日常小软基本趋向开源产品。关于洪磊与陈福寿的两件作品,我真还没怎么用过,我对他们的来源还是不太相信,而且我不喜欢他们绑定的一些增值服务,我对对方的IP并不感兴趣,呵呵。
只能为两位表示可惜,成了出头鸟。
标签: 网络
1982年9月19日,美国卡耐基-梅隆大学的斯科特-法尔曼教授在电子公告板,第一次输入了这样一串ASCII字符:“:-)”。人类历史上第一张电脑笑脸就此诞生。从此,网络表情符号在互联网世界风行,为社会广泛接受。
这个周未,啥事都没干,就在家看奥运比赛,像我这种只注重结果的家伙,没有决赛,我会选择看电影。昨天中德大战,虽然德国小伙发型整的怪帅,还是被以姚明为首的中国男蓝给打败了,恭喜一下。其实,我是不指望他们拿奖牌的,毕竟这是我国的弱项,只要你们尽力了就好,打的球不要丢人就行,中国古话贵在参与。所以这次男蓝的表现,我反正已经相当满意了,至于国足就不提了。
今天上午还是比较平静,下午以及傍晚,中国队连连回收金牌呀。其他的就不讲了,为程菲的跳马和自由体操两项比赛的失误感到惋惜,两场比赛,前期程菲都表现出最好的成绩,跳马第一跳居然跳出全场最高分。可惜后来都出现失误,程菲的实力,都能看到,没关系,你已经尽力了。
在跳马的比赛中,德国33岁的老将丘索维金娜取得了银牌,真的不容易。体操这种超级青春饭的活,居然还有这么一位大龄的母亲在拼杀。是什么原因让丘索维金娜还在支持比赛呢?仅仅对体操的热爱吗?请看这篇文章《丘索维金娜为子血拼》,真的不容易呀,为这位母亲鼓掌,赞一个。让我想到了一个职业与年龄的问题,三十岁的程序员老了吗?我还想多干几年呢,一切皆有可能。三十三岁的母亲都能参加体操,还能拿银牌,三十三岁的程序员就不可以吗?30+的程序员我看了不少,个个技术超牛,收入颇丰。再一次BS一下关于程序员年龄问题,在无病呻吟的家伙。
这次奥运发现在有一个问题,俄罗斯的表现很令人意外,难到是因为对手太强了?还是因为本国军事动乱?一个稳定和谐的环境何其的重要。看样子今年只有中国和美佬较量了,俄罗斯是没什么希望了。
周未报告到此结束,下面来一点网上转来的,关于菲尔普斯具有超现实的分析。By Lonkil
8号那场开幕式,反正是深深的被震撼了,效果真的太棒了。可是CCTV版的拍效果有些不到位的地方,今天重看了NBC版的,虽然也有不足之处,结合强大的CCTV版,效果好多了。NBC的主持人话真多,可能照顾外国观众吧,帮助他们理解。
奥运开幕到今天已经是第六天了,中国军团的表现相当的出色,支持他们。不论是否拿到奖牌,你们的参赛精神,中国人民有目共睹。希望中国的奖牌榜一直领先下去,直到第二十九届奥运会结束。
今天我罗大侠居然神奇的中了国外一款病毒,Nod32报“Win32/TrojanDownloader.FakeAlert.DJ 特洛伊木马”。真是太为难罗大侠了,经常出入于国外论坛,力顶友邦的AV事业。居然让他中招了,友邦人土太不厚道了。这款病毒属于BMP捆绑型病毒,由于我对病毒的“行情”不了解,这种技术应该属于比较老的了,不过居然让我罗大侠给碰上了。
让我感兴趣的是该病毒特有的绑定方式,比熊猫烧香招摇多了。熊猫不就改了一个小小的ICO嘛,这个病毒到挺狠。直接将绑了毒的BMP的图片,设成了桌面背景。那图片上还用蓝底黄色三号字,告诉他你已中毒。
标签: 病毒
虽然目前仅有女友一名,老婆、情人、红颜三者皆无(虽多次尝试将女友V3.0升级成老婆V1.0,匀因系统不兼容,升级失败),但通过在世上虚混二十几载,但深感此遍文章言语之精辟,将三者的关系表达的到位。对原作者万分敬仰,如涛涛江水。。。。。。,得转过来与大家共享。By Lonkil
正文开始:
什么是妻子?就是你愿意把积蓄交给她保管的女人,什么是情人?就是你偷偷摸摸地去和她约会又怕妻子撞见的女人,什么是红颜知己?就是你能把有些秘密说给她听却不能说给妻子听的女人!!!
妻子是一种约束,约束你不能随便和别的女人交往;情人是一种补偿,补偿你想从妻子那得到却又无法得到的激情;红颜知己就是一种点拨,点拨你心中的迷津!!!
妻子陪你过日子,情人陪你花钞票,红颜知己陪你聊聊天。妻子不能替代情人,因为她没有情人有情调;情人不能代替妻子,因为她没有妻子的亲情;妻子和情人都代替不了红颜知己,那是心灵的需要!!!
妻子是一个和你没有一点血缘关系的女人,却为你深夜不回家而牵肠挂肚;情人是一个和你没有一点家庭关系的女人,却让你尝尽做男人滋味尽情消魂;红颜知己是一个还没和你扯上关系的女人,却能分担你的快乐和忧愁!!!
根据中华民族5000年的传统,数字8是个吉利的数字。所以奥运的开幕式被定2008年8月8日晚8时。这么好的良辰吉日,不知道有多少新人走进婚姻的殿堂。
从申奥成功到现在将近七年,那年我是暑假,在姨妈家开的工厂打暑期工。每天从早上7点一直干到晚上十一点,资本家就是资本家,服了。站到我的脚踝都肿了,干了一个月,逃回了家,打死我也不干了。我的第一桶金就是来自那次的打工,整整30天,我清楚的记得工资正好500元人民币,往事不堪回首。
中国能作为东道主来主持这场盛会,作为炎黄子孙感到万分的荣幸。不过在操作过程是不是有一点过了,一切都围着奥运转起来,不免让我这等有点反骨之“流”产生了反感。毕竟奥运是我们值得庆祝的大事,我们当然想办的轰轰烈烈、风风光光,不能在各位友邦人士面前失了面子,但是作为一芥草民还要一日三餐,新陈代谢。
不管怎么样,奥运终于来了,在此祝北京奥运成功举办。
来源于网络,作者已无从考证了,感谢原作者的整理。by lonkil
由于VC高度的灵活性,导致制作界面方面的缺陷。通过html来美化界面,是个好主意。如何实现VC与html页面进行交互呢?可以通过javascript与VC进行通信,具体的请查看代码。
以下这份代码作者为:wlwlxj
今天在网上看到这份代码,以前在公司深受其害,感觉不错就转了过来。
来自:http://hi.baidu.com/fengze/blog/item/445474c698714f1e9c163d3b.html
编译环境:WINXP SP2+VC6.0+Winpcap开发包