Revision: 7304 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7304 Author: zmatsuo Date: 2018-12-03 00:51:37 +0900 (Mon, 03 Dec 2018) Log Message: ----------- 共有メモリのサイズチェック追加 Modified Paths: -------------- trunk/teraterm/common/tttypes.h trunk/teraterm/ttpcmn/ttcmn.c trunk/teraterm/ttpdlg/ttdlg.c trunk/teraterm/ttpfile/ttfile.c -------------- next part -------------- Modified: trunk/teraterm/common/tttypes.h =================================================================== --- trunk/teraterm/common/tttypes.h 2018-12-02 15:49:41 UTC (rev 7303) +++ trunk/teraterm/common/tttypes.h 2018-12-02 15:51:37 UTC (rev 7304) @@ -1116,6 +1116,8 @@ /* shared memory */ typedef struct { + size_t size_tmap; /* sizeof TMap */ + size_t size_tttset; /* sizeof TTTSet */ /* Setup information from "teraterm.ini" */ TTTSet ts; /* Key code map from "keyboard.def" */ @@ -1136,7 +1138,3 @@ } TMap; typedef TMap *PMap; -// TMap \x82\xF0\x8Ai\x94[\x82\xB7\x82\xE9\x83t\x83@\x83C\x83\x8B\x83}\x83b\x83s\x83\x93\x83O\x83I\x83u\x83W\x83F\x83N\x83g(\x8B\xA4\x97L\x83\x81\x83\x82\x83\x8A)\x82̖\xBC\x91O -// TMap(\x82Ƃ\xBB\x82̃\x81\x83\x93\x83o)\x82̍X\x90V\x8E\x9E\x82͋\x8C\x83o\x81[\x83W\x83\x87\x83\x93\x82Ƃ̓\xAF\x8E\x9E\x8BN\x93\xAE\x82ׂ̈ɕς\xA6\x82\xE9\x95K\x97v\x82\xAA\x82\xA0\x82邪 -// \x98A\x94Ԃ\xA9\x82\xE7\x83o\x81[\x83W\x83\x87\x83\x93\x94ԍ\x86\x82\xF0\x8Eg\x82\xA4\x82悤\x82ɕύX\x82\xB5\x82\xBD\x88ׁA\x92ʏ\xED\x82͎蓮\x82ŕύX\x82\xB7\x82\xE9\x95K\x97v\x82͖\xB3\x82\xA2 -#define TT_FILEMAPNAME "ttset_memfilemap_" TT_VERSION_STR("_") Modified: trunk/teraterm/ttpcmn/ttcmn.c =================================================================== --- trunk/teraterm/ttpcmn/ttcmn.c 2018-12-02 15:49:41 UTC (rev 7303) +++ trunk/teraterm/ttpcmn/ttcmn.c 2018-12-02 15:51:37 UTC (rev 7304) @@ -49,6 +49,11 @@ #include "compat_w95.h" #include "tt_res.h" +// TMap \x82\xF0\x8Ai\x94[\x82\xB7\x82\xE9\x83t\x83@\x83C\x83\x8B\x83}\x83b\x83s\x83\x93\x83O\x83I\x83u\x83W\x83F\x83N\x83g(\x8B\xA4\x97L\x83\x81\x83\x82\x83\x8A)\x82̖\xBC\x91O +// TMap(\x82Ƃ\xBB\x82̃\x81\x83\x93\x83o)\x82̍X\x90V\x8E\x9E\x82͋\x8C\x83o\x81[\x83W\x83\x87\x83\x93\x82Ƃ̓\xAF\x8E\x9E\x8BN\x93\xAE\x82ׂ̈ɕς\xA6\x82\xE9\x95K\x97v\x82\xAA\x82\xA0\x82邪 +// \x98A\x94Ԃ\xA9\x82\xE7\x83o\x81[\x83W\x83\x87\x83\x93\x94ԍ\x86\x82\xF0\x8Eg\x82\xA4\x82悤\x82ɕύX\x82\xB5\x82\xBD\x88ׁA\x92ʏ\xED\x82͎蓮\x82ŕύX\x82\xB7\x82\xE9\x95K\x97v\x82͖\xB3\x82\xA2 +#define TT_FILEMAPNAME "ttset_memfilemap_" TT_VERSION_STR("_") + /* first instance flag */ static BOOL FirstInstance = TRUE; @@ -2546,6 +2551,52 @@ return; } +/* + * @return \x83G\x83\x89\x81[\x82\xAA\x97L\x82\xE9\x8Fꍇ FALSE + * @param[in] BOOL first_instance + */ +static BOOL OpenSharedMemory(BOOL *first_instance_) +{ + int i; + HMap = NULL; + pm = NULL; + for (i = 0; i < 100; i++) { + char tmp[32]; + HANDLE hMap; + BOOL first_instance; + _snprintf_s(tmp, sizeof(tmp), _TRUNCATE, i == 0 ? "%s" : "%s_%d", TT_FILEMAPNAME, i); + hMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, + 0, sizeof(TMap), tmp); + if (hMap == NULL) { + return FALSE; + } + + first_instance = (GetLastError() != ERROR_ALREADY_EXISTS); + + TMap *map = (TMap *)MapViewOfFile(hMap,FILE_MAP_WRITE,0,0,0); + if (map == NULL) { + return FALSE; + } + + if (first_instance || + (map->size_tmap == sizeof(TMap) && + map->size_tttset == sizeof(TTTSet))) + { + map->size_tmap = sizeof(TMap); + map->size_tttset = sizeof(TTTSet); + HMap = hMap; + pm = map; + *first_instance_ = first_instance; + return TRUE; + } + + // next try + UnmapViewOfFile(map); + CloseHandle(hMap); + } + return FALSE; +} + BOOL WINAPI DllMain(HANDLE hInstance, ULONG ul_reason_for_call, LPVOID lpReserved) @@ -2561,17 +2612,10 @@ /* do process initialization */ DoCover_IsDebuggerPresent(); hInst = hInstance; - HMap = CreateFileMapping((HANDLE) 0xFFFFFFFF, NULL, PAGE_READWRITE, - 0, sizeof(TMap), TT_FILEMAPNAME); - if (HMap == NULL) { + if (OpenSharedMemory(&FirstInstance) == FALSE) { + // dll\x83\x8D\x81[\x83h\x8E\xB8\x94s\x81Ateraterm\x82\xAA\x8BN\x93\xAE\x82\xB5\x82Ȃ\xA2 return FALSE; } - FirstInstance = (GetLastError() != ERROR_ALREADY_EXISTS); - - pm = (PMap)MapViewOfFile(HMap,FILE_MAP_WRITE,0,0,0); - if (pm == NULL) { - return FALSE; - } break; case DLL_PROCESS_DETACH: /* do process cleanup */ Modified: trunk/teraterm/ttpdlg/ttdlg.c =================================================================== --- trunk/teraterm/ttpdlg/ttdlg.c 2018-12-02 15:49:41 UTC (rev 7303) +++ trunk/teraterm/ttpdlg/ttdlg.c 2018-12-02 15:51:37 UTC (rev 7304) @@ -3456,9 +3456,6 @@ ULONG ul_reason_for_call, LPVOID lpReserved) { - //PMap pm; - //HANDLE HMap = NULL; - hInst = hInstance; switch (ul_reason_for_call) { case DLL_THREAD_ATTACH: @@ -3469,17 +3466,6 @@ break; case DLL_PROCESS_ATTACH: /* do process initialization */ - //HMap = CreateFileMapping( - // (HANDLE) 0xFFFFFFFF, NULL, PAGE_READONLY, - // 0, sizeof(TMap), TT_FILEMAPNAME); - //if (HMap != NULL) { - // pm = (PMap)MapViewOfFile( - // HMap,FILE_MAP_READ,0,0,0); - // if (pm != NULL) { - // strncpy_s(UILanguageFile, sizeof(UILanguageFile), - // pm->ts.UILanguageFile, _TRUNCATE); - // } - //} DoCover_IsDebuggerPresent(); break; case DLL_PROCESS_DETACH: Modified: trunk/teraterm/ttpfile/ttfile.c =================================================================== --- trunk/teraterm/ttpfile/ttfile.c 2018-12-02 15:49:41 UTC (rev 7303) +++ trunk/teraterm/ttpfile/ttfile.c 2018-12-02 15:51:37 UTC (rev 7304) @@ -1332,9 +1332,6 @@ ULONG ul_reason_for_call, LPVOID lpReserved) { -// PMap pm; -// HANDLE HMap = NULL; - hInst = hInstance; switch( ul_reason_for_call ) { case DLL_THREAD_ATTACH: @@ -1345,15 +1342,6 @@ break; case DLL_PROCESS_ATTACH: /* do process initialization */ -// HMap = CreateFileMapping((HANDLE) 0xFFFFFFFF, NULL, PAGE_READONLY, -// 0, sizeof(TMap), TT_FILEMAPNAME); -// if (HMap != NULL) { -// pm = (PMap)MapViewOfFile(HMap,FILE_MAP_READ,0,0,0); -// if (pm != NULL) { -// strncpy_s(UILanguageFile, sizeof(UILanguageFile), pm->ts.UILanguageFile, _TRUNCATE); -// strncpy_s(FileSendFilter, sizeof(FileSendFilter), pm->ts.FileSendFilter, _TRUNCATE); -// } -// } DoCover_IsDebuggerPresent(); break; case DLL_PROCESS_DETACH: