bladellz
驱动小牛
驱动小牛
  • 注册日期2006-03-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望121点
  • 贡献值0点
  • 好评度120点
  • 原创分0分
  • 专家分0分
阅读:2078回复:9

如何在内核下获得操作系统当前登录用户名

楼主#
更多 发布于:2007-05-11 10:27
  如题
driverdance
驱动牛犊
驱动牛犊
  • 注册日期2007-04-18
  • 最后登录2007-08-13
  • 粉丝0
  • 关注0
  • 积分640分
  • 威望65点
  • 贡献值0点
  • 好评度64点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-05-11 11:39
驱动程序单干的时候,简单的事情也干不了
承接WDM和hook的项目。
rhettxie
驱动牛犊
驱动牛犊
  • 注册日期2004-10-27
  • 最后登录2010-02-04
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望65点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-05-11 12:19
获取 explorer.exe 进程的token,然后sid , 然后用户名
相关的api:
ZwOpenProcess
ZwOpenProcessToken
ZwQueryInformationToken
SeLookupAccountSid
最后一个函数貌似win2000下没有
静水流深
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
地板#
发布于:2007-05-11 12:33
可以通过访问Winlogon的内存读取

这个非正路请勿学习和研究~
没有战争就没有进步 X3工作组 为您提供最好的军火
Odyssey
驱动小牛
驱动小牛
  • 注册日期2004-12-15
  • 最后登录2008-03-29
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望115点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-05-11 12:38
不同进程可以在不同的账户下运行。
切换到该进程搜索peb->ProcessParameters->Environment中的USERNAME环境变量。。。
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
5楼#
发布于:2007-05-11 12:47
引用第4楼Odyssey2007-05-11 12:38发表的“”:
不同进程可以在不同的账户下运行。
切换到该进程搜索peb->ProcessParameters->Environment中的USERNAME环境变量。。。


主意不错!
人总在矛盾中徘徊。。。
GNiDiA
驱动小牛
驱动小牛
  • 注册日期2006-10-11
  • 最后登录2017-10-09
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望145点
  • 贡献值0点
  • 好评度124点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2007-05-11 13:33
用 token 取时,要注意多用户登录
bladellz
驱动小牛
驱动小牛
  • 注册日期2006-03-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望121点
  • 贡献值0点
  • 好评度120点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-05-14 13:23
搜了下网页,有这个方法
BOOLEAN GetUserName(PSECURITY_SUBJECT_CONTEXT securitySubjectContext, PUNICODE_STRING userName)
{
    PACCESS_TOKEN token;
    LUID luid;
    PSecurityUserData userInformation = NULL;
    NTSTATUS status;

    //初始化userName
    userName->Length = 0;
    userName->MaximumLength = 0;
    userName->Buffer = NULL;

    //取token
    token = SeQuerySubjectContextToken(securitySubjectContext);

    //根据token查询用户的LUID
    status = SeQueryAuthenticationIdToken(token, &luid);
    if (!NT_SUCCESS(status))
    {
        KdPrint(("GetUserName(): SeQueryAuthenticationIdToken fail\n"));
        return FALSE;
    }

    //特殊情况,SYSTEM用户
    if(luid.LowPart==SYSTEMACCOUNT_LOW && luid.HighPart==SYSTEMACCOUNT_HIGH)
    {
        userName->Length = 12;
        userName->MaximumLength = 12;
        userName->Buffer = ExAllocatePool(NonPagedPool, userName->MaximumLength);
        if (userName->Buffer==NULL)
        {
            KdPrint(("GetUserName(): ExAllocatePool fail\n"));
            return FALSE;
        }

        RtlCopyMemory(userName->Buffer, SYSTEMUSER, userName->MaximumLength);

        return TRUE;
    }

    //根据用户的luid取用户名
    status = GetSecurityUserInfo(&luid, UNDERSTANDS_LONG_NAMES, &userInformation);
    if (!NT_SUCCESS(status))
    {
        KdPrint(("GetUserName(): GetSecurityUserInfo fail\n"));
        return FALSE;
    }

    userName->Length = 0;
    userName->MaximumLength = userInformation->UserName.Length;
    userName->Buffer = ExAllocatePool(NonPagedPool, userName->MaximumLength);
    if (userName->Buffer==NULL)
    {
        KdPrint(("GetUserName(): ExAllocatePool fail\n"));
        return FALSE;
    }

    RtlCopyUnicodeString(userName, &userInformation->UserName);

    LsaFreeReturnBuffer(userInformation);

    return TRUE;
}


试了下,死机!! :(  
xp sp2
kabunhi
驱动牛犊
驱动牛犊
  • 注册日期2007-06-27
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分461分
  • 威望57点
  • 贡献值0点
  • 好评度46点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-07-25 17:27
有更好的 办法没
pdfwizard
驱动牛犊
驱动牛犊
  • 注册日期2007-09-26
  • 最后登录2007-09-29
  • 粉丝0
  • 关注0
  • 积分110分
  • 威望12点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-09-29 09:46
有,但是没人说
游客

返回顶部