① 如何构造一个简单的USB过滤驱动程序
本文分三部分来介绍如何构造一个简单的USB过滤驱动程序,包括“基本原理”、“程序的实现”、“使用INF安装”。此文的目的在于希望读者了解基本原理后,可以使用除DDK以外最流行也最方便的驱动开发工具DriverStudio来实现一个自己的过滤驱动,并正确地安装。
一、基本原理
我们知道,WDM(和KDM)是分层的,在构造设备栈时,IO管理器可以使一个设备对象附加到另外一个初始驱动程序创建的设备对象上。与初始设备对象相关的驱动程序决定的IRP,也将被发送到附加的设备对象相关的驱动程序上。这个被附加的驱动程序便是过滤驱动程序。如右图,过滤驱动可以在设备栈的任何层次中插入。IO管理器发出的IRP将会沿着右图的顺序从上往下传递并返回。因此,我们可以使用过滤驱动程序来检查、修改、完成它接收到的IRP,或者构造自己的IRP。
上面这种文字是很枯燥的,好在“前人”已经写过一些范例以供我们更好地理解这些概念。读过Waltz Oney的《Programming Windows Driver Mode》一书的读者大概都知道Waltz Oney提供的范例中有一个关于USB过滤器(第九章)的例子,而在此基础上,《USB Design By Example》(http://www.usb-by-example.com)的作者John Hyde实现了一个USB键盘过滤驱动程序,即给此程序增加了一个“拦截(Intercept)”功能来处理USB键盘的Report以实现特定的功能:当驱动程序在IRP_MJ_INTERNAL_DEVICE_CONTROL设置的完成例程从USB设备拦截到一个Get_Report_Descriptor时,拦截程序将此Descriptor中的USAGE值从“Keyboard”改为“UserDefined”,再返回给系统。
我们可以从这个例子中获得一些灵感,比如,在Win2k下,键盘是由OS独占访问的,我们可以通过这种方式使之可以让用户自由访问;我们也可以拦截其他Report_Descriptor,将部分键重新定义,以满足特殊的要求;如果你愿意再做一个用户态的程序,你还可以将你拦截到的键值传递给你的用户态程序,以实现象联想、实达等国内电脑大厂出品的那些键盘上的各种实用的功能。
二、程序的实现
Waltz Oney和John Hyde的例子已经写得很详细了,读者可以不用修改一个字节便顺利地编译生成一个过滤驱动程序。本文的目的在于使用DriverStudio组件Driverworks来实现同样的功能。
相信读者读到这篇文章时,已经对DriverStudio有了很多的了解。DriverStudio作为一个以C++为基础的“快速”驱动开发工具,它封装了基本上所有的DDK的函数,其集成在VC++中的DriverWizard,可以很方便地引导你完成设备驱动程序开发的全过程,能根据你的硬件种类自动生成设备驱动程序源代码,并提供了很多范例程序。当然,这些例子中便包含一个USB Filter驱动程序的框架。在不侵犯版权的前提下,充分利用现有共享的、免费的、授权的代码是我们的一贯作法。我们下面便以此范例为基础来作修改。
我们的目的是做一个HID小驱动程序hisb.sys的Lower Filter,它附加在“人机接口设备” ,通过拦截USB的Get_Report_Descriptor来修改其返回值,当它发现该Descriptor的Usage 为“Keyboard”时,将其改为“UserDefined”,如此我们便可以完全控制这只键盘。具体做法是,拦截IRP_MJ_INTERNAL_DEVICE_CONTROL,并检查其IOCTL代码及URB,如果满足IOCTRL功能代码为IOCTL_INTERNAL_USB_SUBMIT_URB以及URB功能代码为URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE的条件,即上层驱动发来Get_Report_Descriptor请求时,设置一个完成例程,在这个完成例程中,我们将判断Usage的值,将Usage由“6(Keyboard)”时,将其改为“0(UserDefined)”。
打开C:\Program Files\NuMega\DriverStudio\DriverWorks\Examples\wdm\usbfilt目录(具体目录依你的DriverStudio所安装的目录不同而不同) ,再打开工程文件usbfilt.dsw,我们先看一下代码。
程序由两个类组成,一个是Driver类,一个是Device类。Driver类包括:
入口函数DriverEntry:
DECLARE_DRIVER_CLASS(UsbFilterDriver, NULL)
/////////////////////////////////////////////////////////////////////
// Driver Entry
//
NTSTATUS UsbFilterDriver::DriverEntry(PUNICODE_STRING RegistryPath)
{
T << "UsbFilterDriver::DriverEntry\n";
m_Unit = 0;
return STATUS_SUCCESS;
// The following macro simply allows compilation at Warning Level 4
// If you reference this parameter in the function simply remove the macro.
UNREFERENCED_PARAMETER(RegistryPath);
}
AddDevice函数
NTSTATUS UsbFilterDriver::AddDevice(PDEVICE_OBJECT Pdo)
{
T << "UsbFilterDriver::AddDevice\n";
UsbFilterDevice * pFilterDevice = new (
static_cast<PCWSTR>(NULL),
FILE_DEVICE_UNKNOWN,
static_cast<PCWSTR>(NULL),
0,
DO_DIRECT_IO
)
UsbFilterDevice(Pdo, m_Unit);
if (pFilterDevice)
{
NTSTATUS status = pFilterDevice->ConstructorStatus();
if ( !NT_SUCCESS(status) )
{
T << "Failed to construct UsbFilterDevice"
<< (ULONG) m_Unit
<< " status = "
<< status
<< "\n";
delete pFilterDevice;
}
else
{
m_Unit++;
}
return status;
}
else
{
T << "Failed to allocate UsbFilterDevice"
<< (ULONG) m_Unit
<< "\n";
return STATUS_INSUFFICIENT_RESOURCES;
}
}
这两段代码基本上和自动生成的代码差不多。AddDevice的作用是构造一个过滤器的实例。
关键的代码在Device类。在这个类里,我们把过滤器插入设备栈,并拦截IRP,用自己的完成例程来实现特定的功能。
Device构造函数
UsbFilterDevice::UsbFilterDevice(PDEVICE_OBJECT Pdo, ULONG Unit) :
KWdmFilterDevice(Pdo, NULL)
{
T << "UsbFilterDevice::UsbFilterDevice\n";
// Check constructor status
if ( ! NT_SUCCESS(m_ConstructorStatus) )
{
return;
}
// Remember our unit number
m_Unit = Unit;
// initialize the USB lower device
m_Usb.Initialize(this, Pdo);
NTSTATUS status = AttachFilter(&m_Usb); //Attach the filter
if(!NT_SUCCESS(status))
{
m_ConstructorStatus = status;
return;
}
SetFilterPowerPolicy();
SetFilterPnpPolicy();
}
在DDK中,我们用IoAttachDevice将设备对象插入设备栈中。DriverStudio封装了这个函数。在DriverStudio中,其他驱动程序需要用Initialize来初始化设备对象和接口,对于过滤驱动,我们关键是需要Attachfilter将其附加在堆栈中。
对于大部分如IRP_MJ_SYSTEM_CONTROL等IRP,我们所做的只需用PassThrough(Irp)将其直接往设备栈下层传递,不需要做任何工作。这些代码我们就不一一列举了。下面的部分才是本文的关键。
我们知道,HIDUSB.SYS是使用内部IOCTRL发出URB给USB类驱动程序(USBD)读取数据的,那么,HIDUSB首先必须构造一个IRP_MJ_INTERNAL_DEVICE_CONTROL,它的IOCTL功能码为IOCTL_INTERNAL_USB_SUBMIT_URB(发出URB的内部IOCTL)。另外,因为我们要检查并修改的是USB键盘某个接口的报告描述,那么这个URB应该是URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE,如下:
NTSTATUS UsbFilterDevice::InternalDeviceControl(KIrp I)
{
T << "UsbFilterDevice::InternalDeviceControl\n";
// Pass through IOCTLs that are not submitting an URB
//不是我们感兴趣的IOCTL不要理它
if (I.IoctlCode() != IOCTL_INTERNAL_USB_SUBMIT_URB)
return DefaultPnp(I);
PURB p = I.Urb(CURRENT); // get URB pointer from IRP
//不是我们感兴趣的URB,也不要理它,
if (p->UrbHeader.Function !=
URB_FUNCTION_GET_DESCRIPTOR_FROM_INTERFACE)
return DefaultPnp(I);
//符合要求的IRP才被设置完成例程
return PassThrough(I, LinkTo(DeviceControlComplete), this);
}
在设置好条件以后,再来实现完成例程。所有的检查、修改等动作都是在完成例程里面完成的。
NTSTATUS UsbFilterDevice::DeviceControlComplete(KIrp I)
{
PURB p = I.Urb(CURRENT);
if(p)
{
//拦截到设备返回的描述表,
char* DescriptorBuffer = (char*)p->UrbControlDescriptorRequest.TransferBuffer;
//指向第三个字节,表示设备Usage属性的值
DescriptorBuffer += 3;
//如果值为6则改成0,6表示hid键盘,0表示未知设备
//在设备管理器里面,原来的hid兼容键盘就不复存在了,取而代之的则是hid兼容设备
if ((*DescriptorBuffer&0xff) == 6)
*DescriptorBuffer = 0;
}
return I.Status();
}
读者可以对照DriverWorks中的例子,直接替换掉(或者修改)上面这两个函数,再编译一下,便可以得到一个完整的键盘过滤器驱动程序。
其实,只要弄清楚了我们需要做些什么动作,在DriverStudio里面只需要写少量的关键代码,便可实现我们的要求,其余的大部分工作,或有范例可供参考,或有Driver Wizard自动生成。
从上面可以看出,我们只需要修改这两个函数,拦截合适的IRP,便可以在完成例程里面实现我们特定的要求。正如开头所说,我们也可以拦截其他的IRP,拦截其他的URB,或者拦截特定键盘的按键键值,将之传递到用户态,以方便实现联想、实达等随机配备的多功能键盘的功能。
三、使用INF安装驱动
在完成了驱动以后,还必须把它安装到系统里面,驱动程序才会起作用。一般来说,我们都必须为我们的驱动程序提供一个inf文件,以便于用户安装或者维护。对于新手来说,过滤驱动程序的inf或许有些棘手。所以,针对本文所描述的驱动,我们提供一个Win98下的安装范例usbkey.inf,范例中“;”后的文字是注解,以方便读者理解。
; usbkey.INF
;
; Installs Lower Level Filter for a HID keyboard device
;
; (c) Copyright 2001 SINO Co., Ltd.
;
[Version]
;”CHICAGO”表示Win9x平台
Signature="$CHICAGO$"
;键盘所属类名
Class=HID
ClassGUID={745a17a0-74d3-11d0-b6fe-00a0c90f57da}
;驱动程序提供者,此信息会显示在设备属性的“常规”页
Provider=%USBDBE%
LayoutFile=layout.inf
;显示在驱动程序文件详细资料窗口
DriverVer=11/12/2001,4.10.2222.12
;[ControlFlags]
;ExcludeFromSelect = *
;驱动程序安装目录,inf会将我们的驱动程序安装到如下目录
;记得Destinationdir后面一定要带一个“s”
[DestinationDirs]
DefaultDestDir = 10,system32\drivers
;要增加的注册表项
[ClassInstall]
Addreg=HIDClassReg
[HIDClassReg]
HKR,,,,%HID.ClassName%
HKR,,Icon,,-20
;制造商
[Manufacturer]
%USBDBE%=USBDBE
[USBDBE]
;我们所要附加过滤驱动程序的设备ID。这个ID可以从IC的规范上得来,也可以
;用hidview.exe读出,或者从注册表HKLM\Enum\hid和usb项找出
%HID.DeviceDesc% = Keypad_Inst, USB\VID_05AF&PID_0805&MI_00
;要安装的文件和需要修改的注册表项
;Install usbkey driver
[Keypad_Inst]
CopyFiles=Keypad_Inst.CopyFiles
AddReg=Keypad_Inst.AddReg
[Keypad_Inst.CopyFiles]
hisb.sys
hidparse.sys
hidclass.sys
usbfilt.sys
[Keypad_Inst.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,"hisb.sys"
[Keypad_Inst.HW]
AddReg=Keypad_Inst.AddReg.HW
;Lowerfilters表示是低层过滤驱动,如果是上层过滤驱动,则必须改为upperfilters
[Keypad_Inst.AddReg.HW]
HKR,,"LowerFilters",0x00010000,"usbfilt.sys"
;HID设备所需要安装的文件和注册表中需要修改的地方
;Install USBHIDDevice
[USBHIDDevice]
CopyFiles=USBHIDDevice.Copy
AddReg=USBHIDDevice.AddReg
[USBHIDDevice.Copy]
hidclass.sys
hisb.sys
hidparse.sys
[USBHIDDevice.AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,"hisb.sys"
;以下定义需要在上面某些地方使用时替换的字符串
[strings]
USBDBE = "SINO Co., Ltd."
HID.DeviceDesc = "SINO USB MultiKeyboard"
HID.HIDDeviceDesc = "Human Interface Devices"
HID.DefaultDevice = "HID Default Device"
HID.ClassName = "Human Input Devices (HID)"
HID.SvcDesc = "Microsoft HID Class Driver"
其实最简单的写inf的方式,是找一些类似设备的inf文件或范例来修改。在不侵权的前提下,充分利用现有资源是我们的一贯原则。
② 怎样找到usb驱动程序
1。如何找到USB驱动?
在Palm Desktop的安装目录下,有一个叫做USB Driver或者USB_Driver或者Drivers的目录,这个目录下就是你的USB驱动。
快速安装一次Palm Desktop,随便输入一个用户名,邮件设置选择No。然后同步一次,如果可以工作,那么这个USB驱动就是你的Palm在当前操作系统下的驱动。在安装其他版本的Palm Desktop之前,把这个目录保存下来。
2。如何删除USB驱动?
在你卸载Palm Desktop的时候,并不会删除USB设备驱动。这可能会为你安装新的设备或者新版本的Palm Desktop带来麻烦。
手动删除它的方法是:
1) 找到Windows文件夹下的inf文件夹。这是一个隐藏文件夹,如果看不到,在“工具”菜单中选择“文件夹选项”,在“查看”标签页上选择“查看所有文件和文件夹”即可。
右键点击文件夹图标,选择“搜索”,在包含文字输入框中输入“palm”。搜索出来的oemxx.inf名字的文件就是可能的USB驱动信息文件。打开它,如果看到里面写的是Palm. Inc字样,删除这个文件。
如果用的是Visor,那应该搜索“visor”或者“handspring”关键字,在搜索到的文件也是以oem加数字命名的,文件头应该有Handspring. Inc字样。删除它。
2) 在这个文件夹下面查找名字为PalmUSBD.inf和VisorUsb.inf的文件,如果有就删掉。
3) 在Windows\system32\drivers文件夹下面,查找下列名字的文件,PalmUSBD.sys,Visorusb.sys,如果有就删除。
3。如何手动安装USB驱动-Clie/Palm
Clie或者Palm的同步超时时间较长,如果插入之后系统提示找不到PalmUSBD.sys,把你备份的USB driver目录告诉安装程序就可以。
如果只是屏幕的右下角出现插入即插即用设备的标志,但是设备被认做未知USB设备,或者正确的识别出了设备,但是有个黄色的惊叹号表示该设备不工作。需要重新安装或者升级驱动程序。在安装的过程中,不要让系统搜索驱动,选择“显示设备列表”,然后在设备类型中选择“其他设备”,注意,不要选择Palm handheld,然后选择“从磁盘安装”,然后指向备份的USB Driver目录即可。
4。如何手动安装Visor的USB驱动。
手动安装Visor的驱动需要洗干净手,修好指甲,屏住呼吸,轻轻握住鼠标,然后按下Visor的同步键。
Visor的同步超时只有几秒钟,所以通常是鼠标点击插入设备图标的右键弹出的菜单里已经没了设备。
打开设备管理器。按下同步键,要眼疾手快右键点中刷新出来的新设备然后选Properties。下面可以慢慢的装了,Visor的USB驱动很标准。指定目录搜索或者象前面说的选择Others设备类型都可以。
③ 关于USB驱动程序
首先,可以不需要驱动,XP的系统绝对可以支持这个设备!电脑可以识别你的专P4说明问题不在数属据线上。
我想是你的BIOS或者系统里面没有打开对即插即用的支持,检查一下该功能是否被禁用了。
或者换一个USB接口试下。
④ 如何重装USB驱动程序
1、打开电脑上的驱动精灵软件,并在软件中点击驱动程序选项。
⑤ USB过滤驱动开发
《USB Design By Example》(http://www.usb-by-example.com)的作者John Hyde实现了一个USB键盘过滤驱动程序,即给此程序增内加了一个“拦截(Intercept)”功能容来处理USB键盘的Report以实现特定的功能:当驱动程序在IRP_MJ_INTERNAL_DEVICE_CONTROL设置的完成例程从USB设备拦截到一个Get_Report_Descriptor时,拦截程序将此Descriptor中的USAGE值从“Keyboard”改为“UserDefined”,再返回给系统。
⑥ 如何重装USB驱动程序
右击我的电脑--设备---弹出的窗口中选
通用串行总线控制器,在这里面找到要更新驱动的USB。双击弹出的窗口中
选驱动程序----更新驱动程序。OK把装有驱动的光盘放进光驱就行了。
⑦ 如何构造一个简单的USB过滤驱动程序
一、基本原理抄 我们知道,WDM(和KDM)是分层的,在构造设备栈时,IO管理器可以使一个设备对象附加到另外一个初始驱动程序创建的设备对象上。与初始设备对象相关的驱动程序决定的IRP,也将被发送到附加的设备对象相关的驱动程序上。
⑧ 请教USB过滤驱动如何写端点
我的电脑—来—右键属性自——硬件——设备管理器——通用串行总线控制器 ——下面会显示USB的一些相关程序。 驱动程序一般指的是设备驱动程序(Device Driver),是一种可以使计算机和设备通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。
⑨ USB驱动程序文件
.前置USB线接错。当主板上的USB线和机箱上的前置USB 接口对应相接时把正负接反就会发生这类故障,这也是相当危险的,因为正负接反很可能会使得USB设备烧毁。所以尽量采用机箱后置的USB接口,也少用延长线.也可能是断口有问题,换个USB端口看下. 2.USB接口电压不足。当把移动硬盘接在前置USB口上时就有可能发生系统无法识别出设备的故障。原因是移动硬盘功率比较大要求电压相对比较严格,前置接口可能无法提供足够的电压,当然劣质的电源也可能会造成这个问题。解决方法是移动硬盘不要接在前置USB接口上,更换劣质低功率的电源或尽量使用外接电源的硬盘盒,假如有条件的话。3.主板和系统的兼容性问题。呵呵这类故障中最著名的就是NF2主板与USB的兼容性问题。假如你是在NF2的主板上碰到这个问题的话,则可以先安装最新的nForce2专用USB2.0驱动和补丁、最新的主板补丁和操作系统补丁,还是不行的话尝试着刷新一下主板的BIOS一般都能解决。4.系统或BIOS问题。当你在BIOS或操作系统中禁用了USB时就会发生USB设备无法在系统中识别。解决方法是开启与USB设备相关的选项。就是开机按F2或DEL键,进入BIOS,把enable usb device选择enable。5.拔插要小心,读写时千万不可拔出,不然有可能烧毁芯片。XP中任务栏中多出USB设备的图标,打开该图标就会在列表中显示U盘设备,选择将该设备停用,然后你再拔出设备,这样会比较安全。其实判断软件硬件问题很简单,在别的机器或换个系统(98下要驱动哦)试试就可以了.有些小的问题不妨先用专门软件格式化下.还有提醒大家WINDOWS下格式化时要选择FAT,不要选FAT32。U盘提示无法识别的USB设备维修故障提示如图: 此故障大部份是U盘接口电路部份引起的。1、首先换一根USB延长线或换个USB口,排除掉U盘之外的因素。2、摇动U盘的插头,看是否有松动。3、拆开U盘外壳,把USB接口的四个脚补焊一遍。4、故障依旧。我们知道在数据线到主控之间有两个起保护作用的电阻(如下图),用万用表测量其中的一个开路。5、从坏的主控板上拆下一个27欧的电阻换上,故障排除。总结:U盘的故障一般都较容易修,应急情况也可以直接短接此电阻。维修例二:一Reidio牌128M的U盘插入电脑USB孔时提示无法识别的设备。此U盘为ChipsBank方案。备注:图中为导线焊上二极管临时代用,维修时应将三脚IC折下来,将二极管直接焊在电路板上。有配件的人员应使用规格相同的稳压IC换上。检修过程:1、根据故障分析,可以排除是软件的问题。2、拆开U盘,首先看晶振、闪存等有无虚焊3、用备用的12M晶振代换上,故障依旧4、用万用表测USB接口的V+电压有5V正常5、再测稳压IC的输入端5V也正常,测稳压IC的输出端只有1.3V,正常应该为3.3V左右6、由于芯片没有发热现像,判断稳压IC损坏。7、手头刚好没有这种稳压IC,应急用一个二极管并在三脚IC的输入端和输出端之间,如图。8、故障排除。无法识别的USB设备:Unknown USB Device. 很多人都遇到过的一个问题,所谓“无法识别”对于操作系统来说,或者是驱动程度有问题,或者是USB设备出现了问题,或者是计算机与USB设备连接出现了故障,解决问题的方法也是从这几处着手。对于不同的设备会有不同的处理方法,了解USB设备正常工作需要的条件以及一些可能影响USB设备正常工作的因素,会有助于解决问题。下面是保证USB设备可以正常工作的一些条件:(1)USB设备本身没有任何问题——可以通过在其它计算机上进行测试,保证能正常工作;(2)USB接口没有任何问题——可以通过连接其它的USB设备在此接口上进行测试;(3)USB设备的驱动程序已经正确安装,如果有详细说明书的USB设备,一定要仔细查看相应的说明文件,按照说明安装相应的驱动程序;Windows 2000以后的操作系统以识别大部分的USB设备,Windows 98以前的操作系统可以安装USB设备自带的驱动或者安装通用的USB设备驱动程序。下面是可能影响USB设备正常工作的一些情形:(1)USB设备已经出现了故障(同样的条件以前可以正常使用,现在出现了问题);(2)USB接口有问题,比如a.USB前置接口极性接反,这可能导致USB设备烧毁,所以一定要仔细看一下主板说明书,防止接错;b.接口电压不足,一些移动硬盘常会有这样的问题,主机后面的USB接口往往会比前置USB接口更可靠一些;c.主板与操作系统兼容性有问题,安装最新的主板驱动程序可以最大程度地避免此类问题;d.Bios中禁止了USB设备,可能通过更改BIOS中相应的设置来解决;e.操作系统问题,可以通过重装操作系统来解决;(3)USB驱动程序有问题:如果怀疑驱动有问题时,应当保证安装了该设备相应型号的最新驱动程序或确认操作系统不需要安装特别的驱动,最新的驱动可以通过从网上设备生产商的主页上去查找。当USB设备出现问题时,除了根据实际的错误提示信息寻找解决方案以外,还要仔细查看USB设备的具体品牌、型号、生产商,在搜索结果时包括这些信息,可以更容易地找到对应的解决方法。象有些插拔费劲需要经常处于连接状态的USB设备暂时出现故障,操作系统不停地出现“无法识别的USB设备”这样恼人的提示时,可以在设备管理器中暂时关闭通用串行总线控制器中相应的USB端口或者禁止相应的USB设备。关于无法识别的usb设备MP3不联机的原因可能有多种,我自己接触过很多种的MP3,大致归纳一下解决办法:1。电脑设置MP3插入后,就会在右下角弹出电脑正在尝试连接此USB设备的一些信息,有时就会弹出对话框让用户选择,有些用户还没看清就点了否,或者因为电脑一些初始的设置问题,禁止了USB的一些功能。解决办法:右键点“我的电脑”,选“属性”--“硬件”--“驱动器签名”,在此选择“忽略”,点“确定”。然后重新插上MP3,还是不连的话,再右键点“我的电脑”--“属性”--“硬件”--“设备管理器”,从中找到“通用串行总线控制器”,右键,然后“扫描检测硬件改动”。2。驱动程序问题MP3光盘里往往会配“98驱动程序”、“升级工具”,在2000以上系统中,虽然理论上不需要安装也能联MP3,但往往安装过驱动后,能让联机变的更顺畅。所以试试安装这些工具,如果没有“98驱动”,就把“升级工具”安装一下(有些MP3的驱动集成在升级工具中)。3。MP3本身的电压问题由于现在MP3的趋势是千方百计的降低成本,所以各公司不断采用新方案,新主控,新FLASH芯片,并不是说这些新东西就偷工减料了,问题在于这些新东西往往需要长期的调试才能达到最佳,但市场状况只能允许MP3工厂测试能在电脑的一个接口上联机就投产,所以常出现不联机、掉盘等现象。这种情况下就需要用户多试几次,换插不同USB接口,单独再配一条质量好的USB线(一般越粗越好,铜的比铁的好),然后保证MP3供电正常(用充电器把电充满再试)。4。长期不使用后,出现的不联机有些MP3长期不使用后,不能联机,甚至不能充电。主要是由于MP3未关闭电源,长期不用导致放电过度,达不到启动电压引起的。解决办法是,把MP3连接到电脑或充电器上后,反复的拔/插USB接口和打开/关闭电源开关(ON/OFF键,如果没有就反复按PLAY键)。比如,插上USB接口后,关ON/OFF充2分钟,再开ON/OFF充2分钟,再拔下来重插,再充2分钟。这样做的目的是让MP3先少量充进一些电,达到启动电压。5。如果这些方法仍然不能解决问题,基本能肯定MP3本身出现问题。此时,应该及时的进行返修或者退换,以免错过保修期。强烈反对用户自行拆机,MP3的种类比手机都多,而且往往需要原厂的程序重新升级,所以自行拆机大多导致不能享受免费服务。也不建议用户自行对MP3升级。系统报错“无法识别的USB设备”【故障现象】使用U盘时电脑意外断电,重新开机后U盘无法正常使用,插上后系统就报错“无法识别的USB设备”。使用其他原来都能正常使用的USB接口设备,都会提示同样的错误信息。将USB设备插到电脑的其他USB接口上,都能正常工作。【分析故障】从现象上看,USB设备和主板的接口都没有损坏,怀疑是意外断电导致系统设置错误。【问题处理】从“控制面板”进入添加和删除硬件的窗口,将所有USB设备都删除,重新安装需要使用的USB设备驱动程序。重新启动电脑,U盘等USB设备插在原来的故障接口上能够正常工作。无法识别的USB设备- 笔记本硬盘故障移动硬盘,插在前置USB接口,无法识别。这种情况,很大原因是供电问题。由于USB硬盘在工作的时候也需要消耗一定的电能,如果直接通过USB接口来取电,很有可能出现供电不足。因此,几乎所有的移动硬盘都附带了单独的外接电源或者是通过键盘取电的PS2转接口,这时只要事先连接好外接电源或者通过PS2转接线与键盘连接好,确保给移动硬盘提供足够的电能之后再试试,这时应该可以正常使用了吧。需要特别提醒大家注意的是,建议使用移动硬盘之前都确保有足够的供电,否则很可能由于供电不足导致硬盘损坏。对于从来没有使用过USB外接设备的朋友来说,即使正确安装了驱动程序也有可能出现系统无法检测USB硬盘的情况,这主要是由于主板默认的CMOS端口是关闭的,如果没有将其设置为开启状态,那么Windows自然无法检测到移动硬盘了。为了解决这个问题,我们可以重新开机,进入CMOS设置窗口,并且在 “PNP/PCI CONFIGURATION”栏目中将“Assign IRQ For USB”一项设置为“Enable”,这样系统就可以给USB端口分配可用的中断地址了。还有可能是USB接口类型不符导致移动硬盘无法使用。比如计算机配置的USB接口是1.1标准的,而购买的移动硬盘是USB 2.0标准的接口,这就要求连接计算机和移动硬盘的连接线必须支持USB 2.0标准。因为高速移动设备插入低速集线器,该设备可能不被正常安装,而有些朋友在使用移动硬盘的同时还使用优盘,为了方便就直接使用优盘附送的USB 1.1标准连接线,这样就导致USB 2.0标准的移动硬盘无法正确识别。只要将连接线更换为USB 2.0标准的即可解决此故障