WEB开发网
开发学院软件开发VC 如何获取Windows系统登陆用户名 阅读

如何获取Windows系统登陆用户名

 2006-07-20 11:39:39 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 一般用 GetUserName(或 GetUserNameEx )函数可得到当前登陆登陆用户名(但不总会得到,下面会分析),如何获取Windows系统登陆用户名,此系统函数在Win95、WinNT 及以后所有操作系统中都可用,代码如下:BOOL CSecurityTool::GetCu

本文示例源代码或素材下载

一般用 GetUserName(或 GetUserNameEx )函数可得到当前登陆登陆用户名(但不总会得到,下面会分析),此系统函数在Win95、WinNT 及以后所有操作系统中都可用。代码如下:

BOOL CSecurityTool::GetCurrProcessUser(CString& strName)
{  
  BOOL bRet(TRUE);
  strName = _T("");
  DWORD dwSize = MAX_PATH;
  TCHAR *pszName = new TCHAR[dwSize];
  if (!GetUserName(pszName, &dwSize))
  {
    delete[] pszName;
    pszName = new TCHAR[dwSize];
    bRet = GetUserName(pszName, &dwSize);
  }
  
  strName = pszName;
  delete[] pszName;    
  return bRet;
}   

此函数目的准确来说是获取当前线程的用户名(MSDN语:retrieves the user name of the current thread)。如果是NT service(NT服务程序)将此进程启动,得到的结果是NT Service进程的用户名,即“SYSTEM”,而不是登陆用户名;同理,如果此进程是通过CreateProcessAsUser创建的,GetUserName获取的用户将是“AsUser”的用户名。另外,如果当前线程正impersonate其他用户环境(用函数ImpersonateLoggedOnUser可达到此目的),它获取的将是其他用户名。因此,此函数只能在特定环境中才可以获取登陆用户名。

那如何不因进程本身运行环境的不同,而准确地获取登陆用户名呢?

我们首先看看Windows XP操作系统,它提供了WTSQuerySessionInformation函数,这个函数可以获取会话(session)相关信息,其中一个用途是获取会话的登陆用户。代码如下:

1 2  下一页

Tags:如何 获取 Windows

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接