make
驱动牛犊
驱动牛犊
  • 注册日期2001-06-13
  • 最后登录2004-02-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2261回复:6

大家救我,关于NT驱动

楼主#
更多 发布于:2001-07-04 17:35
我在测试应用程序中,用CreateFile函数打开NT下的一个驱动程序文件如下:
CreateFile("\\\\.\\ZJJFORNT1Device0", //注册表中注册的驱动程序名
       GENERIC_READ | GENERIC_WRITE,
       FILE_SHARE_READ,
       NULL,
       OPEN_EXISTING,
       0,
       NULL);
不能得到句柄,它说找不到路径,如果如下:
CreateFile("\\\\.\\d:\winnt\system32\drivers\ZJJFORNT1Device.sys",
       GENERIC_READ | GENERIC_WRITE,
       FILE_SHARE_READ,
       NULL,
       OPEN_EXISTING,
       0,
       NULL);
就可以得到句柄,但是当我用这么得到的句柄调用DeviceIoControl时,又返回“参数错误”的错误。
    我也不知是怎么回事,请大家帮帮我。
           谢谢!
                                                                                                                   zjj
make
leerom
驱动小牛
驱动小牛
  • 注册日期2001-06-08
  • 最后登录2010-08-31
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-07-04 17:52
虽然nt的设备名是从0开始的,但是在win32下的设备名是“1”开始的。
你可能要用“\\\\.\\ZJJFORNT1Device1”来打开设备。你的第二个调用只是打开了d:\winnt\system32\drivers\ZJJFORNT1Device.sys文件,而不是ZJJFORNT1Device设备。所以打开是成功的,但DeviceIoControl出错。
leerom
make
驱动牛犊
驱动牛犊
  • 注册日期2001-06-13
  • 最后登录2004-02-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-07-05 08:43
我按您所说的做了,可还是不行。请再您多多指教!谢谢!!
make
petz
禁止发言
禁止发言
  • 注册日期2001-03-23
  • 最后登录2015-12-19
  • 粉丝0
  • 关注0
  • 积分-22276分
  • 威望15点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-07-05 09:06
用户被禁言,该主题自动屏蔽!
leerom
驱动小牛
驱动小牛
  • 注册日期2001-06-08
  • 最后登录2010-08-31
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-07-05 09:10
我想你现在应该检查你的驱动程序了。如果你装了sdk里面有个工具winobj.exe可以用来查看你机器中的对象,如果你的驱动正确的启动,你应该在“??”文件夹中看到win32设备名“ZJJFORNT1Device1”,在“device”文件夹中看到看到NT设备名“ZJJFORNT1Device0”。如果你创建了正确的设备名,那主要就是驱动程序的打开设备的调用返回了错误信息,你应该用调试工具跟踪调试驱动程序来解决错误。
leerom
make
驱动牛犊
驱动牛犊
  • 注册日期2001-06-13
  • 最后登录2004-02-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-07-05 17:32
再次谢谢您的关心与帮助!
我的CreateFile()问题是这样解决的,将 “ZJJFORNT1Device0”变成“ZJJFORNT1Device”,并在控制面板中设备对话框中将设备开始然后就可以了。我这样做对吧?
我现在并没有真正的设备,当我试另一个程序时一从控制面板中设备对话框中将设备开始,机器就崩溃。不知应该怎么调试?

当然,也请大家帮忙。谢谢!
                    
[make 编辑于 2001-07-06 08:42]
make
sttypxx
驱动牛犊
驱动牛犊
  • 注册日期2001-05-17
  • 最后登录2011-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-07-06 09:47
CreateFile打开的应该是对WIN32 可见的设备名,一般是由驱动程序建立的一个符号连接。你应该在启动驱动程序后检查它是否建立一个符号连接。使用这个符号连接来打开设备。CreateFile也可以打开文件。因为现在是将设备也看作一种文件。我们需要这样理解。
游客

返回顶部