关于U盘,控制代码IOCTL_GET_USB_DESCRIPTOR问题,顶者有分!

xiangrujian 2007-01-23 10:26:31
已安装DDK,并包含相关路径,调用DeviceIoControl函数,控制代码为IOCTL_GET_USB_DESCRIPTOR,已包含相关头文件。以下为我的代码:

DWORD dwError,dwSize,dwInDataSize;
CString strInfo;
USBSCAN_GET_DESCRIPTOR UsbscanGetDescriptor = { 0 };
USB_CONFIGURATION_DESCRIPTOR UsbDeviceDescriptor = { 0 };

HANDLE hUsbDevice = CreateFile ( "\\\\.\\H:",//H盘为U盘盘符
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL );

if ( INVALID_HANDLE_VALUE == hUsbDevice )
{
dwError = GetLastError ();
strInfo.Format("CreateFile(%d)",dwError);
MessageBox(strInfo);
return ;
}


dwSize = sizeof ( UsbDeviceDescriptor );
UsbscanGetDescriptor.DescriptorType = USB_DEVICE_DESCRIPTOR_TYPE;
UsbscanGetDescriptor.Index = 1;
UsbscanGetDescriptor.LanguageId = 0;

dwError = ( DWORD ) DeviceIoControl ( hUsbDevice, IOCTL_GET_USB_DESCRIPTOR, &UsbscanGetDescriptor,
sizeof(UsbscanGetDescriptor),
&UsbDeviceDescriptor,
dwSize, &dwInDataSize,
NULL );
if ( 0 == dwError )
{
dwError = GetLastError ( );
strInfo.Format("DeviceIoControl(%d)",dwError);
MessageBox(strInfo);
}
程序运行没问题,但DeviceIoControl函数返回值为0,用GetLastError获得错误代码为50,不明白到底什么地方出了问题,希望能给点提示或者提供点相关的资料,顶者有分,如果问题解决将另开帖送200分。
...全文
1306 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
crystal_heart 2007-02-08
  • 打赏
  • 举报
回复
up
东文-桑晨 2007-01-31
  • 打赏
  • 举报
回复
up
小水 2007-01-30
  • 打赏
  • 举报
回复
顶! 严重关注ing
碧螺春的马甲 2007-01-24
  • 打赏
  • 举报
回复
read only 是控制芯片的 Firmware 决定的。

AP层可以透过 SCSI Cmd 和 FW 通讯,控制 FW 行为。比如改变 read only。

这个通讯是一定要知道 FW 的 Vendor Cmd长什么样子。所以必须和芯片厂商沟通。

除非这个动作成为一种windows的标准。
xiangrujian 2007-01-24
  • 打赏
  • 举报
回复
那我想问下,用这个控制代码还有其他什么方法没有,或者是有什么方法在U盘已经设置为只读状态下如何把文件写到U盘里去,我原来的想法是先取消只读属性,然后写文件进去,最后再设置回只读状态
碧螺春的马甲 2007-01-24
  • 打赏
  • 举报
回复
就是 Driver 并没有支持这个 IOCTL,必须自己写 U盘的驱动。

其实这个方法也不能解决你要的 设置和取消唯读 功能,一定要知道 Vendor Cmd。

我猜应该是 SCSI 的 Vendor Command。
xiangrujian 2007-01-24
  • 打赏
  • 举报
回复
Driver 支持了?
不是很明白
碧螺春的马甲 2007-01-24
  • 打赏
  • 举报
回复
Debug 了一下,error info :不支持请求!

这就需要 Driver 支持了。
xiangrujian 2007-01-24
  • 打赏
  • 举报
回复
问题是现在这个控制代码实现起来都有问题,而且序列号也可从这个结构上获得
碧螺春的马甲 2007-01-24
  • 打赏
  • 举报
回复
这个需要 FW 配合。如果你不知道 控制芯片的 Vendor Cmd,应该是做不出来的。
xiangrujian 2007-01-24
  • 打赏
  • 举报
回复
U盘有读写开关,现在想通过代码实现这个功能
碧螺春的马甲 2007-01-24
  • 打赏
  • 举报
回复
设置和取消唯读?不懂,再解释一下。
xiangrujian 2007-01-24
  • 打赏
  • 举报
回复
设置和取消唯读,我也是听别人说的,能不能实现还不知道
xiangrujian 2007-01-24
  • 打赏
  • 举报
回复
改了,也对bLength进行了初始化,但还是返回错误代码50
碧螺春的马甲 2007-01-24
  • 打赏
  • 举报
回复
还有想问问 代码是做什么用的?

顺便帮我看看 http://community.csdn.net/Expert/topic/5315/5315025.xml?temp=.2522852
碧螺春的马甲 2007-01-24
  • 打赏
  • 举报
回复
没有仔细debug你的代码,感觉是

USB_CONFIGURATION_DESCRIPTOR UsbDeviceDescriptor 这个

改为 USB_DEVICE_DESCRIPTOR,而且里面的bLength应该初始化。
xiangrujian 2007-01-24
  • 打赏
  • 举报
回复
但是我用\\\\.\\H: 试另外的控制代码却没问题
碧螺春的马甲 2007-01-24
  • 打赏
  • 举报
回复
H: 和 \\?\ 打开差不多,不知道是不是 administrator 权限。
xiangrujian 2007-01-24
  • 打赏
  • 举报
回复
熟悉的人指点下
xiangrujian 2007-01-24
  • 打赏
  • 举报
回复
不好意思,下午有点事,不知道还有其他方法没有,只要能成功用这个控制代码就可以
加载更多回复(3)

2,641

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