关于访问usb设备问题mass storage方式

aaazxd 2009-05-15 09:46:49
以下代码在windows xp 管理员下可以正常使用,但到非管理员下或者vista系统下,运行到hDevUSB = CreateFile(
devInterfaceDetailData->DevicePath,//
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,//FILE_ATTRIBUTE_NORMAL
NULL);
时总是返回错误码5,hDevUSB创建失败,好象是因为非管理员对usb的操作权限不够,请问这个问题怎么解决,是有其他方法提升权限还是用其他方法访问呢?排除HID方式,因为传输量太小。谢谢!


const GUID DiskClassGuid = {0x53f56307L, 0xb6bf, 0x11d0, {0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}};

int GetDevicePath(LPGUID Guid, LPTSTR *pszDevicePath)
{
HDEVINFO hIntDevInfo;
SP_DEVICE_INTERFACE_DETAIL_DATA* devInterfaceDetailData = NULL;

hIntDevInfo = SetupDiGetClassDevs(
Guid,
NULL,
NULL,
(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)
);

if(hIntDevInfo == INVALID_HANDLE_VALUE)
{
// MessageBox("打开磁盘驱动器句柄失败!");
return 0;
}

BOOL bSuccess;
DWORD index = 0;

SP_DEVICE_INTERFACE_DATA devInterfaceData;//存储设备接口信息
memset( &devInterfaceData, 0, sizeof(SP_DEVICE_INTERFACE_DATA) );
devInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);


DWORD *pdwTokenCnt = 0;

while(TRUE)
{
bSuccess = SetupDiEnumDeviceInterfaces(
hIntDevInfo,
NULL,
Guid,
index,
&devInterfaceData);
if(!bSuccess)
{
break;
}
else
{

ULONG requiredLength = 0;
ULONG predictedLength = 0;

//获取输出缓冲区大小
bSuccess = SetupDiGetInterfaceDeviceDetail(
hIntDevInfo, // 设备信息集句柄
&devInterfaceData, // 设备接口信息
NULL, // 设备接口细节(设备路径)
0, // 输出缓冲区大小
&requiredLength, // 计算输出缓冲区大小
NULL); // 不需额外的设备描述

predictedLength = requiredLength;

devInterfaceDetailData = (PSP_INTERFACE_DEVICE_DETAIL_DATA)::GlobalAlloc(LMEM_ZEROINIT, predictedLength);
devInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);

// 取得该设备接口的细节(设备路径)
bSuccess = SetupDiGetInterfaceDeviceDetail(
hIntDevInfo,
&devInterfaceData,
devInterfaceDetailData,
predictedLength,
&requiredLength,
NULL);

if ( bSuccess == FALSE && GetLastError()!=ERROR_INSUFFICIENT_BUFFER)
{
return 0;
}
else
{
// 复制设备路径到输出缓冲区
::strcpy(pszDevicePath[index], devInterfaceDetailData->DevicePath);

HANDLE hDevUSB;
hDevUSB = CreateFile(
devInterfaceDetailData->DevicePath,//&guidHID_1,//
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,//FILE_ATTRIBUTE_NORMAL
NULL);
if ((NULL != hDevUSB) && (INVALID_HANDLE_VALUE != hDevUSB))
{

}
else
{
MessageBox(NULL,"打开文件失败!","提示", NULL);
}
// 调整计数值
index++;
}
}
}
GlobalFree(devInterfaceDetailData);

SetupDiDestroyDeviceInfoList(hIntDevInfo);
return index;
}
...全文
447 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2009-05-19
  • 打赏
  • 举报
回复
第一是我也不知道是否真的能行,我对那基本上不懂,第二这是我同事的专利,据他说可以。反正windows能够访问mass storage,你就可以编一个指令和windows发的一样,然后呢,让设备去区分是windows发的还是你发的。

aaazxd 2009-05-19
  • 打赏
  • 举报
回复
或者有什么相关资料看看吗?摆脱了
aaazxd 2009-05-19
  • 打赏
  • 举报
回复
jennyvenus,能说具体点么?多给点思路也行啊,谢谢了啊!
aaazxd 2009-05-19
  • 打赏
  • 举报
回复
谢谢,我去试试先
aaazxd 2009-05-18
  • 打赏
  • 举报
回复
没人能解答吗?
用户 昵称 2009-05-18
  • 打赏
  • 举报
回复
非管理员访问scsi,变通一下windows的执行,涉及好多事情,不能多说。
aaazxd 2009-05-18
  • 打赏
  • 举报
