阿杰 发表于 2012-2-22 10:25:46

判断当前进程是否"以管理员身份运行"的

BOOL IsAdministrator() {//判断是否管理员模式   
    BOOL bIsElevated = FALSE;
    HANDLE hToken = NULL;
    UINT16 uWinVer = LOWORD(GetVersion());
    uWinVer = MAKEWORD(HIBYTE(uWinVer),LOBYTE(uWinVer));

    if (uWinVer < 0x0600))//不是VISTA、Windows7   
      return(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;
}

lxl1638 发表于 2012-3-15 22:28:40

我也帖相似的源码,取进程用户名PTSTR GetProcessUser(DWORD dwProcessID)
{
        STATIC TCHAR szUserName = {0};       
        BOOL fResult = FALSE;
        if (HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,dwProcessID))
        {
                HANDLEhToken = NULL;
                if (OpenProcessToken(hProc,TOKEN_QUERY,&hToken))
                {
                        DWORD dwNeedLen = 0;
                        GetTokenInformation(hToken,TokenUser,NULL,0,&dwNeedLen);
                        if (dwNeedLen > 0)
                        {
                                PTOKEN_USER pTokenUser = (PTOKEN_USER)UMemInit(dwNeedLen + sizeof(DWORD));
                                if (GetTokenInformation(hToken,TokenUser,pTokenUser,dwNeedLen,&dwNeedLen))
                                {
                                        SID_NAME_USE sn;
                                        TCHARszDomainName = {0};
                                        DWORDdwDmLen=MAX_PATH;
                                        DWORDnNameLen = MAX_PATH;
                                        fResult=LookupAccountSid(NULL,
                                                pTokenUser->User.Sid,
                                                szUserName,
                                                &nNameLen,
                                                szDomainName,
                                                &dwDmLen,
                                                &sn);
                                }
                                _SafeFree(pTokenUser);
                        }
                        if (hToken)
                        {
                                CloseHandle(hToken);
                        }
                }
                CloseHandle(hProc);
        }
        return fResult?(PTSTR)szUserName:NULL;
}
页: [1]
查看完整版本: 判断当前进程是否"以管理员身份运行"的