つづき〜



えっと、
MapViewOfFileで開いたものに
FMOを登録するんだよな、・・・あたりまえか


とりあえず、まずは書く事だけを考えてと



登録内容は
materiaの仕様書(この書き方で良いんだろうか)によると

メモリマップ
0-3 全体のサイズを示す long 値
4- データ本体

データ本体のフォーマット
entry[1]value[13][10]
を1エントリとしたエントリの連続。例えば以下のようなもの。
53137ee8825085dba1707e3bea9e474b.hwnd[1]1024[13][10]

との事だが、SSPの仮仕様書によると

プロセスで複数ゴーストを立たせるため,
FMOエントリの識別子部分はプロセスIDのMD5値ではなくなっています.
SSPでの識別子の仕様の例は以下のとおりです.
ssp_fmo_header_000002a5_002b3132.name[1]エミリ\r\n
ssp_fmo_header_[プロセスID-16進]_[Sakura側hwnd-16進]
以上のような32バイトの文字列を生成することにより,
ゴースト毎にユニークな識別子を割り当て,
かつ現状のFMOを利用するアプリケーションとの互換性を取ることができます.

以上、無断引用(いいんかな?


なので・・・よくわからん。


とりあえず、はじめの4バイトにlong型(uint型?)の数値を入れてと
・・・Marshal.WriteInt32でマッピングされたものにバイト数入れると
4 バイトの符号なし整数だから自動的に入ってくれると思って良いのかな?


で、肝心のエントリは作成部分がまだできてないから、
できているものをぱくってとりあえずテストする事に
なのでその部分は割愛と


でできたものを
System.Text.Encodingでエントリ部をbyte型に変換して
それをMarshal.WriteByteで挿入する
こんな感じかな?



 System.Text.Encoding ascii = System.Text.Encoding.Default;
 byte messageBuffer2 = new byte[65532];
 messageBuffer2 = ascii.GetBytes(エントリ部);
 for(int i = 0; i < messageBuffer2.Length; i++)
 {
  Marshal.WriteByte(lpFile, i+4, messageBuffer2[i]);
 }



SSSBとボトルクライアントで確認した限りでは登録まではうまくいっているっぽい


・・・ボトルクライアントのFMOエクスプローラーだと応答無しになってるな。
次はこの辺かな?


ところで、
エントリはディレクトリを検索して
直下、ghost\master、shell\masterのdescript.txtを見に行って
type,shell、name,、sakura.name,、kero.name,を見に行けばいいのかな?



・・・全登録する気ですか俺は
エントリするゴーストの元の情報がそこにあるってだけか
まあ、この辺は後でゆっくり考えるとするか