阅读:1138回复:8
问个CreateFile的问题
我调试了win2k ddk下的serial驱动程序,得到symboliclinkname=\"\\DosDevices\\COM1\",DeviceName=\"\\Device\\Serial0\",用createfile(“\\\\\\\\.\\\\DosDevices\\\\COM1”,xxxx)函数为什么打不开,然后我又将第一个参数改成DeviceName对应的字符,但也打不开,请问为什么
|
|
沙发#
发布于:2005-04-06 19:28
symboliclinkname=\"\\\\??\\\\COM1\"
|
|
板凳#
发布于:2005-04-07 09:21
应用层只能访问??里的名称。
|
|
|
地板#
发布于:2005-04-07 09:31
看我的垃圾帖
http://www.driverdevelop.com/forum/html_89958.html?1112837434 |
|
|
地下室#
发布于:2005-04-07 10:02
我按你们说的写了,是这样的CreateFile(\"\\\\??\\\\COM1\",XXXXXX);提示说找不到指定的路径,请问为什么,第一个参数有错吗
|
|
5楼#
发布于:2005-04-07 10:13
我又查了一些资料,\\\\.\\就代表\\\\??了,所以我写成了CreateFile(\"\\\\\\\\.\\\\COM1\",XXX),是可以打开了,但用DeviceIoControl()与驱动通信时会出现违法访问的错误呢,
|
|
6楼#
发布于:2005-04-07 12:22
现在我写了一个与serial驱动通信的应用程序,代码如下
#define SERIAL_ForbidCOMM (ULONG) CTL_CODE( FILE_DEVICE_SERIAL_PORT, 0x900, METHOD_BUFFERED, FILE_ANY_ACCESS ) HANDLE hSysfile =NULL; char path[] =\"\\\\\\\\.\\\\COM1\"; hSysfile =CreateFile(path, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (hSysfile == INVALID_HANDLE_VALUE) { CString s; s.Format(\"%d\",GetLastError()); MessageBox(s); //return ; } DWORD version,junk; BOOL bStatus =DeviceIoControl(hSysfile, SERIAL_ForbidCOMM, NULL, 0, &version, sizeof(version), &junk, NULL); if(!bStatus) { CString s; s.Format(\"%d\",GetLastError()); MessageBox(s); } CloseHandle(hSysfile); DeviceIoControl总是提示参数错误,CreateFile打开是成功的,请大家帮帮忙, |
|
7楼#
发布于:2005-04-07 15:03
这么说是运行错误,看看你的SERIAL_ForbidCOMM在驱动中是不是有效
|
|
|
8楼#
发布于:2005-04-07 15:33
问题解决了,原来我的驱动根本没有安装,给分,但还想问一下我在应用程序中用DeviceIoControl()函数与另一个驱动程序通讯时出现功能错误,请问这又该如何解决
|
|