3961|8

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

如何获得Display Driver的OjbectName,以及如何得到Device的类型的ID等信息? [复制链接]

我如何得到Display Driver的Object Name?
因为我要用
RtlInitUnicodeString(&usVideoDriverName, L"\\Device\\Video4");

IoGetDeviceObjectPointer(&usVideoDriverName,STANDARD_RIGHTS_ALL
               ,pFileObject,ptaretdeviceobject);

我试过用L"\\Device\\Video0",一用就蓝屏,
不知道如何查到本本上的Display Driver的Object Name?

另外,如何获得相关的硬件厂商等信息呢?
比如这个Device的硬件类型,ID,ID什么的。以便我确认就是某一类型的硬件。
谢谢

最新回复

@LZ 纠正你的一个严重的认知错误:Display Driver 不是基于WDM的,所以你的方法根本行不通!Display Driver 的实现是基于Hook的(注意和应用程序的Hook概念不一样),所以不存在什么Filter Driver的概念。如果你不涉及到Direct X, 那么可以使用微软的Mirror Driver。如果使用了Direct X,那么你需要自己处理做一个虚拟显卡,这个难度比较大,如果你对Direct X和显示驱动架构没有深刻理解的话,是无法完成的,另外兼容性也是问题.  详情 回复 发表于 2009-4-9 14:18
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
楼上是想在内核通过driver之间的通信来获取display device的HW information吗
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
获取device的object有好几种方法,楼主用的只是其中一种
尝试下通过符号链接或者devicename使用zwcreatefile或者zwopensymboliclinkobject的方法来获得device的object
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

4
 
楼上的兄弟,我现在尝试用IoGetDeviceObjectPointer,注意了Level后,没有蓝屏了。不过返回值是IoGetDeviceObjectPointer在DDK Doc中没有列出的STATUS_ACCESS_DENIED。
看样子是被拒绝访问了。
是不是与Display Driver可能是独占的exclusive有关系?
有何解法吗?
我要在我的Filter Driver中,对Display Driver发一些IOCTL
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 
IoGetDeviceObjectPointer调用的时候,windows内核会为每一个对象指针保存一个引用计数,对象被创建时引用计数为1,引用一次,计数加一,删除时(obDereferenceObject)减1,第一次调用IoGetDeviceObjectPointer函数时,会根据设备名打开设备,计数加一,此后再call就只加计数了,所以你是不是遇到这个问题了?
用zwcreatefile或者zwopensymboliclinkobject获取设备对象不好吗

 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

6
 
可是我这出错,是在IoGetDeviceObjectPointer这句上错误。
如果我的Driver在Windows启动时加载,则会蓝屏。 
如果是在Windows下调试,则IoGetDeviceObjectPointer返回STATUS_ACCESS_DENIED.
而IRQ_LEVEL是没问题的。

所以我怀疑是不是因为我的Filter Driver是另一种类型的Device。而不是Display Driver类型的,所以在我的Filter Driver中去获得Display Driver的Pointer是错误的行为?
好像DDK Doc上是不是有说
IoGetDeviceObjectPointer只能在同类型的Driver间使用?

 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
没有道理啊,这么说吧,filter driver自然是WDM式的,那么按照逻辑,一个WDM式的driver至少devicestack有两个device,也就是所谓的PDO与FDO,因为PDO是bus driver生成的,而fdo以及中间的filter driver则都是由vendor开发后install上的,那么就要求安装的时候要能attach(或者说hook)在fdo的链上,那么请问你的driver有此动作吗,类似如下:
pdx->NextStackDevice = IoAttachDeviceToDeviceStack(fdo, PhysicalDeviceObject);
否则你的filter driver就没有链上去哦
而IoGetDeviceObjectPointer是否限定同类型的driver间用,偶就不太清楚了,至少从MSDN的说明上来看不出来:)
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(初级)

8
 
我刚试过可以用IoGetDeviceObjectPointer来获得不同类设备的Pointer了,用的是GUID枚举出设备名的方法。
但还是会蓝屏。很奇怪。
此外,我建好IRP后,用IOCallerDriver下IRP,结果返回是STATUS_NOT_IMPLEMENTED
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

9
 
@LZ
纠正你的一个严重的认知错误:Display Driver 不是基于WDM的,所以你的方法根本行不通!Display Driver 的实现是基于Hook的(注意和应用程序的Hook概念不一样),所以不存在什么Filter Driver的概念。如果你不涉及到Direct X, 那么可以使用微软的Mirror Driver。如果使用了Direct X,那么你需要自己处理做一个虚拟显卡,这个难度比较大,如果你对Direct X和显示驱动架构没有深刻理解的话,是无法完成的,另外兼容性也是问题.
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表