判断系统类型,32位系统还是64位系统,以及当前用户权限。
#include <windows.h> #include <stdio.h> #include <Tlhelp32.h> DWORD CheckModule(LPCWSTR ProcessName) { //传入的参数是要搜索的进程名 HANDLE hSnapshot; PROCESSENTRY32 lppe; //BOOL Find; BOOL Found; hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//创建进程快照 lppe.dwSize=sizeof(PROCESSENTRY32); Found=Process32First(hSnapshot,&lppe);//得到第一个进程 while(Found)//进程不是空 { if(lstrcmpi(ProcessName,lppe.szExeFile)==0)//进程名比较 return lppe.th32ProcessID;//一样即反回进程ID Found = Process32Next(hSnapshot,&lppe);//得到下一个进程 } CloseHandle(hSnapshot); return NULL; } //判断XP用户权限 BOOL IsAdmin() { HANDLE hAccessToken; BYTE * InfoBuffer = new BYTE[1024]; PTOKEN_GROUPS ptgGroups; DWORD dwInfoBufferSize; PSID psidAdministrators; SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY; if(!OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hAccessToken)) { delete InfoBuffer; return FALSE; } if(!GetTokenInformation(hAccessToken,TokenGroups,InfoBuffer,1024,&dwInfoBufferSize)) { delete InfoBuffer; CloseHandle(hAccessToken); return FALSE; } CloseHandle(hAccessToken); if(!AllocateAndInitializeSid(&siaNtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0,0,0,0,0,0, &psidAdministrators)) { delete InfoBuffer; return FALSE; } ptgGroups = (PTOKEN_GROUPS)InfoBuffer; for(UINT i = 0; i < ptgGroups->GroupCount; i++) { if(EqualSid(psidAdministrators,ptgGroups->Groups[i].Sid)) { FreeSid(psidAdministrators); delete InfoBuffer; return TRUE; } } return FALSE; } //判断win7用户权限 BOOL IsAdministrator() { HANDLE hToken = NULL; BOOL bIsElevated = FALSE; if (OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hToken)) { struct { DWORD TokenIsElevated; } /*TOKEN_ELEVATION*/te; DWORD dwReturnLength = 0; if (GetTokenInformation(hToken,/*TokenElevation*/(_TOKEN_INFORMATION_CLASS)20,&te,sizeof(te),&dwReturnLength)) { if (dwReturnLength == sizeof(te)) bIsElevated = te.TokenIsElevated; } CloseHandle( hToken ); } return bIsElevated; } //判断是不是64位操作系统 BOOL GetOSVerIs64Bit() { BOOL bRet=FALSE; SYSTEM_INFO si; typedef VOID(__stdcall*GETNATIVESYSTEMINFO)(LPSYSTEM_INFO lpSystemInfo); GETNATIVESYSTEMINFO fnGetNativeSystemInfo; fnGetNativeSystemInfo=(GETNATIVESYSTEMINFO)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),"GetNativeSystemInfo"); if (fnGetNativeSystemInfo!=NULL) { fnGetNativeSystemInfo(&si); if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 ) { bRet=TRUE; } } return bRet; } int main(int argc,char *argv[]) { OSVERSIONINFOEX osviex; osviex.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(!GetVersionEx((OSVERSIONINFO *)&osviex)) { printf("error %d\n",GetLastError()); return false; } if(osviex.dwMajorVersion==5) { if(osviex.dwMinorVersion==1) { printf("%s\n","Windows xp "); int yesORno=IsAdmin(); if(yesORno == 1) printf("winxp - Administrator\n"); else printf("winxp - Not Administrator\n"); } } else if(osviex.dwMajorVersion == 6) { //Windows 7 BOOL Is64Bit=GetOSVerIs64Bit(); BOOL IsAdmin=IsAdministrator(); //不是Administrator要考虑过UAC if(IsAdmin==0) { if(Is64Bit) //64为win7 printf("win7 - 64bit - Not Administrator\n"); else printf("win7 - 32bit - Not Administrator\n"); } else { printf("win7 - Administrator\n"); } } }
浙公网安备 33010602011771号