일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 |
[GGG] 정확한 OS 종류를 판단하는 것은 무척 중요한 일 입니다. 이 문서에 포함된 함수들은 VerifyVersion과 GetVersionEx함수를 사용하여 정확한 OS 종류를 판단합니다. 제공되는 함수는 아래와 같습니다. 각각의 함수가 판별하는 OS는 주석을 참고 하십시요. [CPP]BOOL WINAPI IsWin95() // 윈도우 95[CPP]#ifndef GETPROC #define GETPROC(dll, type, name) (type)GetProcAddress(dll, name) #endif typedef BOOL (WINAPI *fnVerifyVersionInfo)(LPOSVERSIONINFOEX, DWORD, DWORDLONG); typedef ULONGLONG (WINAPI *fnVerSetConditionMask)(ULONGLONG, DWORD, BYTE); BOOL _VerifyVersionInfo(LPOSVERSIONINFOEX lpVersionInfo , DWORD dwTypeMask , DWORDLONG dwConditionMask , BOOL *bVerified) { BOOL bRet = FALSE; HINSTANCE hDll = NULL; fnVerifyVersionInfo FVerifyVersionInfo; fnVerSetConditionMask FVerSetConditionMask; hDll = LoadLibrary("kernel32.dll"); if(hDll != NULL) { FVerifyVersionInfo = GETPROC(hDll , fnVerifyVersionInfo , "VerifyVersionInfoA"); FVerSetConditionMask = GETPROC(hDll , fnVerSetConditionMask , "VerSetConditionMask"); if(FVerifyVersionInfo != NULL && FVerSetConditionMask != NULL) { dwConditionMask = 0; if(dwTypeMask & VER_MAJORVERSION) dwConditionMask = FVerSetConditionMask(dwConditionMask , VER_MAJORVERSION , VER_EQUAL); if(dwTypeMask & VER_MINORVERSION) dwConditionMask = FVerSetConditionMask(dwConditionMask , VER_MINORVERSION , VER_EQUAL); if(dwTypeMask & VER_PLATFORMID) dwConditionMask = FVerSetConditionMask(dwConditionMask , VER_PLATFORMID , VER_EQUAL); if(dwTypeMask & VER_PRODUCT_TYPE) dwConditionMask = FVerSetConditionMask(dwConditionMask , VER_PRODUCT_TYPE , VER_EQUAL); *bVerified = FVerifyVersionInfo(lpVersionInfo , dwTypeMask , dwConditionMask); bRet = TRUE; } FreeLibrary(hDll); } return bRet; } BOOL WINAPI IsWin95() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 4; osi.dwMinorVersion = 0; osi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS; bRet = _VerifyVersionInfo(&osi , VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 4) && (osi.dwMinorVersion == 0) && (osi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (osi.szCSDVersion[1] != 'C'); } BOOL WINAPI IsWin95OSR2() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 4; osi.dwMinorVersion = 0; osi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS; bRet = _VerifyVersionInfo(&osi , VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 4) && (osi.dwMinorVersion == 0) && (osi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (osi.szCSDVersion[1] == 'C'); } BOOL WINAPI IsWin98() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 4; osi.dwMinorVersion = 10; osi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS; bRet = _VerifyVersionInfo(&osi , VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 4) && (osi.dwMinorVersion == 10) && (osi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (osi.szCSDVersion[1] != 'A'); } BOOL WINAPI IsWin98SE() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 4; osi.dwMinorVersion = 10; osi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS; bRet = _VerifyVersionInfo(&osi , VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 4) && (osi.dwMinorVersion == 10) && (osi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (osi.szCSDVersion[1] == 'A'); } BOOL WINAPI IsWinME() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 4; osi.dwMinorVersion = 90; osi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS; bRet = _VerifyVersionInfo(&osi , VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 4) && (osi.dwMinorVersion == 90) && (osi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS); } BOOL WINAPI IsWin9X() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS; bRet = _VerifyVersionInfo(&osi, VER_PLATFORMID, dwlConditionMask, &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return osi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS; } BOOL WINAPI IsWinNT4() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 4; osi.dwMinorVersion = 0; osi.dwPlatformId = VER_PLATFORM_WIN32_NT; bRet = _VerifyVersionInfo(&osi , VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 4) && (osi.dwMinorVersion == 0) && (osi.dwPlatformId == VER_PLATFORM_WIN32_NT); } BOOL WINAPI IsWin2K() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 5; osi.dwMinorVersion = 0; osi.dwPlatformId = VER_PLATFORM_WIN32_NT; bRet = _VerifyVersionInfo(&osi , VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 5) && (osi.dwMinorVersion == 0) && (osi.dwPlatformId == VER_PLATFORM_WIN32_NT); } BOOL WINAPI IsWinXP() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 5; osi.dwMinorVersion = 1; osi.dwPlatformId = VER_PLATFORM_WIN32_NT; bRet = _VerifyVersionInfo(&osi , VER_MAJORVERSION | VER_MINORVERSION | VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 5) && (osi.dwMinorVersion == 1) && (osi.dwPlatformId == VER_PLATFORM_WIN32_NT) && (osi.wProductType == VER_NT_WORKSTATION); } BOOL WINAPI IsWinNET() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwMajorVersion = 5; osi.dwMinorVersion = 1; osi.wProductType = VER_NT_WORKSTATION; osi.dwPlatformId = VER_PLATFORM_WIN32_NT; DWORD type = VER_MAJORVERSION | VER_MINORVERSION | VER_PRODUCT_TYPE | VER_PLATFORMID; bRet = _VerifyVersionInfo(&osi, type, dwlConditionMask, &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return (osi.dwMajorVersion == 5) && (osi.dwMinorVersion == 1) && (osi.dwPlatformId == VER_PLATFORM_WIN32_NT) && (osi.wProductType != VER_NT_WORKSTATION); } BOOL WINAPI IsWinNT() { OSVERSIONINFOEX osi; DWORDLONG dwlConditionMask = 0; BOOL bRet = FALSE; BOOL bVerified = FALSE; ZeroMemory(&osi, sizeof(OSVERSIONINFOEX)); osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osi.dwPlatformId = VER_PLATFORM_WIN32_NT; bRet = _VerifyVersionInfo(&osi , VER_PLATFORMID , dwlConditionMask , &bVerified); if(bRet == TRUE) return bVerified; osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) { osi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(GetVersionEx((OSVERSIONINFO *) &osi) == 0) return 0; } return osi.dwPlatformId == VER_PLATFORM_WIN32_NT; }[/CPP] |