注册 登录
编程论坛 汇编论坛

在win32汇编中,句柄和ID的区别与联系主要有哪些?

ONEPROBLEM 发布于 2008-07-13 21:45, 3055 次点击
小菜刚接触WIN32汇编,对句柄实质上是什么,ID和句柄之间又有哪些的区别与联系,弄得不是很清楚,希望大家知道的,不管多少,都来说说自己的看法。
9 回复
#2
你们都要疼我哦2008-07-13 22:01
我也刚学没几天,刚开始看第5章.

ID是自己定义的,只要符合ID的命名规则就可以.

句柄是系统自己搞的一套东西,系统靠句柄来标识引用绝大部分东西,所以我们只是要去 get需要的句柄就可以了,至于句柄怎么分配的,句柄的具体数值是什么,在win32编程中好象没必要多了解.记得好象句柄的实际数值是它标识的东西的内存地址.
#3
ONEPROBLEM2008-07-13 22:34
句柄,会不会是资源、模块在内存中的首地址,甚至是物理地址,而并非是线性地址?当然,它是供调用者引用、控制资源、模块用的。
ID,是资源的标识符吧?它一般放在消息结构中,通过它,也可以引用资源。
这是我的看法,大家说说自己的理解哈,集思广益。
#4
你们都要疼我哦2008-07-13 22:52
老兄你学的真细啊.ID就是标识符.跟常量变量的名一样理解吧.  句柄完全是系统里面流通的一套东西,只不过我们用win32编程需要它, 大到进程  模块 窗口 小到光标 图标,都要用句柄来引用.
句柄的定义只是在内存中存在,其数值不是每次都固定的,所以了解句柄的具体数值没意义.一般情况下句柄的数值是内存中的首地址. 离开了内存谈句柄是根本不可能的.
保护模式下的内存地址好象没"物理地址"这个说法啊,都是PE文件被加载到内存中分配的虚拟地址.

我也刚学没几天,也不太理解. 乱说的
#5
missiyou2008-07-17 14:38
说白了,句柄就是数据结构。windows不愿意让你看到内在东西所以搞了个句柄,在linux 里就没有啊
#6
ONEPROBLEM2008-07-17 14:45
回复 5# missiyou 的帖子
妙啊!我也有此感觉,就是不知道其所以然。
其实,WIN32汇编中数据结构特别多,还层层嵌套呢,原来句柄就是它们的入口地址啊。
那ID,本质又是什么呢?
我很想弄明白。
#7
ONEPROBLEM2008-07-17 14:50
回复 6# ONEPROBLEM 的帖子
ID如 2#所说的。
#8
missiyou2008-07-17 18:26
[bo][un]ONEPROBLEM[/un] 在 2008-7-17 14:45 的发言:[/bo]

妙啊!我也有此感觉,就是不知道其所以然。
其实,WIN32汇编中数据结构特别多,还层层嵌套呢,原来句柄就是它们的入口地址啊。
那ID,本质又是什么呢?
我很想弄明白。

它有一个句柄表,保存在程序开始地方。就像,int *p; p=~p;这样,这个值就变了,struct a{int a};struct a *p; 句柄表=~p;p就不能 p->a了。
id 有可能是句柄表前面的标号,还有特别定义的标号吧,呵呵。
#9
你们都要疼我哦2008-07-17 22:01
  还在想这个啊...

句柄是在WINDOWS系统里用的,一般是一个32位整数值,而不是一个"结构',系统通过句柄来标识 实例 窗口 菜单 输出设备 文件 ......等等,   句柄值不确定,这次运行是这个,那次运行是那个, 一般情况下是内存中该对象的首址, 这里只是讲"一般情况",而不是说一定,也不是跟楼上所讲高级语言中的那些数组了结构了什么的概念一样. 句柄值有可能是1 有可能是2,3...有些系统中,GET到的句柄值还是它所引用对象的字节数,...所以说过多的钻研句柄和句柄值是没意义的.况且句柄的含义本来也没有定义. 只要知道如何使用就行了.ID也一样.
#10
zklhp2008-07-20 02:12
[bo][un]你们都要疼我哦[/un] 在 2008-7-17 22:01 的发言:[/bo]

  还在想这个啊...

句柄是在WINDOWS系统里用的,一般是一个32位整数值,而不是一个"结构',系统通过句柄来标识 实例 窗口 菜单 输出设备 文件 ......等等,   句柄值不确定,这次运行是这个,那次运行是那个, 一般 ...


解释的太好了 赞一个

句柄表的具体实现不需要掌握  可能就是 1h 2h 3h 这样的数

貌似在驱动里  就可以直接操作相应的内核对象 不用句柄了

不管怎么说 句柄还是很好用的 呵呵
1