程序如何知道当前用哪个用户来运行?程序可能被桌面用户启动,也可能被IIS的访客用户启动,也可能被SYSTEM来
启动。如何知道当前被哪个用户启动呢?或者说正在以哪个身份来运行?
启动。如何知道当前被哪个用户启动呢?或者说正在以哪个身份来运行?
解决方案 »
- 分享一套 C/C++ 开源即时通讯软件
- API中关于缓存DC的使用
- 使用ComboBox::SetCurSel 后,编辑框里的值为选中状态,如何取消
- 紧急求救:让我崩溃的问题!再问如何隐藏Passware中wpkey.exe的窗口?
- 高分求教:DLL是否可以单步调试!
- 关于完成端口中的PER_IO_DATA结构
- 用ADO怎么连不在一个网段的SQL SERVER数据库?
- vc中获取tcc.exe的出错信息的问题
- (关系国家机密的安危):100分求彻底删除文件,单位有一些重要机密资料要从硬盘上删除了,担心以后会被人恢复!大家有什么办法能彻底删除
- 在哪可以学到先进的计算机技术?
- 有关菜单项响应代码添加问题。
- 大家好,windows下没有sockaddr_un结构体,有没有替代的方法,谢谢!
BOOL CSecurityTool::GetProcessUser(DWORD dwProcessID, TCHAR *szUserName, DWORD nNameLen)
{
BOOL fResult = FALSE;
HANDLE hProc = NULL;
HANDLE hToken = NULL;
TOKEN_USER *pTokenUser = NULL;
__try
{
// Open the process with PROCESS_QUERY_INFORMATION access
hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwProcessID);
if (hProc == NULL)
{
__leave;
}
fResult = OpenProcessToken(hProc, TOKEN_QUERY, &hToken);
if(!fResult)
{
__leave;
}
DWORD dwNeedLen = 0;
fResult = GetTokenInformation(hToken,TokenUser, NULL, 0, &dwNeedLen);
if (dwNeedLen > 0)
{
pTokenUser = (TOKEN_USER*)new BYTE[dwNeedLen];
fResult = GetTokenInformation(hToken,
TokenUser,
pTokenUser,
dwNeedLen,
&dwNeedLen);
if (!fResult)
{
__leave;
}
}
else
{
__leave;
}
SID_NAME_USE sn;
TCHAR szDomainName[MAX_PATH];
DWORD dwDmLen = MAX_PATH;
fResult = LookupAccountSid(NULL,
pTokenUser->User.Sid,
szUserName,
&nNameLen,
szDomainName,
&dwDmLen,
&sn);
}
__finally
{
if (hProc)
::CloseHandle(hProc);
if (hToken)
::CloseHandle(hToken);
if (pTokenUser)
delete[] (char*)pTokenUser;
return fResult;
}
}