回复
可以给你demo啊,怎么给你?
谁能帮我解决我的问题........
lili830209 2009-05-18
  • 打赏
  • 举报
回复
LZ可以把你的USB的通讯的代码给我一个DEMO么?

我理解不了USB设备与主控设备的握手。。。
fleiou2008 2009-05-15
  • 打赏
  • 举报
回复
sf
在xp中直接访问多分区U盘的简单方法. This process will essentially make Windows detect your USB Stick as USB hard drive which can then be partitioned within Windows. Prerequisites: •USB_LocalDisk.zip •Windows XP PC •USB Flash drive •Notepad ++ (or a text editor with line numbers) How to make Windows detect a flash drive as a local disk: 1.From a running Windows XP system, Insert your USB flash drive 2.Download and install Notepad ++ on your PC 3.Download USB_LocalDisk.zip and extract. A USB_localDisk folder is created 4.From the USB_LocalDisk folder, right click cfadisk.inf and open the file with notepad ++ 5.Navigate to line 26 of the cfadisk.inf file. We are going to be editing the section labeled device_instance_id_goes_here. So leave this file open! 6.From your Windows Desktop, click Start-> Run and type devmgmt.msc and click Ok 7.Under Disk drives, locate and double click your "USB Flash Device": 8.From the USB Device Properties window that opens, click the Details tab. Select the entry listed under the Device Instance ID Window and then press ctrl+c to copy the text: 9.Now, on line 26 of the cfadisk.inf file, after the comma, delete the text: device_instance_id_goes_here and then press ctrl+v to paste the text from step 8 into the section. For example, my line 26 reads as follows: Once finished save the changes! 10.Now from the Windows Desktop, click Start-> Run and type devmgmt.msc and click Ok to get to the Device Manager again. 11.Under Disk drives, locate and right click your "USB Flash Device" and select the option to Update Driver: 12.Select No, not at this time when prompted to Connect to Windows Update to search for software 13.Next, select the option to Install from a list or specified location (Advanced) 14.Next, select Don't search. I will choose the driver to install 15.Next choose Have Disk and then browse to your USB_LocalDisk folder. Select cfadisk.inf and click Open. Then click Ok. 16.Next, you will get a warning that the driver is not digitally s
第一章 USB概述及协议基础 1 1.1 USB是什么 1 1.2 USB的特点 1 1.3 USB的拓扑结构 2 1.4 USB的电气特性 5 1.5 USB的线缆以及插头、插座 5 1.6 USB的插入检测机制 7 1.7 USB的描述符及其之间的关系 9 1.8 USB设备的枚举过程 10 1.9 USB的包结构及传输过程 11 1.9.1 USB包的结构及包的分类 11 1.9.2 令牌包 13 1.9.3 数据包 14 1.9.4 握手包 14 1.9.5 特殊包 15 1.9.6 如何处理数据包 15 1.10 USB的四种传输类型 16 1.10.1 USB事务 16 1.10.2 批量传输 16 1.10.3 中断传输 18 1.10.4 等时传输(同步传输) 19 1.10.5 控制传输 20 1.10.6 端点类型与传输类型的关系 21 1.10.7 传输类型与端点支持的最大包长 21 1.11 本章小结 21 第二章 硬件系统设计 1 2.1 方案以及芯片的选定 1 2.2 D12引脚功能说明 2 2.3 D12与89S52的连接 4 2.4 串口部分电路 6 2.5 按键部分 7 2.6 指示灯部分 7 2.7 IDE接口部分 8 2.8 单片机部分 8 2.9 元件安装 8 2.10 电路调试 11 2.11 测试程序的编写和调试 12 2.11.1 建立一个工程 12 2.11.2 为工程添加源文件 14 2.11.3 KEIL工具栏及仿真介绍 15 2.11.4 按键驱动的编写 18 2.11.5 串口驱动的编写 24 2.11.6 PDIUSBD12读写函数及读ID的实现 28 2.12 本章小结 33 第三章 USB鼠标的实现 1 3.1 USB鼠标工程的建立 1 3.2 USB的断开与连接 1 3.3 USB中断的处理 4 3.4 读取从主机发送到端点0的数据 6 3.5 USB标准请求 12 3.5.1 USB标准设备请求的结构 13 3.5.2 GET_DESCRIPTOR请求 15 3.5.3 SET_ADDRESS请求 16 3.5.6 SET_CONFIGURATION请求 16 3.6 设备描述符的实现 17 3.7 设备描述符的返回 20 3.8 设置地址请求的处理 30 3.9 配置描述符集合的结构 32 3.9.1 配置描述符的结构 32 3.9.2 接口描述符的结构 33 3.9.3 端点描述符的结构 33 3.9.4 HID描述符的结构 34 3.10 配置描述符集合的实现以及返回 35 3.11 字符串及语言ID请求的实现 39 3.12 设置配置请求的实现 45 3.13 报告描述符的结构及实现 48 3.14 报告的返回 54 3.15 Bus Hound工具的简介 57 3.16 本章小结 59 第四章 USB键盘的实现 1 4.1 USB键盘工程的建立 1 4.2 设备描述符的实现 1 4.4 配置描述符集合的实现 2 4.4.1 配置描述符 3 4.4.2 接口描述符 3 4.4.3 HID描述符 3 4.4.4 端点描述 3 4.5 字符串描述符 6 4.6 报告描述符 6 4.7 输入和输出报告的实现 10 4.8 USB键盘实例的测试 13 4.9 再谈USB HID的报告描述符 14 4.10 带鼠标功能的USB键盘(方法一) 16 4.11 带鼠标功能的键盘(方法二) 22 4.12 多媒体USB键盘 29 4.13 本章小结 34 第五章 用户自定义的USB HID设备 1 5.1 MyUsbHid工程的建立 1 5.2 描述符的修改 1 5.3 报告的实现 3 5.4 对用户自定义的USB HID设备访问 5 5.5 访问HID设备时所用到的相关函数 5 5.5.1 获取HID设备的接口类GUID的函数 5 5.5.2 获取指定类的所有设备信息集合的函数 6 5.5.3 从设备信息集合中获取一个设备接口信息的函数 6 5.5.4 获取指定设备接口详细信息的函数 7 5.5.5 打开设备的函数 8 5.5.6 获取HID设备属性的函数 8 5.5.7 从设备读取数据的函数 9 5.5.8 往设备写数据的函数 9 5.5.9 通过控制端点0读取报告的函数 10 5.5.10 通过控制端点0发送报告的函数 10 5.5.11 关闭设备的函数 10 5.5.12 需要包含的库文件 11 5.6 访问USB HID设备的上位机软件的实现 11 5
第一篇Android的前世今生——Android概述篇 第1章Android的前世今生 1.1 Android的起源 1.2开放手机联盟 1.3开源与相关协议 1.4系统的升级与发展 第2章Android体系结构 2.1四层空间基本结构 2.1.1 Android系统底层开发 2.1.2应用程序开发 2.2 Android代码目录结构 2.3 Android开发环境搭建 第二篇 勿于浮砂筑高台——Linux驱动基础篇 第3章Linux内核综述 3.1 OS基本概念 3.1.1多用户系统 3.1.2用户和组 3.1.3进程 3.1.4 Linux单核架构 3.2 Linux内核综述 3.2.1进程/内核模型综述 3.2.2内存管理综述 3.2.3文件系统综述 3.2.4设备驱动简述 第4章Linux内核编程与内核模块 4.1 Linux内核源代码目录结构 4.2 Linux内核的编译与启动 4.3 Linux内核的C编程 4.4 Linux内核模块基础与骨架 4.5 Linux模块的加载与卸载 4.6 Linux模块的参数与导出符号 4.7 Linux模块的使用计数 第5章Linux文件系统 5.1 Linux文件系统概述 5.1.1 Linux文件系统的目录结构 5.1.2设备驱动与Linux文件系统的关联 5.2 Linux设备文件系统 5.2.1 devfs设备文件系统 5.2.2 udev设备文件系统 5.2.3 sysfs文件系统与Linux设备 5.2.4 udev的组成 5.2.5 udev规则文件 第6章Linux字符设备驱动 6.1 Linux字符设备驱动结构 6.1.1 cdev结构体 6.1.2分配和释放设备号 6.1.3 file_operations结构体 6.1.4 Linux字符设备驱动的组成 6.2一个字符设备驱动例子——virtualchar 6.2.1头文件、宏及设备结构体 6.2.2加载与卸载设备驱动 6.2.3驱动函数实现 6.2.4驱动设备私有数据 6.3对virtualchar设备访问 第7章Linux设备驱动中的内存与I/O访问 7.1 CPU与内存和I/O之间的故事 7.1.1内存空间与I/O空间 7.1.2内存管理单元MMU 7.2 Linux内存管理 7.3 Linux内存访问 7.4 LinuxI/O访问 7.4.1访问I/O 7.4.2申请与释放I/O资源 7.4.3 I/O访问流程 7.4.4设备地址与用户空间的映射 7.5 DMA 7.5.1 DMA与Cache的一致性 7.5.2 Linux下的DMA编程 第8章Linux设备驱动中的中断 8.1 Linux中断及中断处理架构 8.2 Linux中断编程 8.2.1申请和释放中断 8.2.2使能与屏蔽中断 8.2.3底半部机制 8.2.4中断共享 8.3 Linux定时器 8.4 Linux延时处理 8.4.1短延时 8.4.2长延时 8.4.3睡眠延时 第9章Linux设备驱动中的并发 9.1 Linux中的并发与竞争 9.2 Linux中常用的同步访问技术 9.2.1中断屏蔽 9.2.2原子操作 9.2.3自旋锁 9.2.4信号量 9.2.5互斥灯 9.3增加并发控制的virtualchar驱动 第10章Linux设备的阻塞式与非阻塞式访问 10.1阻塞式与非阻塞式访问 10.1.1等待队列 10.1.2支持阻塞操作的virtualfifo设备驱动 10.2 Linux的轮询访问 10.2.1应用程序中的轮询编程 10.2.2设备驱动中的轮询编程 10.2.3支持轮询操作的virtualfifo驱动 第11章Linux设备驱动中的异步访问 11.1 Linux 2.6中的异步访问 11.1.1异步访问概念与GNU C库函数 11.1.2使用信号作为异步访问的通知 11.1.3使用回调函数作为异步访问的通知 11.1.4异步访问设备驱动 11.2异步Fifo驱动例子 11.2.1在virtualfifo驱动中增加异步通知 11.2.2在用户空间验证virtualfifo的异步通知 第12章Linux块设备驱动 12.1块设备的I/O操作特点 12.2 Linux块设备驱动结构 12.2.1 block_device_operations结构体 12.2.2 gendisk结构体 12.2.3 request与bio结构体 12.2.4块设备驱动注册与注销 12.3 Linux块设备驱动的模块加载与卸载 12.4块设备的打开/释放IOCTL 第13章Linux网络设备驱动 13.1 Linux网络设备驱动体系结构 13.2 Linux网络设备驱动结构 13.3 Linux网络设备驱动I/O实现 13.3.1网络设备初始化 13.3.2网络数据包的收发 第三篇 实践出真知——Android驱动实践篇 第14章Android HAL层的设计 14.1 Android HAL概述 14.2为Android开发虚拟驱动virtualio 14.3 Android集成C程序访问virtualio 14.4 Android通过HAL访问virtualio 14.4.1 virtualio HAL模块实现 14.4.2实现访问virtualio HAL模块JN 14.4.3在Framework层增加virtualio服务 第15章Framebuffer子系统 15.1 Linux Framebuffer一般子系统 15.1.1 Framebuffer数据结构 15.1.2 Framebuffer驱动 15.2 Android Framebuffer子系统实践 15.2.1硬件基础 15.2.2 CPU侧显示驱动模块 15.2.3 LCM驱动模块 15.3 Android系统对Framebuffer的使用 第16章Input子系统 16.1 Linux Input一般子系统 16.1.1 Input数据结构 16.1.2 Input内核模块 16.2 Android Input子系统实践 16.2.1硬件基础 16.2.2 Input驱动模块 16.3 Android系统对Input的使用 第17章V4L2子系统 17.1 Linux V4L2一般子系统 17.1.1 V4L2数据结构 17.1.2 V4L2接口 17.1.3 V4L2虚拟驱动vivi 17.2 Android V4L2实践 17.2.1硬件基础 17.2.2 CPU侧CCIC驱动模块 17.2.3 OV5642模组驱动模块 17.3 Android系统对V4L2的使用 第18章Binder IPC通信子系统 18.1 Binder驱动概述 18.2 Binder通信模型 18.3 Binder驱动 18.3.1 Binder相关的结构体 18.3.2 Android Binder子系统的架构设计 18.4 Binder的工作流程 第19章USB子系统 19.1 USB协议基础知识 19.1.1 USB物理连接 19.1.2 USB通信协议 19.2 USB子系统底层 19.2.1 USB Core 19.2.2 Linux USB gadget三层架构 19.3 Android USB子系统实践 19.3.1 Android IPC通信补充 19.3.2 Android USB Mass Storage流程分析 第20章Bootloader引导子系统 20.1 Bootloader流程分析 20.1.1 Bootloader概述 20.1.2 U-Boot启动流程分析 20.2 Bootloader修改指南 20.2.1开机第一帧图的修改 20.2.2开机模式的定制 参考文献

2,640

社区成员

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

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