hudson0201
驱动牛犊
驱动牛犊
  • 注册日期2010-03-15
  • 最后登录2010-03-31
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:4509回复:6

在内核里怎么获取进程的用户名?

楼主#
更多 发布于:2010-03-15 16:06
UNICODE_STRING *GetProcessUsername()
{
    HANDLE token;
    TOKEN_USER* TokenUser = NULL;
    NTSTATUS status;
    //PULONG len;
    //int index;
    //SID *sid;
    LUID luid;
    UNICODE_STRING userName;
    PSecurityUserData userInformation = NULL;
    status=ZwOpenProcessTokenEx(NtCurrentProcess(), GENERIC_READ, OBJ_KERNEL_HANDLE, &token);
    //ZwQueryInformationToken(token, (TOKEN_INFORMATION_CLASS)TokenUser, NULL, 0, &len); //to get required length
    if (!NT_SUCCESS(status))
    {
      KdPrint(("ZwOpenProcessTokenEx(): ZwOpenProcessTokenEx fail\n"));
      return NULL;
    }
    
    //sid= (SID*)TokenUser->User.Sid;
    //
      status = SeQueryAuthenticationIdToken(token, &luid);
      if (!NT_SUCCESS(status))
      {
        KdPrint(("SeQueryAuthenticationIdToken(): SeQueryAuthenticationIdToken fail\n"));
        return NULL;
      }
      status = GetSecurityUserInfo(&luid, UNDERSTANDS_LONG_NAMES, &userInformation);
      if (!NT_SUCCESS(status))
      {
        KdPrint(("GetSecurityUserInfo(): GetSecurityUserInfo fail\n"));
        return NULL;
      }
      userName.Length = 0;
        userName.MaximumLength = userInformation->UserName.Length;
        userName.Buffer = ExAllocatePool(NonPagedPool, userName.MaximumLength);
        if (userName.Buffer==NULL)
        {
            KdPrint(("GetUserName(): ExAllocatePool fail\n"));
            return NULL;
        }

    RtlCopyUnicodeString(&userName, &userInformation->UserName);
    return &userName;
}

这个函数一执行就蓝屏
调试了一下问题在
SeQueryAuthenticationIdToken
这个函数上
很着急啊,明天就要交货了,
那位大侠帮帮我!!!!!!!!!!!!!!!!!!!!!
hudson0201
驱动牛犊
驱动牛犊
  • 注册日期2010-03-15
  • 最后登录2010-03-31
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2010-03-15 17:37
znsoft大侠,能指点一下吗
firstforyou
驱动牛犊
驱动牛犊
  • 注册日期2010-01-02
  • 最后登录2012-05-01
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望101点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-03-15 17:39
lz我也是和你做一样的东西 现在遇到一样的情况 需要得到用户名 可是GetSecurityUserInfo这个函数一直报错 我是新手麻烦楼主给我讲下怎么加ksecdd.lib 我加了就一堆错 谢谢啦 这个函数过了我就能调了 到时一起调啊
firstforyou
驱动牛犊
驱动牛犊
  • 注册日期2010-01-02
  • 最后登录2012-05-01
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望101点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2010-03-15 17:43
hudson0201能指点下 大家一起调啊
firstforyou
驱动牛犊
驱动牛犊
  • 注册日期2010-01-02
  • 最后登录2012-05-01
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望101点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2010-03-15 17:51
我找到个办法先用RtlAllocateAndInitializeSid再用SecLookupAccountSid刚好准备试 我要下班了 楼主联系我啊 帮帮我吧
hudson0201
驱动牛犊
驱动牛犊
  • 注册日期2010-03-15
  • 最后登录2010-03-31
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2010-03-15 21:48
回 2楼(firstforyou) 的帖子
你的代码目录下有个文件叫source
在里面仿造其他的Lib加入
这个库就可以了
hudson0201
驱动牛犊
驱动牛犊
  • 注册日期2010-03-15
  • 最后登录2010-03-31
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2010-03-15 22:03
firstforyou ,我现在在印度,
访问中文网页很慢,
你要是愿意的话
你加我的msn hudaihua@hotmail.com
一起讨论吧
游客

返回顶部