[Ttssh2-commit] [7304] 共有メモリのサイズチェック追加

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2018年 12月 3日 (月) 00:51:38 JST


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:


Ttssh2-commit メーリングリストの案内
Back to archive index