chentqjl
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-01
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望6点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:2235回复:16

怎样在ring0下从GUID得到一个设备的符号连接名字

楼主#
更多 发布于:2005-01-12 10:09
我控制的一个设备没有确定的符号连接名,而驱动我又没有源代码,从前我在ring3下控制这个设备,可以从它的GUID得到它的符号连接名,但现在需要在ring0下控制这个设备,在ring0下如何从一个设备的GUID得到它的符号连结的名字呢?
陈涛
xxcat1220
驱动牛犊
驱动牛犊
  • 注册日期2004-01-19
  • 最后登录2010-12-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-12 10:54
同样的方法
chentqjl
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-01
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望6点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-13 08:41
不行,ring3下的很多函数在ring0下无法使用,我试过连编译都没过
陈涛
hongdou
驱动牛犊
驱动牛犊
  • 注册日期2004-06-15
  • 最后登录2006-03-10
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-14 13:03
好像是不行,符号连接是系统信息数据,靠枚举设备肯定得不到,你要这个连接干吗?考虑一下变通的方法。
水来啊
hongdou
驱动牛犊
驱动牛犊
  • 注册日期2004-06-15
  • 最后登录2006-03-10
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-14 13:10
可以不通过符号连接。
你有设备的驱动对象名称和设备对象名称是不是。
你可以使用ObReferenceObjectByName
这是一个未公开的ddk api,用google搜以下。

你有可能不能通过设备名获得设备指针(不知道为什么,调用老是不成功),如果这样的话,先获得设备驱动对象指针,里面有一个DeviceObject 指针。如果这个驱动管理多个设备,还要通过DeviceObject->NextDeivce枚举设备。

DeviceObject-0x28的位置是ObjectHeader,不用管他,DeviceObject-0x28+0x4 的位置是一个Unicode字符串,他为这个对象的名字。
水来啊
chentqjl
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-01
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望6点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-14 13:42
谢谢楼上
我先说一下我的目的,我要在一个驱动(驱动1)当中控制另一个驱动(驱动2)的设备,但驱动1我没有完全的源代码,不能添加下层驱动,驱动2我根本没有它的源代码,只有它的GUID和在ring3下控制它的方法.现在我的思路是,我只需要将这种控制方法翻译到ring0下就行了,但第一个难题就是如何从设备的GUID得到设备的名字.
陈涛
sampex
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2010-01-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-01-15 23:36
why need guid to control the other device?  write a filter driver for it.  You will have full control
chentqjl
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-01
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望6点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-01-17 09:40
我又没有这个设备的驱动源代码,怎么写它的filter driver.在ring0下控制一个没有驱动源代码的设备到底有几种方法呀.
陈涛
chentqjl
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-01
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望6点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-01-17 09:45
这就好比写文件一样,不管用什么技巧,你总要找到这个文件吧,所以需要知道这个文件的名字.可能知道名字有很多技巧,但无论如何你也无法绕开文件名字这个步骤.我要控制的这个设备也是一样,我要控制它,总得让系统找到它呀,系统凭什么找到它,它的名字,这个方法我知道,可我没有它的名字,我只有它的GUID,所以自然就想到了从GUID得到它的名字.
所以说不管采用什么技巧,得到这个设备的对象(或句柄),其实我的问题就是,我有设备的GUID,怎样得到设备的对象或者句柄.
陈涛
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-01-17 10:38
你所说的设备的名字是固定的,还是动态的,你可以先把设备连接上,用devicetree.exe来看看。U盘的设备名称就是动态改变的,你可以试着参考类似打开U盘的方法来做。
在交流中学习。。。
chentqjl
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-01
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望6点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-01-17 13:59
设备名是变化的,我重新安装一次系统,设备名就改变了,另外我将设备插入不同的USB口,设备名也会不同,所以我没办法用一个确定的设备名来控制设备.
陈涛
chentqjl
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-01
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望6点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-01-17 14:10
我不熟悉U盘,事实上我也是刚接触DDK,实际上在开发时,我已经可以控制设备,具体方法是这样:首先我在ring3下的一段代码中通过设备的GUID得到它的名字,再将这个名字应用于ring0下的代码来打开设备,并且对设备进行操作,这些已经成功.但是在实际应用中这个名字是变化的,我必须找到ring0下通过GUID得到设备名字的方法,才能真正控制设备.
陈涛
hongdou
驱动牛犊
驱动牛犊
  • 注册日期2004-06-15
  • 最后登录2006-03-10
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-01-18 09:46
用上层应用程序获得设备句炳
用ioctl将句炳值传给驱动
驱动用obreferenceobjectbyhandle获得设备指针
(你的意思好像不能用ioctl ,这样的话在应用程序中创建一个命名对象,将句炳值付给命名对象,在驱动程序中直接访问这个对象,这个没试过,如果可行的话,记得给分哦)
水来啊
chentqjl
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-01
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望6点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-01-18 11:46
这个我也考虑过,用上层得到设备名称,将名称放到一个固定的文件中,下层驱动程序再访问这个文件得到名称,从而控制设备,这样做完全可行,而且很简单.但我觉得这样做太有违软件模块结构的合理性了,不到不得已我是不会这样做的.
陈涛
sampex
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2010-01-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-01-19 08:42
ring0 下你可以控制的只是IRPs,写个upper filter driver 给驱动2.改动驱动2的inf文件.安装的时候让WINDOW装上upper filter driver.不要远程许.
chentqjl
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-01
  • 粉丝0
  • 关注0
  • 积分37分
  • 威望6点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-01-19 16:38
谢谢楼上,你给我提供了一条新的思路,我可以试一试.
不过你说ring0可以控制的只是IRPs,这点我不同意,事实上我已经实现了ring0下对通过设备名称,对设备的控制,问题只是这个名称是可变的,每次需要通过GUID得到设备当前的名称,难点就在这里
陈涛
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2005-01-19 21:10
他已经说的很清楚了。加个upper filter driver和有没有它的源代码没有关系。

你的情况,只要在upper filter里面自己创建IRP就可以控制了。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
游客

返回顶部