« マルメロ探し | トップページ | マルメロジャム »

2012年1月27日 (金)

DLLにパッチ

USB-IO2.0(AKI)をCから制御しようと思ったが、USB-IO用のDLLでは動かない。
USB-IOがversion2.0になって、VID(ベンダID)やPID(プロダクトID)が変更になっているのが原因だろう。
とにかく動けばいいというのであれば、DLLを改造すればいい。古いUSB-IOのVIDやPIDを、USB-IO2.0のそれに書き換えればいいのだ。

使いたいDLLをバイナリエディタで開いて、ベンダIDを検索する。
USB-IOを販売していた会社は以下の3社。
モルフィ企画(VID=0x0bfe, PID=0x1002,0x1003)、テクノキット(VID=0x12ed, PID=0x1003)、それからKm2net(VID=0x1352、PID=0x0100)である。
たとえばKm2netのVIDは0x0bfeである。VIDはリトルエンディアンで格納されているので、fe,0bというデータを探す。
さらにその近くでPIDを探す。0x0100は、00,01として探せばいい。
これをUSB-IO2.0のPIDに書き換えるのだが、fe,0bというデータに比べて、00,01はたくさんの場所で見付かるから、どれが本物かわからない。
そこでモルフィ企画やテクノキットのVIDを検索し、その近くにあるPID=0x1003を検索する。これだと簡単にPIDが記録されているアドレスが特定できるだろう。
その近くで0x0100を探すことで、ようやく書き換えるべきアドレスが特定できる。

実際にやってみる。HSPからUSB-IOを使うためのDLL、hspusbio.dllは、0e00番地から、VIDとPIDがまとめて格納されている。
モルフィ企画のVID=0x0bfe、PID=0x1003を殺して、Km2netのUSB-IO2.0に対応させてみよう。

--------|-0--1--2--3--4--5--6--7--8--9--A--B--C--D--E--F-|
00000e00|fe 0b 02 10 fe 0b 03 10
--------|------------------------------------------------|

となっている部分を探す。
USB-IO(AKI)は、VID=0x1352、PID=0x0121だから、以下のように変更すればいい。

--------|-0--1--2--3--4--5--6--7--8--9--A--B--C--D--E--F-|
00000e00|fe 0b 02 10 52 13 21 01
--------|------------------------------------------------|

ちなみに上のダンプは、バイナリエディタDump4wのもの。
ちょっとクセがあるが、コピペするだけで、アドレスやゲージを付けてくれるので便利だ。

三石印房のDLLは、VIDとPIDが少し離れたところに格納されているが、同じ手口で改造できる。
急ぎの方はどうぞ。

« マルメロ探し | トップページ | マルメロジャム »

お仕事」カテゴリの記事

コメント

KOHさま・こんにちわ~
今回、ミルクティの品種名のご指摘を頂き恐れ入ります。
よそ様からの頂きものや、じぶんで購入したものも多く、品種名は
間違いがないように付けてあったのですが、いつの間にか、

取れて終い並べていた隣の品種と間違えていて失礼しました。教えて
頂いて感謝です。そそっかしい自分に恥じています。
ミルクティ―を改めて投稿させて頂きますネ・。今、投稿させて頂いてる
ランは,スプリングナイト"デイープインパクト”です。
これからも宜しくお付き合い下さいませ。ありがとうございました。
改めて、今日の投稿蘭に訂正させていただきます。            

こんにちわ!
ありゃー、KOHさんのプログラムの話題って私にはチンプンカンプンで
書き込めませんでしたよ。
でもあえてここに書き込んでしまいました。
ブルーベリーの知識、ありがとうございました!
すごく参考になりました。これからも宜敷くお願いします!

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/24707/43907231

この記事へのトラックバック一覧です: DLLにパッチ:

« マルメロ探し | トップページ | マルメロジャム »

最近のトラックバック