阅读:1406回复:7
PCI驱动问题
我现在在做PCI驱动程序,在应用程序中如果想和驱动程序通信,首先要通过createFile获得设备句柄.但是WDM中createFile的第一个参数是设备的符号链接名.我如何才能知道我的设备的符号链接名是什么呢?小弟跪求,急啊!
|
|
沙发#
发布于:2005-04-03 13:02
驱动程序中AddDevice列程中,IoCreateDevice创建设备对象和IoCreateSymbolicLink创建设备连接时自己定义 的
|
|
板凳#
发布于:2005-04-03 16:11
可否详细告诉我具体怎么样才能得到他呢??可否把具体语句和这两个函数的参数写出来??多谢!!!
另外我还不明白的是在ADDDevice函数中用了这两个函数之后,我怎么样才能看到该设备的符号链接名到底是什么呢?毕竟驱动程序不是可执行文件呀.看不到这两个函数的执行结果,也就看不到他得到的值是什么呀?但是在应用程序中我还要用到这个值??多谢!! [编辑 - 4/3/05 by number9998] |
|
地板#
发布于:2005-04-04 06:59
用WinObj工具看看就知道了。
|
|
地下室#
发布于:2005-04-05 07:57
我看过了,在??目录下有三项,一个是NAME一个是TYPE还有一个symlink.name下的那个名字太长,好像不太象,symlink下的那个我试过了,但是不行,获得的设备句柄是错误的
|
|
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) |
|
6楼#
发布于:2005-04-14 13:09
通过GUID也可以打开设备阿,很多书或者网站上都有介绍的。
|
|
7楼#
发布于:2005-04-16 18:29
问题已经解决,多谢各位帮助.总结一下大家共享
打开设备有两种方法,一是用符号链接名,一是用guid接口 刚开始我用的是guid接口打开设备,也就是openbyinterface函数做的.但是由于我要封装应用程序.此函数在devitf头文件中定义的,也许是我的vc出了问题,总是不能包含此头文件. 因此我后来又改用了符号链接名打开设备.符号链接名的获取可以用winobj工具的??目录下看到. |
|