阅读:6135回复:7
同样WriteFIle错误,返回错误代码6
WriteFIle错误,返回错误代码6
最近写了一个USB读写的应用程序,主要是用CreateFile,WriteFile和ReadFile,在CreateFile成功后,返回设备句柄hDevice hDevice = CreateFile(DevicePath, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); 但在使用WriteFile时总是返回错误代码6,句柄无效! 此时查看句柄和创建文件时的句柄一致. 各位大大,帮忙看看是什么问题 |
|
沙发#
发布于:2009-07-08 16:47
什么意思?句柄为空?
|
|
板凳#
发布于:2009-07-08 16:52
句柄不为空,我获得句柄:
我的handle是这样得到的: DevHandle = CreateFile(devDetail->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); devDetail->DevicePath : "\\?\usb#vid_0451&pid_bbbb#5&46718c6&07#{a5dcbf10-6530-11d2-901f-00c04fb951ed}" |
|
地板#
发布于:2009-07-08 16:53
是这样的
DevHandle = CreateFile(devDetail->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); devDetail->DevicePath : "\\?\usb#vid_0451&pid_bbbb#5&46718c6&07#{a5dcbf10-6530-11d2-901f-00c04fb951ed}" 获得的句柄不为空 |
|
地下室#
发布于:2009-07-08 16:54
但在writefile是说这个句柄是无效句柄。
|
|
5楼#
发布于:2009-07-08 17:00
这是我获得handle的整个代码,帮忙看看有没有问题:
deviceInfo = SetupDiGetClassDevs((LPGUID)&GUID_DEVINTERFACE_OMAP_DEVICE, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); if(deviceInfo == INVALID_HANDLE_VALUE) { return INVALID_HANDLE_VALUE; } deviceInfoData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); for(index = 0; SetupDiEnumDeviceInterfaces(deviceInfo, 0, (LPGUID)&GUID_DEVINTERFACE_OMAP_DEVICE, index, &deviceInfoData); index++) { SetupDiGetDeviceInterfaceDetail(deviceInfo, &deviceInfoData, NULL, 0, &requiredLength, NULL); deviceDetailData = (SP_DEVICE_INTERFACE_DETAIL_DATA*)GlobalAlloc(GPTR, requiredLength); deviceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); SetupDiGetDeviceInterfaceDetail(deviceInfo, &deviceInfoData, deviceDetailData, requiredLength, &requiredLength, NULL); if(strstr( deviceDetailData->DevicePath, "bbbb") //PID && strstr( deviceDetailData->DevicePath, "0451")) //VID { strcat( Pipe1DevicePath, deviceDetailData->DevicePath); hUSBDev = CreateFile( deviceDetailData->DevicePath, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(hUSBDev != INVALID_HANDLE_VALUE) { SetupDiDestroyDeviceInfoList(deviceInfo); GlobalFree(deviceDetailData); return hUSBDev; //从这里返回不为0 handle, 但在writefile时却说这个handle是无用handle,错误类型 6 } } GlobalFree(deviceDetailData); } DWORD dError = GetLastError(); SetupDiDestroyDeviceInfoList(deviceInfo); return INVALID_HANDLE_VALUE; |
|
6楼#
发布于:2009-07-08 17:02
那就是devDetail->DevicePath 不对
|
|
7楼#
发布于:2009-07-09 09:27
sanone28 说的很对!!
问题解决。 还是CreateFile的问题,deviceDetailData->DevicePath只是一个通用路径,那针对不同的收发口,在deviceDetailData->DevicePath后面还要加上driver中定义PIPE的名称,例如如果driver中定义PIPE0作为收,那么在createfile收的handle的时候,就需要在deviceDetailData->DevicePath加上"//PIPE0",假如driver中没有特别说明,那么deviceDetailData->DevicePath也就是默认handle路径了。 |
|