阅读:2261回复:6
大家救我,关于NT驱动
我在测试应用程序中,用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 |
|
|
沙发#
发布于:2001-07-04 17:52
虽然nt的设备名是从0开始的,但是在win32下的设备名是“1”开始的。
你可能要用“\\\\.\\ZJJFORNT1Device1”来打开设备。你的第二个调用只是打开了d:\winnt\system32\drivers\ZJJFORNT1Device.sys文件,而不是ZJJFORNT1Device设备。所以打开是成功的,但DeviceIoControl出错。 |
|
|
板凳#
发布于:2001-07-05 08:43
我按您所说的做了,可还是不行。请再您多多指教!谢谢!!
|
|
|
地板#
发布于:2001-07-05 09:06
用户被禁言,该主题自动屏蔽! |
|
地下室#
发布于:2001-07-05 09:10
我想你现在应该检查你的驱动程序了。如果你装了sdk里面有个工具winobj.exe可以用来查看你机器中的对象,如果你的驱动正确的启动,你应该在“??”文件夹中看到win32设备名“ZJJFORNT1Device1”,在“device”文件夹中看到看到NT设备名“ZJJFORNT1Device0”。如果你创建了正确的设备名,那主要就是驱动程序的打开设备的调用返回了错误信息,你应该用调试工具跟踪调试驱动程序来解决错误。
|
|
|
5楼#
发布于:2001-07-05 17:32
再次谢谢您的关心与帮助!
我的CreateFile()问题是这样解决的,将 “ZJJFORNT1Device0”变成“ZJJFORNT1Device”,并在控制面板中设备对话框中将设备开始然后就可以了。我这样做对吧? 我现在并没有真正的设备,当我试另一个程序时一从控制面板中设备对话框中将设备开始,机器就崩溃。不知应该怎么调试? 当然,也请大家帮忙。谢谢! [make 编辑于 2001-07-06 08:42] |
|
|
6楼#
发布于:2001-07-06 09:47
CreateFile打开的应该是对WIN32 可见的设备名,一般是由驱动程序建立的一个符号连接。你应该在启动驱动程序后检查它是否建立一个符号连接。使用这个符号连接来打开设备。CreateFile也可以打开文件。因为现在是将设备也看作一种文件。我们需要这样理解。
|
|