阅读:2235回复:16
怎样在ring0下从GUID得到一个设备的符号连接名字
我控制的一个设备没有确定的符号连接名,而驱动我又没有源代码,从前我在ring3下控制这个设备,可以从它的GUID得到它的符号连接名,但现在需要在ring0下控制这个设备,在ring0下如何从一个设备的GUID得到它的符号连结的名字呢?
|
|
|
沙发#
发布于:2005-01-12 10:54
同样的方法
|
|
板凳#
发布于:2005-01-13 08:41
不行,ring3下的很多函数在ring0下无法使用,我试过连编译都没过
|
|
|
地板#
发布于:2005-01-14 13:03
好像是不行,符号连接是系统信息数据,靠枚举设备肯定得不到,你要这个连接干吗?考虑一下变通的方法。
|
|
|
地下室#
发布于:2005-01-14 13:10
可以不通过符号连接。
你有设备的驱动对象名称和设备对象名称是不是。 你可以使用ObReferenceObjectByName 这是一个未公开的ddk api,用google搜以下。 你有可能不能通过设备名获得设备指针(不知道为什么,调用老是不成功),如果这样的话,先获得设备驱动对象指针,里面有一个DeviceObject 指针。如果这个驱动管理多个设备,还要通过DeviceObject->NextDeivce枚举设备。 DeviceObject-0x28的位置是ObjectHeader,不用管他,DeviceObject-0x28+0x4 的位置是一个Unicode字符串,他为这个对象的名字。 |
|
|
5楼#
发布于:2005-01-14 13:42
谢谢楼上
我先说一下我的目的,我要在一个驱动(驱动1)当中控制另一个驱动(驱动2)的设备,但驱动1我没有完全的源代码,不能添加下层驱动,驱动2我根本没有它的源代码,只有它的GUID和在ring3下控制它的方法.现在我的思路是,我只需要将这种控制方法翻译到ring0下就行了,但第一个难题就是如何从设备的GUID得到设备的名字. |
|
|
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
|
|
7楼#
发布于:2005-01-17 09:40
我又没有这个设备的驱动源代码,怎么写它的filter driver.在ring0下控制一个没有驱动源代码的设备到底有几种方法呀.
|
|
|
8楼#
发布于:2005-01-17 09:45
这就好比写文件一样,不管用什么技巧,你总要找到这个文件吧,所以需要知道这个文件的名字.可能知道名字有很多技巧,但无论如何你也无法绕开文件名字这个步骤.我要控制的这个设备也是一样,我要控制它,总得让系统找到它呀,系统凭什么找到它,它的名字,这个方法我知道,可我没有它的名字,我只有它的GUID,所以自然就想到了从GUID得到它的名字.
所以说不管采用什么技巧,得到这个设备的对象(或句柄),其实我的问题就是,我有设备的GUID,怎样得到设备的对象或者句柄. |
|
|
9楼#
发布于:2005-01-17 10:38
你所说的设备的名字是固定的,还是动态的,你可以先把设备连接上,用devicetree.exe来看看。U盘的设备名称就是动态改变的,你可以试着参考类似打开U盘的方法来做。
|
|
|
10楼#
发布于:2005-01-17 13:59
设备名是变化的,我重新安装一次系统,设备名就改变了,另外我将设备插入不同的USB口,设备名也会不同,所以我没办法用一个确定的设备名来控制设备.
|
|
|
11楼#
发布于:2005-01-17 14:10
我不熟悉U盘,事实上我也是刚接触DDK,实际上在开发时,我已经可以控制设备,具体方法是这样:首先我在ring3下的一段代码中通过设备的GUID得到它的名字,再将这个名字应用于ring0下的代码来打开设备,并且对设备进行操作,这些已经成功.但是在实际应用中这个名字是变化的,我必须找到ring0下通过GUID得到设备名字的方法,才能真正控制设备.
|
|
|
12楼#
发布于:2005-01-18 09:46
用上层应用程序获得设备句炳
用ioctl将句炳值传给驱动 驱动用obreferenceobjectbyhandle获得设备指针 (你的意思好像不能用ioctl ,这样的话在应用程序中创建一个命名对象,将句炳值付给命名对象,在驱动程序中直接访问这个对象,这个没试过,如果可行的话,记得给分哦) |
|
|
13楼#
发布于:2005-01-18 11:46
这个我也考虑过,用上层得到设备名称,将名称放到一个固定的文件中,下层驱动程序再访问这个文件得到名称,从而控制设备,这样做完全可行,而且很简单.但我觉得这样做太有违软件模块结构的合理性了,不到不得已我是不会这样做的.
|
|
|
14楼#
发布于:2005-01-19 08:42
ring0 下你可以控制的只是IRPs,写个upper filter driver 给驱动2.改动驱动2的inf文件.安装的时候让WINDOW装上upper filter driver.不要远程许.
|
|
15楼#
发布于:2005-01-19 16:38
谢谢楼上,你给我提供了一条新的思路,我可以试一试.
不过你说ring0可以控制的只是IRPs,这点我不同意,事实上我已经实现了ring0下对通过设备名称,对设备的控制,问题只是这个名称是可变的,每次需要通过GUID得到设备当前的名称,难点就在这里 |
|
|
16楼#
发布于:2005-01-19 21:10
他已经说的很清楚了。加个upper filter driver和有没有它的源代码没有关系。
你的情况,只要在upper filter里面自己创建IRP就可以控制了。 |
|
|