#define SALFDELETE(pValue) /
if(pValue) /
delete[] pValue; /
pValue = NULL;
struct strSysInfo
{
DWORD dwCPUNumber;
wchar_t *pArchitecture;
wchar_t *pProcessLevel;
wchar_t *pPrcessVersion;
DWORD dwPageSize;
DWORD dwAlloc;
void *pAppMinAddress;
void *pAppMaxAddress;
};
int _tmain(int argc, _TCHAR* argv[])
{
SYSTEM_INFO mySysInfo;
strSysInfo sysInfo;
memset(&sysInfo, 0, sizeof(sysInfo));
GetSystemInfo(&mySysInfo);
// CPU 特征
switch (mySysInfo.wProcessorArchitecture)
{
case PROCESSOR_ARCHITECTURE_INTEL:
{
wchar_t *pArchitecture = L"Intel ";
sysInfo.pArchitecture = new wchar_t[wcslen(pArchitecture) + 1];
wcscpy(sysInfo.pArchitecture, pArchitecture);
sysInfo.pProcessLevel = new wchar_t[50];
sysInfo.pPrcessVersion = new wchar_t[50];
switch (mySysInfo.wProcessorLevel)
{
case 3:
case 4:
{
wsprintfW(sysInfo.pProcessLevel, L"80%c86", mySysInfo.wProcessorLevel + '0');
if (HIBYTE(mySysInfo.wProcessorRevision) == 0xFF)
{
wsprintfW(sysInfo.pPrcessVersion,
L"model number is %d, stepping identifier = %d",
LOBYTE(mySysInfo.wProcessorRevision) & 0xF0 - 0xA0,
LOBYTE(mySysInfo.wProcessorRevision) & 0x0F);
}
else
{
wsprintfW(sysInfo.pPrcessVersion,
L"stepping letter = %d, minor stepping = %d",
HIBYTE(mySysInfo.wProcessorRevision) + 'A',
LOBYTE(mySysInfo.wProcessorRevision)
);
}
break;
}
case 5:
{
wsprintfW(sysInfo.pProcessLevel, L"Pentium");
wsprintfW(sysInfo.pPrcessVersion,
L"model number = %d, stepping = %d",
HIBYTE(mySysInfo.wProcessorRevision),
LOBYTE(mySysInfo.wProcessorRevision)
);
break;
}
case 6:
{
wsprintfW(sysInfo.pProcessLevel, L"Pentium Pro, Pentium II or Above");
wsprintfW(sysInfo.pPrcessVersion,
L"model number = %d, stepping = %d",
HIBYTE(mySysInfo.wProcessorRevision),
LOBYTE(mySysInfo.wProcessorRevision)
);
break;
}
}
break;
}
case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64:
{
wchar_t *pArchitecture = L"intel x64, WIN64 Platform";
sysInfo.pArchitecture = new wchar_t[wcslen(pArchitecture) + 1];
wcscpy(sysInfo.pArchitecture, pArchitecture);
break;
}
case PROCESSOR_ARCHITECTURE_AMD64:
{
wchar_t *pArchitecture = L"AMD x64, WIN64 Platform";
sysInfo.pArchitecture = new wchar_t[wcslen(pArchitecture) + 1];
wcscpy(sysInfo.pArchitecture, pArchitecture);
break;
}
default:
{
wchar_t *pArchitecture = L"Unknown Or early CPU";
sysInfo.pArchitecture = new wchar_t[wcslen(pArchitecture) + 1];
wcscpy(sysInfo.pArchitecture, pArchitecture);
break;
}
}
sysInfo.dwCPUNumber = mySysInfo.dwNumberOfProcessors;
//内存特征
sysInfo.dwPageSize = mySysInfo.dwPageSize;
sysInfo.dwAlloc = mySysInfo.dwAllocationGranularity;
sysInfo.pAppMinAddress = mySysInfo.lpMinimumApplicationAddress;
sysInfo.pAppMinAddress = mySysInfo.lpMaximumApplicationAddress;
setlocale(LC_CTYPE, "");
wprintf(L"本机CPU特征:CPU数量 %d, %s, %s, %s, 内存特征: CPU页面大小%d, 内存分配粒度 %d, 应用程序开始地址 %p, 结束地址 %p /r/n",
sysInfo.dwCPUNumber, sysInfo.pArchitecture, sysInfo.pProcessLevel,
sysInfo.pPrcessVersion, sysInfo.dwPageSize, sysInfo.dwAlloc,
sysInfo.pAppMinAddress, sysInfo.pAppMaxAddress);
SALFDELETE(sysInfo.pArchitecture);
SALFDELETE(sysInfo.pPrcessVersion);
SALFDELETE(sysInfo.pProcessLevel);
getchar();
return 0;
}