Leo*_* Xu 2 c++ windows security acl user-accounts
我使用了GetUserName()METHOD,但它返回的用户名是SYSTEM进程中的'SYSTEM'.如何在SYSTEM进程中获取活动用户名?这是我的代码:
void getComputerUsername(char * username,char * domainname)
{
HANDLE hp , htoken;
char buff[1024];
unsigned long size = 1024;
TOKEN_USER *tuser;
PSID sid;
TCHAR * user = new TCHAR[256];
TCHAR * domain=new TCHAR[256];
SID_NAME_USE snu;
hp = htoken = INVALID_HANDLE_VALUE;
hp = GetCurrentProcess();
if(OpenProcessToken(hp, TOKEN_QUERY, &htoken))
{
if(GetTokenInformation(htoken, TokenUser, (void*)buff, size, &size))
{
tuser = (TOKEN_USER*)buff;
sid = tuser->User.Sid;
size = 256;
if(LookupAccountSid(NULL, sid, user, &size, domain, &size, &snu))
{
int iLength = WideCharToMultiByte(CP_ACP, 0, user, -1, NULL, 0, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, user, -1, username, iLength, NULL, NULL);
iLength = WideCharToMultiByte(CP_ACP, 0, domain, -1, NULL, 0, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, domain, -1, domainname, iLength, NULL, NULL);
//strcpy( user,username);
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
如果您想知道谁登录到物理控制台,您可以调用WTSGetActiveConsoleSessionId以获取当前活动的终端服务(也称为"快速用户切换"又名"远程桌面")会话ID.
然后WTSQuerySessionInformation,您可以使用WTSUserName来获取用户名.
(如果您感兴趣的用户可能通过远程桌面登录,则此方法无效.)
| 归档时间: |
|
| 查看次数: |
5765 次 |
| 最近记录: |