获取系统类型以及当前用户权限

判断系统类型,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");
        }
    }
}

 

你可能感兴趣的:(获取系统类型以及当前用户权限)