znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
阅读:1486回复:2

在文件系统过滤驱动中获取用户名 [zt]

楼主#
更多 发布于:2008-09-23 16:39
#include "ntifs.h"
/*-------------------------------------------------------------------------*/
#define SYSTEMACCOUNT_LOW 999
#define SYSTEMACCOUNT_HIGH 0
#define SYSTEMUSER L"SYSTEM"
/*-------------------------------------------------------------------------*/
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;
}
/*-------------------------------------------------------------------------*/

 

由于使用了GetSecurityUserInfo()函数,因此还要在sources文件里加上

TARGETLIBS=$(BASEDIR)\lib$(BUILD_ALT_DIR)\i386\ksecdd.lib
 
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
xiabl
驱动牛犊
驱动牛犊
  • 注册日期2005-10-24
  • 最后登录2010-05-20
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望77点
  • 贡献值0点
  • 好评度71点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-09-24 10:39
znsoft  跟我研究的方向, 怎么有点类似呀.
小桥流水人家
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
板凳#
发布于:2008-09-24 10:59
类似?不明白。

一直在折腾文件加密...
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
游客

返回顶部