¡¡¡¡ÔÚPEB½á¹¹Öдæ·Å×ŲÙ×÷ϵͳ°æ±¾ÐÅÏ¢µÄº¯Êý£¬
¡¡¡¡ULONG OSMajorVersion; // A4h Æ«ÒÆµØÖ·a4hÏÔʾ²Ù×÷ϵͳÖ÷°æ±¾ºÅ
¡¡¡¡ULONG OSMinorVersion; // A8h Æ«ÒÆµØÖ·a8hÏÔʾ²Ù×÷ϵͳ×Ó°æ±¾ºÅ
¡¡¡¡Í¨¹ý¶ÁÈ¡OSMajorVersionºÍOSMinorVersionµÄÊý¾ÝÄܹ»È·¶¨²Ù×÷ϵͳµÄ°æ±¾¡£
¡¡¡¡FS¶Î¼Ä´æÆ÷Ö¸Ïòµ±Ç°µÄTEB½á¹¹£¬ÔÚTEBÆ«ÒÆ0x30´¦ÊÇPEBÖ¸Õ룬ͨ¹ýÕâ¸öÖ¸Õë¿ÉÒÔÈ¡µÃ´æ·ÅÔÚPEBÖеÄÐÅÏ¢¡£
¡¡¡¡²»Í¬µÄ²Ù×÷ϵͳ£¬°æ±¾ÐÅÏ¢µÄ´æ·ÅµÄλÖÃÊDz»Í¬µÄ£¬ÆäÖÐ
¡¡¡¡2000 0X0500
¡¡¡¡XP 0X0501
¡¡¡¡2003 0X0502
¡¡¡¡VISTA 0X0600
¡¡¡¡Win7 0X0601
¡¡¡¡ÕâÑù¸ù¾ÝÕâЩÐÅÏ¢ÎÒÃÇ¿ÉÒÔͨ¹ý²»µ÷ÓÃAPIº¯ÊýÀ´»ñÈ¡²Ù×÷ϵͳµÄ°æ±¾ÐÅÏ¢¡£
¡¡¡¡void XXX::GetSystem£¨£©
¡¡¡¡{
¡¡¡¡int a=0,b=0,i=0,j=0;
¡¡¡¡_asm
¡¡¡¡{
¡¡¡¡pushad
¡¡¡¡mov ebx,fs:[0x18] ; get self pointer from TEB
¡¡¡¡mov eax,fs:[0x30] ; get pointer to PEB / database
¡¡¡¡mov ebx,[eax+0A8h] ; get OSMinorVersion
¡¡¡¡mov eax,[eax+0A4h] ; get OSMajorVersion
¡¡¡¡mov j,ebx
¡¡¡¡mov i,eax
¡¡¡¡popad
¡¡¡¡}
¡¡¡¡if£¨£¨i==5£©&&£¨j==0£©£©
¡¡¡¡{
¡¡¡¡AfxMessageBox£¨_T£¨"ϵͳ°æ±¾Îª Windows 2000"£©£¬MB_OK£©£»
¡¡¡¡}
¡¡¡¡else if£¨£¨i==5£©&&£¨j==1£©£©
¡¡¡¡{
¡¡¡¡AfxMessageBox£¨_T£¨"ϵͳ°æ±¾Îª Windows XP"£©£¬MB_OK£©£»
¡¡¡¡}
¡¡¡¡else if£¨£¨i==5£©&&£¨j==2£©£©
¡¡¡¡{
¡¡¡¡AfxMessageBox£¨_T£¨"ϵͳ°æ±¾Îª Windows 2003"£©£¬MB_OK£©£»
¡¡¡¡}
¡¡¡¡else if£¨£¨i==6£©&&£¨j==0£©£©
¡¡¡¡{
¡¡¡¡AfxMessageBox£¨_T£¨"ϵͳ°æ±¾Îª Windows Vista"£©£¬MB_OK£©£»
¡¡¡¡}
¡¡¡¡else if£¨£¨i==6£©&&£¨j==1£©£©
¡¡¡¡{
¡¡¡¡AfxMessageBox£¨_T£¨"ϵͳ°æ±¾Îª Win7"£©£¬MB_OK£©£»
¡¡¡¡}
¡¡¡¡}