| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付买域名,送MP3、MP4
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY买空间,免费送域名(厦门中资源)
共有 803 人关注过本帖
标题:在win32汇编中,句柄和ID的区别与联系主要有哪些?
收藏  订阅  推荐  打印 
本主题由 zklhp 于 2008-9-29 19:33 加入精华
ONEPROBLEM
Rank: 12Rank: 12Rank: 12
来自:编程中国
等级:版主
威望:8
帖子:1381
积分:12632
注册:2008-7-11
在win32汇编中,句柄和ID的区别与联系主要有哪些?

小菜刚接触WIN32汇编,对句柄实质上是什么,ID和句柄之间又有哪些的区别与联系,弄得不是很清楚,希望大家知道的,不管多少,都来说说自己的看法。
搜索更多相关主题的帖子: 句柄  汇编  联系  小菜  实质  
2008-7-13 21:45
你们都要疼我哦
Rank: 12Rank: 12Rank: 12
来自:火星
等级:版主
威望:8
帖子:186
积分:2581
注册:2008-7-13

我也刚学没几天,刚开始看第5章.

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

句柄是系统自己搞的一套东西,系统靠句柄来标识引用绝大部分东西,所以我们只是要去 get需要的句柄就可以了,至于句柄怎么分配的,句柄的具体数值是什么,在win32编程中好象没必要多了解.记得好象句柄的实际数值是它标识的东西的内存地址.
2008-7-13 22:01
ONEPROBLEM
Rank: 12Rank: 12Rank: 12
来自:编程中国
等级:版主
威望:8
帖子:1381
积分:12632
注册:2008-7-11

句柄,会不会是资源、模块在内存中的首地址,甚至是物理地址,而并非是线性地址?当然,它是供调用者引用、控制资源、模块用的。
ID,是资源的标识符吧?它一般放在消息结构中,通过它,也可以引用资源。
这是我的看法,大家说说自己的理解哈,集思广益。
2008-7-13 22:34
你们都要疼我哦
Rank: 12Rank: 12Rank: 12
来自:火星
等级:版主
威望:8
帖子:186
积分:2581
注册:2008-7-13

老兄你学的真细啊.ID就是标识符.跟常量变量的名一样理解吧.  句柄完全是系统里面流通的一套东西,只不过我们用win32编程需要它, 大到进程  模块 窗口 小到光标 图标,都要用句柄来引用.
句柄的定义只是在内存中存在,其数值不是每次都固定的,所以了解句柄的具体数值没意义.一般情况下句柄的数值是内存中的首地址. 离开了内存谈句柄是根本不可能的.
保护模式下的内存地址好象没"物理地址"这个说法啊,都是PE文件被加载到内存中分配的虚拟地址.

我也刚学没几天,也不太理解. 乱说的
2008-7-13 22:52
missiyou
Rank: 12Rank: 12Rank: 12
等级:版主
威望:7
帖子:313
积分:2865
注册:2007-10-9

说白了,句柄就是数据结构。windows不愿意让你看到内在东西所以搞了个句柄,在linux 里就没有啊
2008-7-17 14:38
ONEPROBLEM
Rank: 12Rank: 12Rank: 12
来自:编程中国
等级:版主
威望:8
帖子:1381
积分:12632
注册:2008-7-11
回复 5# missiyou 的帖子

妙啊!我也有此感觉,就是不知道其所以然。
其实,WIN32汇编中数据结构特别多,还层层嵌套呢,原来句柄就是它们的入口地址啊。
那ID,本质又是什么呢?
我很想弄明白。
2008-7-17 14:45
ONEPROBLEM
Rank: 12Rank: 12Rank: 12
来自:编程中国
等级:版主
威望:8
帖子:1381
积分:12632
注册:2008-7-11
回复 6# ONEPROBLEM 的帖子

ID如 2#所说的。
2008-7-17 14:50
missiyou
Rank: 12Rank: 12Rank: 12
等级:版主
威望:7
帖子:313
积分:2865
注册:2007-10-9

ONEPROBLEM 在 2008-7-17 14:45 的发言:

妙啊!我也有此感觉,就是不知道其所以然。
其实,WIN32汇编中数据结构特别多,还层层嵌套呢,原来句柄就是它们的入口地址啊。
那ID,本质又是什么呢?
我很想弄明白。
它有一个句柄表,保存在程序开始地方。就像,int *p; p=~p;这样,这个值就变了,struct a{int a};struct a *p; 句柄表=~p;p就不能 p->a了。
id 有可能是句柄表前面的标号,还有特别定义的标号吧,呵呵。
2008-7-17 18:26
你们都要疼我哦
Rank: 12Rank: 12Rank: 12
来自:火星
等级:版主
威望:8
帖子:186
积分:2581
注册:2008-7-13

  还在想这个啊...

句柄是在WINDOWS系统里用的,一般是一个32位整数值,而不是一个"结构',系统通过句柄来标识 实例 窗口 菜单 输出设备 文件 ......等等,   句柄值不确定,这次运行是这个,那次运行是那个, 一般情况下是内存中该对象的首址, 这里只是讲"一般情况",而不是说一定,也不是跟楼上所讲高级语言中的那些数组了结构了什么的概念一样. 句柄值有可能是1 有可能是2,3...有些系统中,GET到的句柄值还是它所引用对象的字节数,...所以说过多的钻研句柄和句柄值是没意义的.况且句柄的含义本来也没有定义. 只要知道如何使用就行了.ID也一样.
2008-7-17 22:01
zklhp
Rank: 12Rank: 12Rank: 12
来自:china
等级:版主
威望:9
帖子:740
积分:8671
注册:2007-7-10

你们都要疼我哦 在 2008-7-17 22:01 的发言:

  还在想这个啊...

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

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

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

不管怎么说 句柄还是很好用的 呵呵
2008-7-20 02:12
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.055051 second(s), 10 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved