辿り着いたアイデアはこうだ。
Softgateも行なっているDLLインジェクションは マケスピに同梱されている
楽天証券のアプリケーションサーバーと通信を行うDLLに対して行なっている。
無論、非公開I/Fであるし I/Fが変われば途端に使用できなくなるので、今日から使えません
となると、それはそれで困る。
今回のアプローチは、「見えてるんだから、それを取得すれば良い」という姿勢はそのままに
GDIインターフェースへのアクセスをフックする事により、値を引きぬいてはどうかというアイデアだ。
全てのWindowsアプリケーションはOSによって提供されているAPIを使う事で
ウィンドウを生成し、アイコンを表示し、フォントを描画している。
マーケットスピードも例外ではない。
マケスピからOSのDLLへのアクセスを乗っ取り、その引き渡されたパラメータを利用する。
これをDLLインジェクションと呼ぶが、これを行うには それ相当の知識がいる。
普通のエンジニアでも、やる事がやる事だけにあまり触れる機会は無いだろう。
で、簡単なDLLインジェクションならできたが、OSに影響を与えず かつ
高頻度で変化する値を取得するには、マルチスレッドで 値を取り込む側と
取り込んだ値を処理し、自分の日経平均計算や急騰検出コードに送り込まなければいけない。
マルチスレッドで下手に排他処理を行えば、他のアプリどころかOSそのものが不安定に
なってしまう。
さらに他にも問題がある。DLLインジェクションを行うにはマケスピからだけ
値を取得したいので、その他のアプリケーションは正常に動作してくれないといけない。
普通に実行すると、全てのプロセスでインジェクションが行われてしまう。
もっと言えば、あるAPIを乗っ取ると元のそのAPIを呼べないので 描画が行えなくなってしまう。
それはそれでかなり問題だ。
安定的にkernel32やuser32へのアクセス記録が取れればそれで良いので
いくつかフリーのツールを試してみた。しかし、クラッシュが頻発するわ
うまくフックできないわ、結局 自分のプログラムにデータを送り込まないと
いけないわで、よろしくない。
まだいくつか試していないツールもあるので、これから検証していく事にする。
0 件のコメント:
コメントを投稿