CGI State: None
document

MUTEX
filemapping object

概要


SAKURA は起動中特定のメモリオブジェクトを保持し続けます。SAKURA 以外のプロセスはこれらのメモリオブジェクトから情報を取得/解析することにより、本来センスできない情報をセンスしたり、あるいは同じ情報をよりコストの低い方法で取得したりすることができます。

全てローカルマシン内での話です。ネットワーク越しに確認することはできません。

仕様 - MUTEX


SAKURA は起動中 "sakura" という名前の MUTEX オブジェクトを保持します。つまりこのオブジェクトの存在の可否をチェックすることで極めてローコストに SAKURA の存在を判定できます。


  • C


    hmutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"sakura");
    if (hmutex==0) {
      // いない
    } else {
      // いる
      CloseHandle(hmutex);
    }
    

  • Pascal


    hmutex:=openmutex(mutex_all_access,false,'sakura');
    if (hmutex=0) then begin
      // いない
    end else begin
      // いる
      closehandle(hmutex);
    end;
    

  • 仕様 - file mapping object


    SAKURA は起動中 "Sakura" という名前の filemapping object を保持します。このメモリ内には現在ローカルマシンで稼働している SAKURA プロセスのリスト、各プロセスで稼働しているゴースト名、ウインドウハンドル等を取得することができます。


  • メモリマップ


    0-3
    全体のサイズを示す long 値
    4-データ本体


  • データ本体のフォーマット


    entry[1]value[13][10]

    を1エントリとしたエントリの連続。例えば以下のようなもの。

    53137ee8825085dba1707e3bea9e474b.hwnd[1]1024[13][10]


  • データの意味


    1プロセスごとにユニークな値(上記の例では MD5 値 53137ee8825085dba1707e3bea9e474b)がふられ、スコープ演算子 . に続いてフィールド名が記述される。エントリと値はバイト値1でセパレートされ、CR+LF で1行を終える。

    有効なエントリ名は以下の通り。


    [ID].hwnd
    そのプロセスの(メインとなるウインドウの)ウインドウハンドル
    [ID].name
    そのプロセスで現在稼働しているゴースト名(sakura 側)
    [ID].keroname
    そのプロセスで現在稼働しているゴースト名(kero 側)
    [ID].sakura.surface
    そのプロセスで現在稼働しているゴーストの surface id(sakura 側)
    [ID].kero.surface
    そのプロセスで現在稼働しているゴーストの surface id(kero 側)


    ここで示される hwnd はいわゆる「本体」ウインドウで、このウインドウは必ず Direct SSTP サーバ機能を持っていなくてはならない。


  • サイズ


    当面 1024*64 バイト。これには先頭の long 値も含まれるので、実際に使用できる領域は 1024*64-4 バイト。

  • 戻る