| 49 |
#include "compat_w95.h" |
#include "compat_w95.h" |
| 50 |
#include "tt_res.h" |
#include "tt_res.h" |
| 51 |
|
|
| 52 |
|
// TMap を格納するファイルマッピングオブジェクト(共有メモリ)の名前 |
| 53 |
|
// TMap(とそのメンバ)の更新時は旧バージョンとの同時起動の為に変える必要があるが |
| 54 |
|
// 連番からバージョン番号を使うように変更した為、通常は手動で変更する必要は無い |
| 55 |
|
#define TT_FILEMAPNAME "ttset_memfilemap_" TT_VERSION_STR("_") |
| 56 |
|
|
| 57 |
/* first instance flag */ |
/* first instance flag */ |
| 58 |
static BOOL FirstInstance = TRUE; |
static BOOL FirstInstance = TRUE; |
| 59 |
|
|
| 2551 |
return; |
return; |
| 2552 |
} |
} |
| 2553 |
|
|
| 2554 |
|
/* |
| 2555 |
|
* @return エラーが有る場合 FALSE |
| 2556 |
|
* @param[in] BOOL first_instance |
| 2557 |
|
*/ |
| 2558 |
|
static BOOL OpenSharedMemory(BOOL *first_instance_) |
| 2559 |
|
{ |
| 2560 |
|
int i; |
| 2561 |
|
HMap = NULL; |
| 2562 |
|
pm = NULL; |
| 2563 |
|
for (i = 0; i < 100; i++) { |
| 2564 |
|
char tmp[32]; |
| 2565 |
|
HANDLE hMap; |
| 2566 |
|
BOOL first_instance; |
| 2567 |
|
_snprintf_s(tmp, sizeof(tmp), _TRUNCATE, i == 0 ? "%s" : "%s_%d", TT_FILEMAPNAME, i); |
| 2568 |
|
hMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, |
| 2569 |
|
0, sizeof(TMap), tmp); |
| 2570 |
|
if (hMap == NULL) { |
| 2571 |
|
return FALSE; |
| 2572 |
|
} |
| 2573 |
|
|
| 2574 |
|
first_instance = (GetLastError() != ERROR_ALREADY_EXISTS); |
| 2575 |
|
|
| 2576 |
|
TMap *map = (TMap *)MapViewOfFile(hMap,FILE_MAP_WRITE,0,0,0); |
| 2577 |
|
if (map == NULL) { |
| 2578 |
|
return FALSE; |
| 2579 |
|
} |
| 2580 |
|
|
| 2581 |
|
if (first_instance || |
| 2582 |
|
(map->size_tmap == sizeof(TMap) && |
| 2583 |
|
map->size_tttset == sizeof(TTTSet))) |
| 2584 |
|
{ |
| 2585 |
|
map->size_tmap = sizeof(TMap); |
| 2586 |
|
map->size_tttset = sizeof(TTTSet); |
| 2587 |
|
HMap = hMap; |
| 2588 |
|
pm = map; |
| 2589 |
|
*first_instance_ = first_instance; |
| 2590 |
|
return TRUE; |
| 2591 |
|
} |
| 2592 |
|
|
| 2593 |
|
// next try |
| 2594 |
|
UnmapViewOfFile(map); |
| 2595 |
|
CloseHandle(hMap); |
| 2596 |
|
} |
| 2597 |
|
return FALSE; |
| 2598 |
|
} |
| 2599 |
|
|
| 2600 |
BOOL WINAPI DllMain(HANDLE hInstance, |
BOOL WINAPI DllMain(HANDLE hInstance, |
| 2601 |
ULONG ul_reason_for_call, |
ULONG ul_reason_for_call, |
| 2602 |
LPVOID lpReserved) |
LPVOID lpReserved) |
| 2612 |
/* do process initialization */ |
/* do process initialization */ |
| 2613 |
DoCover_IsDebuggerPresent(); |
DoCover_IsDebuggerPresent(); |
| 2614 |
hInst = hInstance; |
hInst = hInstance; |
| 2615 |
HMap = CreateFileMapping((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, |
if (OpenSharedMemory(&FirstInstance) == FALSE) { |
| 2616 |
0, sizeof(TMap), TT_FILEMAPNAME); |
// dllロード失敗、teratermが起動しない |
|
if (HMap == NULL) { |
|
|
return FALSE; |
|
|
} |
|
|
FirstInstance = (GetLastError() != ERROR_ALREADY_EXISTS); |
|
|
|
|
|
pm = (PMap)MapViewOfFile(HMap,FILE_MAP_WRITE,0,0,0); |
|
|
if (pm == NULL) { |
|
| 2617 |
return FALSE; |
return FALSE; |
| 2618 |
} |
} |
| 2619 |
break; |
break; |