GetSysInfo.h
上传用户:cjw5120
上传日期:2022-05-11
资源大小:5032k
文件大小:10k
源码类别:

网络截获/分析

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "windows.h"
  3. #include "GetHDSerial.h"
  4. #define BUFSIZE 16
  5. /*
  6.  作者:海啸 lyyer English Name: Jack 
  7.   blog:http://lyyer.blog.sohu.com
  8.   website:http://www.cnGSG.com
  9.   海啸网络安全组织
  10. */
  11. bool GetClientSystemInfo(SYSTEMINIT& sysinfo)
  12. {
  13. /////get computer name///////
  14. TCHAR computerbuf[256];
  15. DWORD computersize=256;
  16. memset(computerbuf,0,256);
  17. if(!GetComputerName(computerbuf,&computersize))
  18. return false;
  19. computerbuf[computersize]=0;
  20. sysinfo.computer[0]=0;
  21. //strcat(sysinfo.computer,"计算机: ");
  22. strcat(sysinfo.computer,computerbuf);
  23. ///////get user name/////////
  24. TCHAR userbuf[256];
  25. DWORD usersize=256;
  26. memset(userbuf,0,256);
  27. if(!GetUserName(userbuf,&usersize))
  28. return false;
  29. userbuf[usersize]=0;
  30. sysinfo.user[0]=0;
  31. strcat(sysinfo.user,"用户名: ");
  32. strcat(sysinfo.user,userbuf);
  33. ///////get version//////////
  34. OSVERSIONINFOEX osvi;
  35. BOOL bOsVersionInfoEx;
  36. /*   
  37. char tmp[16]={0};    
  38. //memset(sysinfo.os,0,sizeof(sysinfo.os));
  39. sysinfo.os[0]=0;
  40. // Try calling GetVersionEx using the OSVERSIONINFOEX structure.
  41. // If that fails, try using the OSVERSIONINFO structure.
  42. ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
  43. osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
  44. if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
  45. {
  46. osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
  47. if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) 
  48. return FALSE;
  49. }
  50. switch (osvi.dwPlatformId)
  51. {
  52. // Test for the Windows NT product family.
  53. case VER_PLATFORM_WIN32_NT:
  54. // Test for the specific product family.
  55. if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
  56. strcpy(sysinfo.os,"Microsoft Windows Server 2003 family, ");
  57. if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
  58. strcpy(sysinfo.os,"Microsoft Windows XP ");
  59. if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
  60. strcpy(sysinfo.os,"Microsoft Windows 2000 ");
  61. if ( osvi.dwMajorVersion <= 4 )
  62. strcpy(sysinfo.os,"Microsoft Windows NT ");
  63. // Test for specific product on Windows NT 4.0 SP6 and later.
  64. if( bOsVersionInfoEx )
  65. {
  66. // Test for the workstation type.
  67. if ( osvi.wProductType == VER_NT_WORKSTATION )
  68. {
  69. if( osvi.dwMajorVersion == 4 )
  70. strcat(sysinfo.os, "Workstation 4.0 " );
  71. else if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
  72. strcat(sysinfo.os, "Home Edition " );
  73. else
  74. strcat(sysinfo.os,  "Professional " );
  75. }
  76. // Test for the server type.
  77. else if ( osvi.wProductType == VER_NT_SERVER )
  78. {
  79. if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
  80. {
  81. if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
  82. strcat(sysinfo.os, "Datacenter Edition " );
  83. else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
  84. strcat(sysinfo.os, "Enterprise Edition " );
  85. else if ( osvi.wSuiteMask == VER_SUITE_BLADE )
  86. strcat(sysinfo.os, "Web Edition " );
  87. else
  88. strcat(sysinfo.os, "Standard Edition " );
  89. }
  90. else if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
  91. {
  92. if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
  93. strcat(sysinfo.os, "Datacenter Server " );
  94. else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
  95. strcat(sysinfo.os, "Advanced Server " );
  96. else
  97. strcat(sysinfo.os, "Server " );
  98. }
  99. else  // Windows NT 4.0 
  100. {
  101. if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
  102. strcat(sysinfo.os,"Server 4.0, Enterprise Edition " );
  103. else
  104. strcat(sysinfo.os, "Server 4.0 " );
  105. }
  106. }
  107. }
  108. else  // Test for specific product on Windows NT 4.0 SP5 and earlier
  109. {
  110. HKEY hKey;
  111. char szProductType[BUFSIZE];
  112. DWORD dwBufLen=BUFSIZE;
  113. LONG lRet;
  114. lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
  115. "SYSTEM\CurrentControlSet\Control\ProductOptions",
  116. 0, KEY_QUERY_VALUE, &hKey );
  117. if( lRet != ERROR_SUCCESS )
  118. return FALSE;
  119. lRet = RegQueryValueEx( hKey, "ProductType", NULL, NULL,
  120. (LPBYTE) szProductType, &dwBufLen);
  121. if( (lRet != ERROR_SUCCESS) || (dwBufLen > BUFSIZE) )
  122. return FALSE;
  123. RegCloseKey( hKey );
  124. if ( lstrcmpi( "WINNT", szProductType) == 0 )
  125. strcat(sysinfo.os, "Workstation " );
  126. if ( lstrcmpi( "LANMANNT", szProductType) == 0 )
  127. strcat(sysinfo.os, "Server " );
  128. if ( lstrcmpi( "SERVERNT", szProductType) == 0 )
  129. strcat(sysinfo.os,"Advanced Server " );
  130. printf( "%d.%d ", osvi.dwMajorVersion, osvi.dwMinorVersion );
  131. }
  132. // Display service pack (if any) and build number.
  133. if( osvi.dwMajorVersion == 4 && 
  134. lstrcmpi( osvi.szCSDVersion, "Service Pack 6" ) == 0 )
  135. {
  136. HKEY hKey;
  137. LONG lRet;
  138. // Test for SP6 versus SP6a.
  139. lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
  140. "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Hotfix\Q246009",
  141. 0, KEY_QUERY_VALUE, &hKey );
  142. if( lRet == ERROR_SUCCESS )
  143. {
  144.     sprintf( tmp,"Service Pack 6a (Build %d)n", osvi.dwBuildNumber & 0xFFFF ); 
  145. strcat(sysinfo.os, tmp );
  146. }
  147. else // Windows NT 4.0 prior to SP6a
  148. {
  149. sprintf( tmp,"%s (Build %d)n",
  150. osvi.szCSDVersion,
  151. osvi.dwBuildNumber & 0xFFFF);
  152.                 strcat(sysinfo.os, tmp );
  153. }
  154. RegCloseKey( hKey );
  155. }
  156. else // Windows NT 3.51 and earlier or Windows 2000 and later
  157. {
  158. sprintf(tmp, "%s (Build %d)n",
  159. osvi.szCSDVersion,
  160. osvi.dwBuildNumber & 0xFFFF);
  161. strcat(sysinfo.os, tmp );
  162. }
  163. break;
  164. // Test for the Windows 95 product family.
  165. case VER_PLATFORM_WIN32_WINDOWS:
  166. if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
  167. {
  168. strcpy(sysinfo.os,"Microsoft Windows 95 ");
  169. if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )
  170. strcat(sysinfo.os,"OSR2 " );
  171. if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
  172. {
  173. strcpy(sysinfo.os,"Microsoft Windows 98 ");
  174. if ( osvi.szCSDVersion[1] == 'A' )
  175. strcat(sysinfo.os,"SE " );
  176. if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
  177. {
  178. strcpy(sysinfo.os,"Microsoft Windows Millennium Editionn");
  179. break;
  180. case VER_PLATFORM_WIN32s:
  181. printf ("Microsoft Win32sn");
  182. break;
  183. }
  184. */
  185. OSVERSIONINFOEX   osviex;
  186.     sysinfo.os[0]=0;
  187. memset(&osviex,0,sizeof(OSVERSIONINFOEX));
  188. osviex.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
  189. if(GetVersionEx((LPOSVERSIONINFO)&osviex)==0)
  190. {
  191. //OutputDebugString("GetVersionEx Error: %dn",GetLastError());
  192. OutputDebugString("GetVersionEx Error");
  193. return FALSE;
  194. }
  195. switch(osviex.dwPlatformId)
  196. {
  197. case VER_PLATFORM_WIN32_NT:
  198. switch(osviex.dwMajorVersion)
  199. {
  200. case 4:
  201. if(osviex.dwMinorVersion == 0)
  202.                strcat(sysinfo.os,"Microsoft Windows NT 4");
  203. break;
  204. case 5:
  205. if(osviex.dwMinorVersion == 0)
  206. {
  207.                 strcat(sysinfo.os,"Microsoft Windows 2000 ");
  208. }
  209. else if(osviex.dwMinorVersion == 1)
  210. {
  211. strcat(sysinfo.os,"Windows XP ");
  212. }
  213. else if(osviex.dwMinorVersion == 2)
  214. {
  215.                strcat(sysinfo.os,"Windows 2003 ");
  216. }
  217. }
  218. break;
  219. }
  220.   //*/
  221. /*
  222. ///////////get disk space/////////////
  223. sysinfo.disk[0]=0;
  224. //strcat(sysinfo.disk,"磁盘空间: ");
  225. DWORD maskdriver;
  226. ULONGLONG totalspace=0,freespace=0;
  227. ULONGLONG ulltotalspace,ullfreespace,freebyte;
  228. DWORD drivertype;
  229. char driver[10];
  230. if(!(maskdriver=GetLogicalDrives()))
  231. return false;
  232. for(int i=0;i<26;i++)
  233. {
  234. if(!(maskdriver>>i))
  235. break;
  236. if(maskdriver>>i&1)
  237. {
  238. driver[0]=i+'A';
  239. driver[1]=':';
  240. driver[2]='\';
  241. driver[3]=0;
  242. drivertype=GetDriveType(driver);
  243. if(drivertype!=DRIVE_FIXED)
  244. continue;
  245. if(!GetDiskFreeSpaceEx (driver,
  246. (PULARGE_INTEGER)&freebyte,
  247. (PULARGE_INTEGER)&ulltotalspace,
  248. (PULARGE_INTEGER)&ullfreespace))
  249. return false;
  250. totalspace+=ulltotalspace;
  251. freespace+=ullfreespace;
  252. }
  253. }
  254. signed __int64 dfreespace=0.0,dtotalspace=0.0,lv;
  255. dfreespace=(signed __int64)freespace/(1024*1024*1024);
  256. dtotalspace=(signed __int64)totalspace/(1024*1024*1024);
  257. lv=(signed __int64)freespace/totalspace*100;
  258. char space[256];
  259. sprintf(space,"总磁盘空间为:%.2fG,剩余磁盘空间为:%.2fG(占%.2f%c)",dtotalspace,dfreespace,lv,'%');
  260. strcat(sysinfo.disk,space);
  261. */
  262. //////////////////get HardDisk serial /////////////////////////////////////////
  263. char *temp;
  264. sysinfo.HDSerial[0]=0;
  265.     CGetHDSerial HDSerial;  // 创建实例   
  266.     temp=HDSerial.GetHDSerial(); // 得到硬盘序列号    
  267.     strcat(sysinfo.HDSerial,temp);
  268. ////////////////get cpu info//////////////////
  269. sysinfo.processor[0]=0;
  270. //strcat(sysinfo.processor,"CPU: ");
  271. HKEY hKey;
  272. char szcpuinfo[80];
  273. DWORD dwBufLen=80;
  274. RegOpenKeyEx( HKEY_LOCAL_MACHINE,
  275.    "HARDWARE\DESCRIPTION\System\CentralProcessor\0",
  276.    0, KEY_QUERY_VALUE, &hKey );
  277. RegQueryValueEx( hKey, "VendorIdentifier", NULL, NULL,
  278.    (LPBYTE)szcpuinfo, &dwBufLen);
  279. szcpuinfo[dwBufLen]=0;
  280. //strcat(sysinfo.processor,szcpuinfo);
  281. //strcat(sysinfo.processor," ");
  282. memset(szcpuinfo,0,80);
  283. dwBufLen=80;
  284. RegQueryValueEx( hKey, "Identifier", NULL, NULL,
  285.    (LPBYTE)szcpuinfo, &dwBufLen);
  286. szcpuinfo[dwBufLen]=0;
  287. //strcat(sysinfo.processor,szcpuinfo);
  288. DWORD f;
  289. dwBufLen=8;
  290. RegQueryValueEx( hKey, "~MHz", NULL, NULL,
  291.    (LPBYTE)&f, &dwBufLen);
  292. char hz[10];
  293. sprintf(hz," %dMHZ",f);
  294. strcat(sysinfo.processor,hz);
  295. RegCloseKey(hKey);
  296. /////////////get mem size////////////
  297. MEMORYSTATUS ms;
  298. GlobalMemoryStatus(&ms);
  299. char membuf[256];//物理内存: 
  300. // sprintf(membuf,"总物理内存:%dMB,可用内存:%dMB (占%.2f%s)",ms.dwTotalPhys/1024/1024,ms.dwAvailPhys/1024/1024
  301. // ,(double)ms.dwAvailPhys/ms.dwTotalPhys*100,"%");
  302.     sprintf(membuf,"%dMB",ms.dwTotalPhys/1024/1024);
  303. sysinfo.mem[0]=0;
  304. strcpy(sysinfo.mem,membuf);
  305. return true;
  306. }