Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

188 lines
4.4 KiB

/*
***************************************************************************
*
* Copyright (c) 1999 Microsoft Corporation
*
* Module Name: BugRepSysInfo.c
*
* Abstract : Gets language and OS information for bug reporting pages
*
*
* Revision History:
*
* 1999-09-30 : aarvind : Created the file, my first Windows program
*
***************************************************************************
*/
// BugRepSysInfo.cpp : Implementation of CBugRepSysInfo
#include "stdafx.h"
#include "Brp_sysinfo.h"
#include "BugRepSysInfo.h"
/////////////////////////////////////////////////////////////////////////////
// CBugRepSysInfo
static WORD GetLanguageFromFile(const TCHAR* pszFileName, const TCHAR* pszPath);
/*
***************************************************************************
*
* GetLanguageString
*
* Returns the language found from a file and using the user default
* settings
*
***************************************************************************
*/
STDMETHODIMP CBugRepSysInfo::GetLanguageID(INT *pintLanguage)
{
WORD wLanguage;
TCHAR szSystemPath[MAX_PATH];
// Get the original language from a system file.
if ( !GetSystemDirectory(szSystemPath, MAX_PATH))
{
//
// Handle failure of this function to get system directory
//
return E_FAIL ;
};
//
// Gets the language id, returns zero if a failure occurs
//
if (wLanguage = GetLanguageFromFile(TEXT("user.exe"), szSystemPath))
{
*pintLanguage = (INT) wLanguage ;
}
else {
//
// Handle failure of this function to get language or file information
//
return E_FAIL ;
}
return S_OK;
}
/*
***************************************************************************
*
* GetOSVersionString
*
* Gets the version information of the operating system
*
***************************************************************************
*/
STDMETHODIMP CBugRepSysInfo::GetOSVersionString(BSTR *pbstrOSVersion)
{
OSVERSIONINFO OSVersionInfo;
DWORD dwPlatformID;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
TCHAR szCSDVersion[200];
TCHAR szOSVersion[200];
USES_CONVERSION;
// Get Windows version
OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVersionInfo);
if ( GetVersionEx(&OSVersionInfo) )
{
dwMajorVersion = OSVersionInfo.dwMajorVersion;
dwMinorVersion = OSVersionInfo.dwMinorVersion;
dwBuildNumber = OSVersionInfo.dwBuildNumber;
dwPlatformID = OSVersionInfo.dwPlatformId;
lstrcpy(szCSDVersion, OSVersionInfo.szCSDVersion);
//
// Create system information string
//
wsprintf(szOSVersion,"%d.%d.%d %s",dwMajorVersion,dwMinorVersion,LOWORD(dwBuildNumber),szCSDVersion);
*pbstrOSVersion = SysAllocString(T2COLE(szOSVersion));
}
else {
//
// Function to get OS Version failed so do something
//
// Use GetLastError to return error code to script
//
return E_FAIL ;
}
return S_OK;
}
/*
***************************************************************************
*
* GetLanguageFromFile
*
***************************************************************************
*/
static WORD GetLanguageFromFile(const TCHAR* pszFileName, const TCHAR* pszPath)
{
BYTE FileVersionBuffer[4096];
DWORD *pdwCharSet;
UINT cb;
DWORD dwHandle;
TCHAR szFileAndPath[MAX_PATH];
WORD wLanguage;
lstrcpy(szFileAndPath, pszPath);
lstrcat(szFileAndPath, TEXT("\\"));
lstrcat(szFileAndPath, pszFileName);
memset(&FileVersionBuffer, 0, sizeof FileVersionBuffer);
//
// Set default language value
//
wLanguage = 0;
if (cb = GetFileVersionInfoSize(szFileAndPath, &dwHandle/*ignored*/))
{
cb = (cb <= sizeof FileVersionBuffer ? cb : sizeof FileVersionBuffer);
if (GetFileVersionInfo(szFileAndPath, 0, cb, &FileVersionBuffer))
{
pdwCharSet = 0;
if (VerQueryValue(&FileVersionBuffer, TEXT("\\VarFileInfo\\Translation"), (void**)&pdwCharSet, &cb)
&& pdwCharSet && cb)
{
wLanguage = LOWORD(*pdwCharSet);
}
}
}
return wLanguage;
}
STDMETHODIMP CBugRepSysInfo::GetUserDefaultLCID(DWORD *pdwLCID)
{
*pdwLCID = ::GetUserDefaultLCID();
return S_OK;
}
STDMETHODIMP CBugRepSysInfo::GetActiveCP(UINT *pnACP)
{
*pnACP = ::GetACP();
return S_OK;
}