• R/O
  • SSH
  • HTTPS

ttssh2: Commit


Commit MetaInfo

Revision10123 (tree)
Time2022-08-05 00:14:45
Authorzmatsuo

Log Message

GetVersionExA() を直接使用するのをやめた

- warning C4996: 'GetVersionExA': が古い形式として宣言されました。
- /sdl オプションをつけるとエラーとなっていた

- error C4996: 'GetVersionExA': が古い形式として宣言されました。
- /sdl = Enable Additional Security Checks

Change Summary

Incremental Difference

--- branches/heap_assert/teraterm/common/compat_win.cpp (revision 10122)
+++ branches/heap_assert/teraterm/common/compat_win.cpp (revision 10123)
@@ -65,6 +65,7 @@
6565 static BOOL (WINAPI *pVerifyVersionInfoA)(LPOSVERSIONINFOEXA lpVersionInformation, DWORD dwTypeMask, DWORDLONG dwlConditionMask);
6666 BOOL (WINAPI *pSetDefaultDllDirectories)(DWORD DirectoryFlags);
6767 BOOL (WINAPI *pSetDllDirectoryA)(LPCSTR lpPathName);
68+static BOOL (WINAPI *pGetVersionExA)(LPOSVERSIONINFOA lpVersionInformation);
6869
6970 // gdi32
7071 int (WINAPI *pAddFontResourceExW)(LPCWSTR name, DWORD fl, PVOID res);
@@ -263,11 +264,47 @@
263264 {},
264265 };
265266
267+/* OS version with GetVersionEx(*1)
268+
269+ dwMajorVersion dwMinorVersion dwPlatformId
270+Windows95 4 0 VER_PLATFORM_WIN32_WINDOWS
271+Windows98 4 10 VER_PLATFORM_WIN32_WINDOWS
272+WindowsMe 4 90 VER_PLATFORM_WIN32_WINDOWS
273+WindowsNT4.0 4 0 VER_PLATFORM_WIN32_NT
274+Windows2000 5 0 VER_PLATFORM_WIN32_NT
275+WindowsXP 5 1 VER_PLATFORM_WIN32_NT
276+WindowsXPx64 5 2 VER_PLATFORM_WIN32_NT
277+WindowsVista 6 0 VER_PLATFORM_WIN32_NT
278+Windows7 6 1 VER_PLATFORM_WIN32_NT
279+Windows8 6 2 VER_PLATFORM_WIN32_NT
280+Windows8.1(*2) 6 2 VER_PLATFORM_WIN32_NT
281+Windows8.1(*3) 6 3 VER_PLATFORM_WIN32_NT
282+Windows10(*2) 6 2 VER_PLATFORM_WIN32_NT
283+Windows10(*3) 10 0 VER_PLATFORM_WIN32_NT
284+
285+(*1) GetVersionEx()が c4996 warning となるのは、VS2013(_MSC_VER=1800) からです。
286+(*2) manifestに supportedOS Id を追加していない。
287+(*3) manifestに supportedOS Id を追加している。
288+*/
289+static BOOL _GetVersionExA(LPOSVERSIONINFOA lpVersionInformation)
290+{
291+ static OSVERSIONINFOA VersionInformation;
292+ if (pGetVersionExA == NULL) {
293+ // エラーが返ることはない (2022-08-04)
294+ VersionInformation = *lpVersionInformation;
295+ void **func = (void **) & pGetVersionExA;
296+ DLLGetApiAddress(L"kernel32.dll", DLL_LOAD_LIBRARY_SYSTEM, "GetVersionExA", func);
297+ pGetVersionExA(&VersionInformation);
298+ }
299+ *lpVersionInformation = VersionInformation;
300+ return TRUE;
301+}
302+
266303 static bool IsWindowsNTKernel()
267304 {
268305 OSVERSIONINFOA osvi;
269306 osvi.dwOSVersionInfoSize = sizeof(osvi);
270- GetVersionExA(&osvi);
307+ _GetVersionExA(&osvi);
271308 if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
272309 // Windows 9x
273310 return false;
@@ -281,7 +318,7 @@
281318 {
282319 OSVERSIONINFOA osvi;
283320 osvi.dwOSVersionInfoSize = sizeof(osvi);
284- GetVersionExA(&osvi);
321+ _GetVersionExA(&osvi);
285322 if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT &&
286323 osvi.dwMajorVersion == 4 &&
287324 osvi.dwMinorVersion == 0) {
@@ -401,7 +438,7 @@
401438 BOOL ret, check_next;
402439
403440 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA);
404- GetVersionExA(&osvi);
441+ _GetVersionExA(&osvi);
405442
406443 if (dwTypeMask & VER_BUILDNUMBER) {
407444 cond = (WORD)((dwlConditionMask >> (2*3)) & 0x07);
--- branches/heap_assert/teraterm/common/ttlib.c (revision 10122)
+++ branches/heap_assert/teraterm/common/ttlib.c (revision 10123)
@@ -44,29 +44,6 @@
4444 #include "compat_win.h"
4545 #include "codeconv.h"
4646
47-/* OS version with GetVersionEx(*1)
48-
49- dwMajorVersion dwMinorVersion dwPlatformId
50-Windows95 4 0 VER_PLATFORM_WIN32_WINDOWS
51-Windows98 4 10 VER_PLATFORM_WIN32_WINDOWS
52-WindowsMe 4 90 VER_PLATFORM_WIN32_WINDOWS
53-WindowsNT4.0 4 0 VER_PLATFORM_WIN32_NT
54-Windows2000 5 0 VER_PLATFORM_WIN32_NT
55-WindowsXP 5 1 VER_PLATFORM_WIN32_NT
56-WindowsXPx64 5 2 VER_PLATFORM_WIN32_NT
57-WindowsVista 6 0 VER_PLATFORM_WIN32_NT
58-Windows7 6 1 VER_PLATFORM_WIN32_NT
59-Windows8 6 2 VER_PLATFORM_WIN32_NT
60-Windows8.1(*2) 6 2 VER_PLATFORM_WIN32_NT
61-Windows8.1(*3) 6 3 VER_PLATFORM_WIN32_NT
62-Windows10(*2) 6 2 VER_PLATFORM_WIN32_NT
63-Windows10(*3) 10 0 VER_PLATFORM_WIN32_NT
64-
65-(*1) GetVersionEx()が c4996 warning となるのは、VS2013(_MSC_VER=1800) からです。
66-(*2) manifestに supportedOS Id を追加していない。
67-(*3) manifestに supportedOS Id を追加している。
68-*/
69-
7047 // for isInvalidFileNameChar / replaceInvalidFileNameChar
7148 static char *invalidFileNameChars = "\\/:*?\"<>|";
7249
@@ -925,6 +902,11 @@
925902 OutputDebugStringA(tmp);
926903 }
927904
905+// 各バージョンチェックは直値にできるかもしれない
906+// 例
907+// VS2013でビルドしたプログラムは、そもそも NT4.0 では動作しないため、
908+// IsWindowsNT4() は常に FALSE を返す
909+
928910 // OSが WindowsNT カーネルかどうかを判別する。
929911 //
930912 // return TRUE: NT kernel
@@ -959,9 +941,6 @@
959941 // OSが WindowsNT4.0 かどうかを判別する。
960942 BOOL IsWindowsNT4()
961943 {
962- // VS2013以上だと GetVersionEx() が警告となるため、VerifyVersionInfo() を使う。
963- // しかし、VS2013でビルドしたプログラムは、そもそも NT4.0 では動作しないため、
964- // 無条件に FALSE を返してもよいかもしれない。
965944 return IsWindowsVer(VER_PLATFORM_WIN32_NT, 4, 0);
966945 }
967946
Show on old repository browser