이 내용은 2004/04/23 기준으로 쓰여졌습니다. 최신 내용은 본가에서 얻으실 수 있습니다.
개요
Sakura 는 기동중 특정한 메모리 오브젝트를 계속 보관 유지합니다. Sakura 외의 프로세스는 이러한 메모리 오브젝트로부터 정보를 취득/해석하는 것으로써, 본래 얻을 수 없는 정보를 얻거나 혹은 같은 정보를 보다 저비용으로 (시스템에 무리가 되지 않는 방법으로) 얻거나 할 수가 있습니다.
※ 모두 로컬 머신내에서의 이야기입니다. 네트워크를 넘어서는 확인할 수 없습니다.
사양 - MUTEX
Sakura 는 기동중 "sakura" 라는 이름의 MUTEX 오브젝트를 보관 유지합니다. 즉 이 오브젝트가 있는지를 체크하는 것으로 지극히 Low cost에 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]
데이터의 의미
하나의 프로세스 마다 독특한 값(위의 예에서는 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 바이트.
