CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

急。。。急:如何通过API函数,在系统进程中得到当前登录用户的用户名????

楼主njiceshihong8()2005-08-04 11:32:34 在 VC/MFC / 进程/线程/DLL 提问

如何通过API函数,在系统进程中得到当前登录用户的用户名????由于我的进程是由服务启动的,在该进程中通过GetUserName()取得的用户名是system,而不是我想知道的当前登录用户的用户名,如何能够得到当前登录用户的用户名???? 问题点数:20、回复次数:1Top

1 楼idAnts(此广告位招租)回复于 2005-08-04 11:45:34 得分 20

//根据进程名称得到进程token  
   
  BOOL   GetTokenByName(HANDLE   &hToken,LPSTR   lpName)  
  {  
  if(!lpName)  
  {  
  return   FALSE;  
  }  
  HANDLE                   hProcessSnap   =   NULL;    
          BOOL                       bRet             =   FALSE;    
          PROCESSENTRY32   pe32             =   {0};    
   
          hProcessSnap   =   CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,   0);  
          if   (hProcessSnap   ==   INVALID_HANDLE_VALUE)    
                  return   (FALSE);    
   
          pe32.dwSize   =   sizeof(PROCESSENTRY32);    
   
          if   (Process32First(hProcessSnap,   &pe32))    
          {  
                  do    
                  {  
  if(!strcmp(_strupr(pe32.szExeFile),_strupr(lpName)))  
  {  
  HANDLE   hProcess   =   OpenProcess(PROCESS_QUERY_INFORMATION,  
  FALSE,pe32.th32ProcessID);  
  bRet   =   OpenProcessToken(hProcess,TOKEN_ALL_ACCESS,&hToken);  
  CloseHandle   (hProcessSnap);    
  return   (bRet);  
  }  
                  }    
                  while   (Process32Next(hProcessSnap,   &pe32));    
                  bRet   =   TRUE;    
          }    
          else    
                  bRet   =   FALSE;  
   
          CloseHandle   (hProcessSnap);    
          return   (bRet);  
  }  
   
  BOOL   GetCurrentUserName()  
  {  
  HANDLE   hToken;  
   
  //得到shell的token  
  if(!GetTokenByName(hToken,"EXPLORER.EXE"))  
  {  
  return   FALSE;  
  }  
  DWORD                 cbti           =   0;  
  PTOKEN_USER     ptiUser     =   NULL;  
  SID_NAME_USE   snu;  
   
  //取得所需空间大小  
  if   (GetTokenInformation(hToken,   TokenUser,   NULL,   0,   &cbti))    
  {  
  CloseHandle(hToken);  
  return   FALSE;  
  }  
   
  //分配空间  
  ptiUser   =   (PTOKEN_USER)   HeapAlloc(GetProcessHeap(),   0,   cbti);  
  if(!ptiUser)  
  {  
  CloseHandle(hToken);  
  return   FALSE;  
  }  
   
  //取得token信息  
  if   (!GetTokenInformation(hToken,   TokenUser,   ptiUser,   cbti,   &cbti))  
  {  
  CloseHandle(hToken);  
  HeapFree(GetProcessHeap(),   0,   ptiUser);  
  return   FALSE;  
  }  
   
  char   szUser[50];  
  char   szDomain[50];  
  DWORD   nUser   =   50;  
  DWORD   nDomain   =   50;  
   
  //根据用户的sid得到用户名和domain  
   
  if   (!LookupAccountSid(NULL,   ptiUser->User.Sid,   szUser,   &nUser,    
  szDomain,   &nDomain,   &snu))  
  {  
  CloseHandle(hToken);  
  HeapFree(GetProcessHeap(),   0,   ptiUser);  
  return   FALSE;  
  }  
  OutputDebugString(szUser);  
  OutputDebugString("\r\n");  
  OutputDebugString(szDomain);  
  OutputDebugString("\r\n");  
   
  CloseHandle(hToken);  
  HeapFree(GetProcessHeap(),   0,   ptiUser);  
  return   TRUE;  
  }  
   
   
  Top

相关问题

  • 求杀进程的api函数
  • 不用控件如何通过API函数使用进度条???
  • 怎样通过API函数EnumWindows得到所有的窗口?
  • 怎样通过API函数捕获击键信息?(在线)
  • API函数 FindFirstFile ,在线等待,运行通过即给分
  • 请问,通过CreateProcess函数创建一个进程,如何通过主线程ID获得主窗口句柄?
  • api函数
  • 求API函数?
  • API函数
  • API函数

关键词

  • 用户
  • hprocesssnap
  • 进程
  • bret
  • htoken
  • lpname
  • pe
  • 得到
  • 登录用户的用户名
  • handle

得分解答快速导航

  • 帖主:njiceshihong8
  • idAnts

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo