number9998
驱动牛犊
驱动牛犊
  • 注册日期2005-04-03
  • 最后登录2009-05-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:1392回复:7

PCI驱动问题

楼主#
更多 发布于:2005-04-03 12:07
我现在在做PCI驱动程序,在应用程序中如果想和驱动程序通信,首先要通过createFile获得设备句柄.但是WDM中createFile的第一个参数是设备的符号链接名.我如何才能知道我的设备的符号链接名是什么呢?小弟跪求,急啊!
wwm_820924
驱动牛犊
驱动牛犊
  • 注册日期2004-07-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望169点
  • 贡献值1点
  • 好评度22点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-04-03 13:02
驱动程序中AddDevice列程中,IoCreateDevice创建设备对象和IoCreateSymbolicLink创建设备连接时自己定义 的
number9998
驱动牛犊
驱动牛犊
  • 注册日期2005-04-03
  • 最后登录2009-05-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-04-03 16:11
可否详细告诉我具体怎么样才能得到他呢??可否把具体语句和这两个函数的参数写出来??多谢!!!
另外我还不明白的是在ADDDevice函数中用了这两个函数之后,我怎么样才能看到该设备的符号链接名到底是什么呢?毕竟驱动程序不是可执行文件呀.看不到这两个函数的执行结果,也就看不到他得到的值是什么呀?但是在应用程序中我还要用到这个值??多谢!!

[编辑 -  4/3/05 by  number9998]
FutureForever
驱动牛犊
驱动牛犊
  • 注册日期2004-09-02
  • 最后登录2005-06-13
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-04-04 06:59
用WinObj工具看看就知道了。
number9998
驱动牛犊
驱动牛犊
  • 注册日期2005-04-03
  • 最后登录2009-05-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-04-05 07:57
我看过了,在??目录下有三项,一个是NAME一个是TYPE还有一个symlink.name下的那个名字太长,好像不太象,symlink下的那个我试过了,但是不行,获得的设备句柄是错误的
wwm_820924
驱动牛犊
驱动牛犊
  • 注册日期2004-07-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望169点
  • 贡献值1点
  • 好评度22点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-04-06 11:07
我是这样做的
创建设备对象时:
swprintf(DeviceNameBuffer, L\"\\\\Device\\\\\" L\"PCI9054\");

        RtlInitUnicodeString(&DeviceName_Unicode,DeviceNameBuffer);

        // Create the device object
        status = IoCreateDevice(pDriverObject,sizeof(DEVICE_EXTENSION),&DeviceName_Unicode,
FILE_DEVICE_UNKNOWN,0,
FALSE,            // Shared by applications
&fdo);
创建设备联接时:
swprintf(DeviceLinkNameBuffer, L\"\\\\DosDevices\\\\\" L\"PCI9054\");

    RtlInitUnicodeString(&DeviceLinkName_Unicode,DeviceLinkNameBuffer);

    KdPrint((\"Creating Win32 symbolic link (%ws)...\\n\", DeviceLinkNameBuffer));//在DebugView下可以看到

    status = IoCreateSymbolicLink(&DeviceLinkName_Unicode,&DeviceName_Unicode);

打开设备时:
hDevice =
CreateFile(\"\\\\\\\\.\\\\PCI9054\",
GENERIC_READ | GENERIC_WRITE,
0, // share mode none
NULL, // no security
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL ); // no template


驱动装好并启动后,在WinObj下可以看到
??目录下,name(PCI9054),symlink(\\device\\pci9054)
exskywing
驱动牛犊
驱动牛犊
  • 注册日期2005-04-12
  • 最后登录2005-04-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-04-14 13:09
通过GUID也可以打开设备阿,很多书或者网站上都有介绍的。
number9998
驱动牛犊
驱动牛犊
  • 注册日期2005-04-03
  • 最后登录2009-05-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-04-16 18:29
问题已经解决,多谢各位帮助.总结一下大家共享
打开设备有两种方法,一是用符号链接名,一是用guid接口
刚开始我用的是guid接口打开设备,也就是openbyinterface函数做的.但是由于我要封装应用程序.此函数在devitf头文件中定义的,也许是我的vc出了问题,总是不能包含此头文件.
因此我后来又改用了符号链接名打开设备.符号链接名的获取可以用winobj工具的??目录下看到.
游客

返回顶部