菜鸟进,句柄功能的一个形象比喻
本帖最后由 恶魔猎手的魔 于 2009-5-19 10:22 编辑handle的本意是把柄,把手的意思。是你与操作系统打交道的东东。举个通俗的例子,比如你考上了大学,入学后,学校(操作系统)会给你一个学生证号。注意,这个号码是学校指定的,你无法自选。有了这个号码(学生证,假设一证多用)享受学校提供的服务:如你就可以去图书馆借书,去食堂吃饭,去教室上课等等。
但你不能到食堂里买啤酒,因为学校不允许这种服务。而在计算机中系统提供的服务就是API调用,你有了HANDLE,就可以理直气壮地向系统提出调用API的服务。而指针的权力就大多了,有了指针你可以到处去喝酒,打架,学校(操作系统)管不着,所以句柄和指针的区别在于句柄指针调用系统提供的服务。而句柄虽然是一个能相互区别的号码,但与我们普通的ID号又有区别,普通的ID号是可以由程序员自己定义的,而句柄不行,它是对象生成是系统指定的,是为了区别系统中存在的各个对象,这个句柄不是由程序员符给的。 学习了,确实比较形象。。 ...我来了,虽然说比较形象,但看完,我还是迷迷糊糊的....,这就是菜鸟的辛酸.... 生动倒是生动貌似不是这个比喻法吧。。。。大ZZ也不发表下看法 楼上的说说你的看法 比喻是很形象, 但也不完全正確.
Handle 只是系統發配給你的一個號碼牌.
得到這號碼牌之後, 你可以向系統要求對這號碼牌所對應的對象進行操作.
然而系統本身仍保留對每一操作的權限控制. 详细的了解,得学Windows 编程 句柄类似于一个索引号 OS通过这个索引号得到这个句柄对应的内核对象的地址 进而对内核对象进行操作
因为OS每个模块(ntoskrnl、win32k)都有自己的句柄管理器,所以ntoskrnl、win32k的句柄不能通用
对于ntoskrnl,由于其内部句柄对应的对象分为许多种,如Process Thread Event File等,所以特定的句柄只能使用一组特定的函数操作,比如File类型的句柄就只能用文件类型的Api,如ReadFile等函数操作。
对于不同的进程,ntoskrnl分别为其管理着一个句柄表,所以ntoskrnl的句柄是进程内有效地,而win32k全局只有一张句柄表(也可能是每个desktop或者session,不清楚),所以user32.dll的句柄是系统范围(desktop范围、session范围)通用的。 不过,好像句柄会变的,每次都不一样。 来了,虽然说比较形象,
页:
[1]
2