首页
社区
课程
招聘
[讨论]Windows创建多个socket得到的文件对象名是否重复
发表于: 2018-10-19 09:31 3402

[讨论]Windows创建多个socket得到的文件对象名是否重复

2018-10-19 09:31
3402
根据reactos和《windows内核原理与实现》6.2.3 文件对象中,创建 socket本质是创建设备“Device\\Afd\\Endpoint”,经过对象管理机制中ObCreateObject创建FILE_OBJECT类型对象,成员FileName设置为 Endpoint 。
那么用户创建多个socket的时候,得到的文件对象的 FileName都是 Endpoint,这个 FileName可以重名么?
如果可以重名,那么在驱动中用名字打开文件对象的方式就行不通;
如果不可以重名,那socket的文件对象名是怎么处理的?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 12848
活跃值: (9143)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
2
难道打开的不是同一个内核对象?
2018-10-19 16:01
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
hzqst 难道打开的不是同一个内核对象?
是打开的同一个“设备内核对象”,但文件对象是一个socket一个,这个文件对象的名字应该也不能重复吧
2018-10-19 16:32
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
类似于磁盘文件,比如“\\Device\\Harddisk0\\Partition0\\Windows\\Explorer.exe”, "\\Device\\Harddisk0\\Partition0"是设备对象(唯一),"\\Windows\\Explorer.exe"是文件对象名。“ \\Device\\Afd\\Endpoint”中,Afd.sys中创建的设备对象是“ \Device\\Afd”,“\\Endpoint”应该是具体socket文件的文件对象名。
2018-10-19 16:55
0
雪    币: 12848
活跃值: (9143)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
5
leolee嗷嗷 类似于磁盘文件,比如“\\Device\\Harddisk0\\Partition0\\Windows\\Explorer.exe”, "\\Device\\Harddisk0\\Parti ...
应该是可以重名的,我记得nt的文件对象是没有不许重名的要求的,文件名不许重复是文件系统自己规定的。
最后于 2018-10-21 09:51 被hzqst编辑 ,原因:
2018-10-21 09:50
0
雪    币: 216
活跃值: (250)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
hzqst leolee嗷嗷 类似于磁盘文件,比如“\\Device\\Harddisk0\\Partition0\\Windows\\Explorer.exe”, &q ...
我怎么感觉这跟重不重名没啥关系, 而是 :  一个"有名的玩意" 能不能被多次打开.  
这个问题类似于如果不指定独占参数, 为啥C:\1.txt 能被A.exe打开,  又能同时被B.exe打开, 还能同时被C.exe打开......
2018-10-24 12:10
0
雪    币: 216
活跃值: (250)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
tsoo 我怎么感觉这跟重不重名没啥关系, 而是 : 一个"有名的玩意" 能不能被多次打开. 这个问题类似于如果不指定独占参数, 为啥C:\1.txt 能被A.exe打开, 又能同 ...
然后楼主似乎是想在驱动中,  通过 c:\1.txt这个名字 ,  去得到某次CreateFile返回的特定的句柄....
2018-10-24 12:11
0
雪    币: 12848
活跃值: (9143)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
8
tsoo 我怎么感觉这跟重不重名没啥关系, 而是 : 一个"有名的玩意" 能不能被多次打开. 这个问题类似于如果不指定独占参数, 为啥C:\1.txt 能被A.exe打开, 又能同 ...
我也不知道楼主想表达什么
在驱动里面打开socket是想干嘛。。。不是有wsk??
2018-10-24 14:20
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
其实也没刻意要做什么,只是最近在梳理Windows中socket相关知识,想了解下socket到底和磁盘文件有什么区别,所以在期间看到创建socket其实是创建的“Device\\Afd\\Endpoint”,“\Endpoint”是文件对象名。不明白这个文件对象名有什么意义。
现在好像明白了,文件对象FILE_OBJECT和handle其实只是文件的某个上下文的io管理器层表示。
磁盘文件可以创建可以打开,会同时有多个上下文,所以他的FILE_OBJECT可以重名。socket其实只是临时内存数据结构,没有打开只有创建,IRP_MJ_CREATE处理函数也就没有像磁盘文件那样需要查找是否有同名文件已创建。所以socket的 FILE_OBJECT 中文件名重不重复都没有意义。
最后于 2018-10-31 09:35 被leolee嗷嗷编辑 ,原因:
2018-10-31 09:33
0
游客
登录 | 注册 方可回帖
返回
//