zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1411回复:12

一个关于CreateFile的简单问题

楼主#
更多 发布于:2003-01-13 22:05
W2K下,如何用CreateFile获得WDM驱动程序的设备句柄?――其中的文件名\"\\\\.\\Name\"――\"Name\"所指为何物?是驱动程序文件名称还是驱动程序名,
如果是编译后得到的驱动程序文件名,那么在下面的函数中的创建的名字是什么意思呢,起什么作用的?
RtlInitUnicodeString(&linkName, L\"\\\\DosDevices\\\\ZSCPCI\");
code = IoCreateSymbolicLink(&linkName, &devName);

最新喜欢:

zackaryzackar...
大家好!
tjm
tjm
驱动小牛
驱动小牛
  • 注册日期2002-05-18
  • 最后登录2004-10-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-01-13 23:22
是符号连接名。就是驱动暴露给应用程序的名字。如果驱动程序想准许应用程序接触自己,就可以在驱动程序中使用内河API向外暴露一个,符号连接名。
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-14 08:56
那这个符号连接名到底有什么作用?我打开驱动程序文件只需要用CreateFile打开驱动程序文件名啊?而不是和这个符号连接名联系啊!
大家好!
ambercctv
驱动牛犊
驱动牛犊
  • 注册日期2002-11-19
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-14 09:37
\\\\.\\Name的Name是符号连接名,一般内核和win32用户态有不同的名字,为了在win32用户态访问驱动程序,你需要提供符号连接RtlInitUnicodeString(&linkName, L\"\\\\DosDevices\\\\ZSCPCI\");
初始化符号连接字符串
这里符号连接为 \\\\??\\ZSCPCI以L开始是Unicode串
\\\\??\\也可写为\\\\DosDevices

code = IoCreateSymbolicLink(&linkName, &devName);
在符号连接和设备名之间建立符号连接,
devname是你的内核设备名

tjm
tjm
驱动小牛
驱动小牛
  • 注册日期2002-05-18
  • 最后登录2004-10-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-01-14 11:28
-----------------------------------------
那这个符号连接名到底有什么作用?我打开驱动程序文件只需要用CreateFile打开驱动程序文件名啊?而不是和这个符号连接名联系啊!
-----------------------------------------
错了,CreateFile中用的不是文件名。
即使在VXD时代也不是文件名。
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-01-14 12:03
tjm
可是我以前写的一个VXD就是打开的驱动程序文件名啊?
大家好!
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-01-14 12:05
ambercctv
那么CreateFile打开的究竟是哪个名字?
大家好!
ambercctv
驱动牛犊
驱动牛犊
  • 注册日期2002-11-19
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-01-14 13:55
CreateFile()函数不仅可以打开文件,还可以打开如下类型
1)File
2)Pipe
3)MailSlot
4)com1,HardDisk,FloppyDisk等
例如,可以这样打开串口1:
CreateFile(\"\\\\\\\\.\\\\com1\",,,,,);
这里com1就是串口1的符号连接名

ambercctv
驱动牛犊
驱动牛犊
  • 注册日期2002-11-19
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-01-14 13:56
给分吧,我都说了这么多了
tjm
tjm
驱动小牛
驱动小牛
  • 注册日期2002-05-18
  • 最后登录2004-10-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-01-14 15:51
在VXD中你使用的是DDB中存的设备名,就是在VXD中,用
Declare_virtual_device宏定义的哪个名字(第一个参数),因为你用了和XXX。VXD相同的名字XXX,所以看起来好象是用的文件名。
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-01-15 09:09
说了这么多,我都糊涂了,我还是去试试好了。。。。。 :D :D
大家好!
tjm
tjm
驱动小牛
驱动小牛
  • 注册日期2002-05-18
  • 最后登录2004-10-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-01-15 11:48
这有什么好弧度的。
CreateFile()可以用来打开多种对象(ambercctv说过了),
驱动也是一种对象,
----------------------
tjm
可是我以前写的一个VXD就是打开的驱动程序文件名啊?
-----------------------
在9X的VXD中驱动对象的名字存在DDB中(在VXD中用Declare_virtual_device宏来实现注册),
因为多数情况下VXD中驱动对象的名字习惯上用驱动文件的名字(没有后缀),所以表观上就使人糊涂。

在NT结构中,驱动对象的名字有两个,一个是内核名,只有内核程序可以使用,一个是符号连接名,供WIN32程序使用,CreateFile()就使用这个符号连接名。


微挣这点分,要吐血了。
zshuc
驱动小牛
驱动小牛
  • 注册日期2001-08-16
  • 最后登录2012-04-19
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-01-15 19:46
tjm,ambercctv谢了,呵呵,我现在就给分,我再多加点分啊
大家好!
游客

返回顶部