找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 4724|回复: 1

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

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2012-2-22 10:25:46 | 显示全部楼层 |阅读模式
  1. BOOL IsAdministrator() {//判断是否管理员模式   
  2.     BOOL bIsElevated = FALSE;  
  3.     HANDLE hToken = NULL;  
  4.     UINT16 uWinVer = LOWORD(GetVersion());  
  5.     uWinVer = MAKEWORD(HIBYTE(uWinVer),LOBYTE(uWinVer));  
  6.   
  7.     if (uWinVer < 0x0600))//不是VISTA、Windows7   
  8.         return(FALSE);  
  9.   
  10.     if (OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hToken)) {  
  11.   
  12.         struct {  
  13.             DWORD TokenIsElevated;  
  14.         } /*TOKEN_ELEVATION*/te;  
  15.         DWORD dwReturnLength = 0;  
  16.   
  17.         if (GetTokenInformation(hToken,/*TokenElevation*/(_TOKEN_INFORMATION_CLASS)20,&te,sizeof(te),&dwReturnLength)) {  
  18.             if (dwReturnLength == sizeof(te))  
  19.                 bIsElevated = te.TokenIsElevated;  
  20.         }  
  21.         CloseHandle( hToken );  
  22.     }  
  23.     return bIsElevated;  
  24. }  
复制代码

易语言代码

易语言代码
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755

7

主题

36

回帖

2

精华

初来乍到

积分
3171
发表于 2012-3-15 22:28:40 | 显示全部楼层
我也帖相似的源码,取进程用户名
  1. PTSTR GetProcessUser(DWORD dwProcessID)
  2. {
  3.         STATIC TCHAR szUserName[MAX_PATH] = {0};       
  4.         BOOL fResult = FALSE;
  5.         if (HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,dwProcessID))
  6.         {
  7.                 HANDLE  hToken = NULL;
  8.                 if (OpenProcessToken(hProc,TOKEN_QUERY,&hToken))
  9.                 {
  10.                         DWORD dwNeedLen = 0;
  11.                         GetTokenInformation(hToken,TokenUser,NULL,0,&dwNeedLen);
  12.                         if (dwNeedLen > 0)
  13.                         {
  14.                                 PTOKEN_USER pTokenUser = (PTOKEN_USER)UMemInit(dwNeedLen + sizeof(DWORD));
  15.                                 if (GetTokenInformation(hToken,TokenUser,pTokenUser,dwNeedLen,&dwNeedLen))
  16.                                 {
  17.                                         SID_NAME_USE sn;
  18.                                         TCHAR  szDomainName[MAX_PATH] = {0};
  19.                                         DWORD  dwDmLen  =  MAX_PATH;
  20.                                         DWORD  nNameLen = MAX_PATH;
  21.                                         fResult  =  LookupAccountSid(NULL,
  22.                                                 pTokenUser->User.Sid,
  23.                                                 szUserName,
  24.                                                 &nNameLen,
  25.                                                 szDomainName,
  26.                                                 &dwDmLen,
  27.                                                 &sn);
  28.                                 }
  29.                                 _SafeFree(pTokenUser);
  30.                         }
  31.                         if (hToken)
  32.                         {
  33.                                 CloseHandle(hToken);
  34.                         }
  35.                 }
  36.                 CloseHandle(hProc);
  37.         }
  38.         return fResult?(PTSTR)szUserName:NULL;
  39. }
复制代码
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表