• R/O
  • SSH
  • HTTPS

ttssh2: Commit


Commit MetaInfo

Revision6686 (tree)
Time2017-04-14 16:07:34
Author(del#1144)

Log Message

Windows バージョン判定関数をリファクタリング

Change Summary

Incremental Difference

--- trunk/teraterm/common/ttlib.c (revision 6685)
+++ trunk/teraterm/common/ttlib.c (revision 6686)
@@ -1203,11 +1203,8 @@
12031203 return pVerSetConditionMask(dwlConditionMask, dwTypeBitMask, dwConditionMask);
12041204 }
12051205
1206-// OSが Windows95 かどうかを判別する。
1207-//
1208-// return TRUE: 95
1209-// FALSE: Not 95
1210-BOOL IsWindows95()
1206+// OSが 指定されたバージョンと等しい かどうかを判別する。
1207+BOOL IsWindowsVer(DWORD dwPlatformId, DWORD dwMajorVersion, DWORD dwMinorVersion)
12111208 {
12121209 OSVERSIONINFOEX osvi;
12131210 DWORDLONG dwlConditionMask = 0;
@@ -1216,9 +1213,9 @@
12161213
12171214 ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
12181215 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
1219- osvi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS;
1220- osvi.dwMajorVersion = 4;
1221- osvi.dwMinorVersion = 0;
1216+ osvi.dwPlatformId = dwPlatformId;
1217+ osvi.dwMajorVersion = dwMajorVersion;
1218+ osvi.dwMinorVersion = dwMinorVersion;
12221219 dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_PLATFORMID, op);
12231220 dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_MAJORVERSION, op);
12241221 dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_MINORVERSION, op);
@@ -1226,10 +1223,30 @@
12261223 return (ret);
12271224 }
12281225
1226+// OSが 指定されたバージョン以降 かどうかを判別する。
1227+// dwPlatformId を見ていないので NT カーネル内でしか比較できない
1228+// 5.0 以上で比較すること
1229+BOOL IsWindowsVerOrLater(DWORD dwMajorVersion, DWORD dwMinorVersion)
1230+{
1231+ OSVERSIONINFOEX osvi;
1232+ DWORDLONG dwlConditionMask = 0;
1233+ int op = VER_GREATER_EQUAL;
1234+ BOOL ret;
1235+
1236+ ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
1237+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
1238+ osvi.dwMajorVersion = dwMajorVersion;
1239+ osvi.dwMinorVersion = dwMinorVersion;
1240+ dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_MAJORVERSION, op);
1241+ dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_MINORVERSION, op);
1242+ ret = myVerifyVersionInfo(&osvi, VER_MAJORVERSION | VER_MINORVERSION, dwlConditionMask);
1243+ return (ret);
1244+}
1245+
12291246 // OSが WindowsNT カーネルかどうかを判別する。
12301247 //
12311248 // return TRUE: NT kernel
1232-// FALSE: Not NT4 kernel
1249+// FALSE: Not NT kernel
12331250 BOOL IsWindowsNTKernel()
12341251 {
12351252 OSVERSIONINFOEX osvi;
@@ -1245,13 +1262,16 @@
12451262 return (ret);
12461263 }
12471264
1265+// OSが Windows95 かどうかを判別する。
1266+BOOL IsWindows95()
1267+{
1268+ return IsWindowsVer(VER_PLATFORM_WIN32_WINDOWS, 4, 0);
1269+}
1270+
12481271 // OSが WindowsNT4.0 かどうかを判別する。
1249-//
1250-// return TRUE: NT4.0
1251-// FALSE: Not NT4.0
12521272 BOOL IsWindowsNT4()
12531273 {
1254- return is_NT4();
1274+ return IsWindowsVer(VER_PLATFORM_WIN32_NT, 4, 0);
12551275 }
12561276
12571277 BOOL is_NT4()
@@ -1259,40 +1279,9 @@
12591279 // VS2013以上だと GetVersionEx() が警告となるため、VerifyVersionInfo() を使う。
12601280 // しかし、VS2013でビルドしたプログラムは、そもそも NT4.0 では動作しないため、
12611281 // 無条件に FALSE を返してもよいかもしれない。
1262- OSVERSIONINFOEX osvi;
1263- DWORDLONG dwlConditionMask = 0;
1264- int op = VER_EQUAL;
1265- BOOL ret;
1266-
1267- ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
1268- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
1269- osvi.dwPlatformId = VER_PLATFORM_WIN32_NT;
1270- osvi.dwMajorVersion = 4;
1271- dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_PLATFORMID, op);
1272- dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_MAJORVERSION, op);
1273- ret = myVerifyVersionInfo(&osvi, VER_PLATFORMID | VER_MAJORVERSION, dwlConditionMask);
1274- return (ret);
1282+ return IsWindowsVer(VER_PLATFORM_WIN32_NT, 4, 0);
12751283 }
12761284
1277-// OSが 指定されたバージョン以降 かどうかを判別する。
1278-
1279-BOOL IsWindowsVerOrLater(DWORD dwMajorVersion, DWORD dwMinorVersion)
1280-{
1281- OSVERSIONINFOEX osvi;
1282- DWORDLONG dwlConditionMask = 0;
1283- int op = VER_GREATER_EQUAL;
1284- BOOL ret;
1285-
1286- ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
1287- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
1288- osvi.dwMajorVersion = dwMajorVersion;
1289- osvi.dwMinorVersion = dwMinorVersion;
1290- dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_MAJORVERSION, op);
1291- dwlConditionMask = myVerSetConditionMask(dwlConditionMask, VER_MINORVERSION, op);
1292- ret = myVerifyVersionInfo(&osvi, VER_MAJORVERSION | VER_MINORVERSION, dwlConditionMask);
1293- return (ret);
1294-}
1295-
12961285 // OSが Windows2000 以降 かどうかを判別する。
12971286 //
12981287 // return TRUE: 2000 or later
Show on old repository browser