关于U盘,控制代码IOCTL_GET_USB_DESCRIPTOR有关问题,顶者有分
关于U盘,控制代码IOCTL_GET_USB_DESCRIPTOR问题,顶者有分!
已安装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分。
------解决方案--------------------
The USB device path may should looks like as below, you can find it from registry
\\?\USB#Vid_413c&Pid_4011#0e01312e-0507-1116-2800-0050bfe45ce5#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
------解决方案--------------------
H: 和 \\?\ 打开差不多,不知道是不是 administrator 权限。
------解决方案--------------------
顶! 严重关注ing
------解决方案--------------------
up
------解决方案--------------------
up
已安装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分。
------解决方案--------------------
The USB device path may should looks like as below, you can find it from registry
\\?\USB#Vid_413c&Pid_4011#0e01312e-0507-1116-2800-0050bfe45ce5#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
------解决方案--------------------
H: 和 \\?\ 打开差不多,不知道是不是 administrator 权限。
------解决方案--------------------
顶! 严重关注ing
------解决方案--------------------
up
------解决方案--------------------
up