Winapiでプロセス間のリアルタイム映像転送

どうも、チョコです。久しぶりの進捗がありました。

今回は、OpenGLの2つのアプリ間で通信をしないといけないことになりました。ただし、リアルタイムの生画像転送なので、100mbpsくらいの速度が最低ないと困る。

ポートとかパイプあけて通信すればよいではという考えもあったが、アプリAがアプリBの好きなデータを取れるようにしたい(そういうプロジェクトだから)。なので、いちいちデータの名前送ってデータをもらうとすごく面倒だし、なにより遅い。

そこで、WinAPIのReadProcessMemoryです。要は、アプリAがアプリBに親権限を持っていれば、なんでもしていいよとのこと。よさ。
WriteProcessMemory(HANDLE processHandle, void* source, void* destination, ulong numbytes, ulong* numbytesread)

*sourceはアプリBでのポインタ値で、destinationはそのポインタの指しているデータをアプリAにコピーする場所。destinationを先に初期化しないといけない(それはそう/1時間消耗した。)。
ん、読みたいところのポインタがないとできないね(それはそう)。ので、まずはポインタ集というStructを作ります。
struct PointerList {
uint hasDataLoc, pixelsLoc, pixelCountLoc, displayWLoc, displayHLoc, okLoc;
} pointers;

*win32なので、ポインタは32ビットunsigned intに変換できます。
なので、最初にこのStructを読み取れば、すべてのポインタがわかるね。わーい。

実際にやったものを見せよう。

わーい。(ただこれを見せたかった)

では。

Posted on