none
Funktion GetVersionEx RRS feed

  • Frage

  • Hallo an alle,

    ich verwende seit Jahren die Klasse CSysInfo von Alexey Kazakovsky. Zur Zeit passe ich meine Anwendung an VS 2013 an und bekomme dabei diese Warnung

    warning C4996: 'GetVersionExW': wurde als veraltet deklariert

    an dieser Stelle im Programmcode

    GetVersionEx((LPOSVERSIONINFO)&v);

    Hier der Programmcode:

    void CSysInfo::DetectOSType()
    {
    	BOOL bOSINFOEXWorking=FALSE;
    
    	OSVERSIONINFO v;
    	ZeroMemory(&v,sizeof(OSVERSIONINFO));
    	v.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
    	GetVersionEx((LPOSVERSIONINFO)&v); // <---------------------- hier 
    
    	m_dwWinMajor=v.dwMajorVersion;
    	m_dwWinMinor=v.dwMinorVersion;
    	m_dwBuildNumber=v.dwBuildNumber;
    
    	if (!IsWindowsNT())
    	{
    		// Windows 9x/ME.
    		if (m_dwWinMinor==0)  { m_sOSType=_T(W95_s); };
    		if (m_dwWinMinor==10) { m_sOSType=_T(W98_s); };
    		if (m_dwWinMinor==90) { m_sOSType=_T(WME_s); };
    		m_sOSType+=v.szCSDVersion;
    		return;
    	};
    
    	// Get Service Pack number
    	int n=0,j=-1; CString sSvcPack; TCHAR szNum[10];
    	sSvcPack=v.szCSDVersion;
    	for (n=1;n<=9;n++) {
    // VS60		_stprintf(szNum,_T("%d"),n);
    		_stprintf_s(szNum,_T("%d"),n);
    		j=sSvcPack.Find(szNum);
    		if (j>=0) break;
    	};
    	if (j>=0) m_dwServicePack=n;
    
    	// Check for OSVERSIONINFOEX-compatibility
    	// It works only on Windows NT 4.0 Service Pack 6 or better
    	if ((m_dwWinMajor>=5) || (m_dwServicePack>=6))
    		{ bOSINFOEXWorking=TRUE; };
    
    	if (m_dwWinMajor==4)
    	{
    		// Windows NT 4.0
    		m_sOSType=_T(NT4_s);
    	}
    	else
    	{
    		if (m_dwWinMajor>=5)
    		{
    			if (m_dwWinMinor==0) { m_sOSType=_T(W2K_s); };  // Windows 2000
    			if (m_dwWinMinor==1) { m_sOSType=_T(WXP_s); };  // Windows XP
    		};
    	};
    
    	if (bOSINFOEXWorking)
    	{
    		MYOSVERSIONINFOEX osvi;
    		BOOL bOsVersionInfoEx;
    		ZeroMemory(&osvi,sizeof(MYOSVERSIONINFOEX));
    		osvi.dwOSVersionInfoSize = sizeof(MYOSVERSIONINFOEX);
    		bOsVersionInfoEx=GetVersionEx((LPOSVERSIONINFO)&osvi);
    
    		if (bOsVersionInfoEx)
    		{
    			if (osvi.wProductType==MY_VER_NT_WORKSTATION)
    			{
    				if ((osvi.dwMajorVersion==5) && (osvi.dwMinorVersion==1))
    				{
    					// Windows XP
    					if (osvi.wSuiteMask & MY_VER_SUITE_PERSONAL)
    						{ m_sOSType+=_T(XHE_s); }
    					else
    						{ m_sOSType+=_T(XPR_s); };
    				};
    
    				if ((osvi.dwMajorVersion==5) && (osvi.dwMinorVersion==0))
    				{
    					// Windows 2000 Professional
    					m_sOSType+=_T(PRO_s);
    				};
    
    				if (osvi.dwMajorVersion==4)
    				{
    					// Windows NT 4.0 Workstation
    					m_sOSType+=_T(WKS_s);
    				};
    			};
    
    			if ((osvi.wProductType==MY_VER_NT_SERVER) || (osvi.wProductType==MY_VER_NT_DOMAIN_CONTROLLER))
    			{
    				if (osvi.dwMajorVersion==5)
    				{
    					if (osvi.wSuiteMask & MY_VER_SUITE_ENTERPRISE) { m_sOSType+=_T(ADV_s); };
    					if (osvi.wSuiteMask & MY_VER_SUITE_DATACENTER) { m_sOSType+=_T(DTC_s); };
    					if (osvi.wSuiteMask & MY_VER_SUITE_TERMINAL) { m_sOSType+=_T(TER_s); };
    					if (osvi.wSuiteMask & MY_VER_SUITE_BACKOFFICE) { m_sOSType+=_T(BOF_s); };
    					m_sOSType+=_T(SER_s);
    				};
    				if (osvi.dwMajorVersion==4 && osvi.dwMinorVersion==0) { m_sOSType+=_T(SER_s); };
    			};
    
    			if (osvi.wProductType==MY_VER_NT_DOMAIN_CONTROLLER)
    				{ m_sOSType+=_T(DOM_s); };
    		};
    	};
    
    	if (m_dwServicePack>0)
    	{
    		m_sOSType+=_T(" ");
    		m_sOSType+=v.szCSDVersion;
    	};
    }
    

    Hierbei bin ich völlig ratlos was zu tun ist.

    Wie kann ich die Funktion GetVersionEx korrekt verwenden oder wie kann ich sie ersetzen?

    Danke im Voraus und viele Grüße

    Bernd

    Freitag, 13. April 2018 07:47

Antworten

Alle Antworten