首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何获取已登录Windows用户的名字和姓氏?

获取已登录Windows用户的名字和姓氏可以通过以下步骤:

  1. 使用Windows API函数获取当前登录用户的访问令牌(access token)。
  2. 使用访问令牌获取用户的安全标识符(security identifier,SID)。
  3. 使用SID查询Windows注册表中的用户配置信息。
  4. 从用户配置信息中提取用户的名字和姓氏。

具体实现步骤如下:

Step 1: 获取访问令牌

使用Windows API函数OpenProcessToken来打开当前进程的访问令牌。然后使用GetTokenInformation函数获取令牌的用户信息。

Step 2: 获取安全标识符(SID)

使用GetTokenInformation函数获取令牌的用户信息,其中包括用户的安全标识符(SID)。

Step 3: 查询用户配置信息

使用Windows API函数LookupAccountSid来查询Windows注册表中的用户配置信息。该函数需要提供用户的安全标识符(SID)作为输入参数。

Step 4: 提取用户的名字和姓氏

从查询到的用户配置信息中提取用户的名字和姓氏。

以下是一个示例代码,使用C#语言实现上述步骤:

代码语言:csharp
复制
using System;
using System.Runtime.InteropServices;
using System.Security.Principal;

class Program
{
    [DllImport("advapi32.dll", SetLastError = true)]
    public static extern bool OpenProcessToken(IntPtr ProcessHandle, uint DesiredAccess, out IntPtr TokenHandle);

    [DllImport("kernel32.dll")]
    public static extern IntPtr GetCurrentProcess();

    [DllImport("advapi32.dll", SetLastError = true)]
    public static extern bool GetTokenInformation(IntPtr TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, IntPtr TokenInformation, uint TokenInformationLength, out uint ReturnLength);

    [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    public static extern bool LookupAccountSid(string lpSystemName, IntPtr Sid, System.Text.StringBuilder lpName, ref uint cchName, System.Text.StringBuilder ReferencedDomainName, ref uint cchReferencedDomainName, out SID_NAME_USE peUse);

    public enum TOKEN_INFORMATION_CLASS
    {
        TokenUser = 1,
        TokenGroups,
        TokenPrivileges,
        TokenOwner,
        TokenPrimaryGroup,
        TokenDefaultDacl,
        TokenSource,
        TokenType,
        TokenImpersonationLevel,
        TokenStatistics,
        TokenRestrictedSids,
        TokenSessionId,
        TokenGroupsAndPrivileges,
        TokenSessionReference,
        TokenSandBoxInert,
        TokenAuditPolicy,
        TokenOrigin,
        TokenElevationType,
        TokenLinkedToken,
        TokenElevation,
        TokenHasRestrictions,
        TokenAccessInformation,
        TokenVirtualizationAllowed,
        TokenVirtualizationEnabled,
        TokenIntegrityLevel,
        TokenUIAccess,
        TokenMandatoryPolicy,
        TokenLogonSid,
        TokenIsAppContainer,
        TokenCapabilities,
        TokenAppContainerSid,
        TokenAppContainerNumber,
        TokenUserClaimAttributes,
        TokenDeviceClaimAttributes,
        TokenRestrictedUserClaimAttributes,
        TokenRestrictedDeviceClaimAttributes,
        TokenDeviceGroups,
        TokenRestrictedDeviceGroups,
        TokenSecurityAttributes,
        TokenIsRestricted,
        MaxTokenInfoClass
    }

    public enum SID_NAME_USE
    {
        SidTypeUser = 1,
        SidTypeGroup,
        SidTypeDomain,
        SidTypeAlias,
        SidTypeWellKnownGroup,
        SidTypeDeletedAccount,
        SidTypeInvalid,
        SidTypeUnknown,
        SidTypeComputer
    }

    static void Main(string[] args)
    {
        IntPtr tokenHandle;
        IntPtr processHandle = GetCurrentProcess();
        OpenProcessToken(processHandle, 8, out tokenHandle);

        uint tokenInfoLength = 0;
        GetTokenInformation(tokenHandle, TOKEN_INFORMATION_CLASS.TokenUser, IntPtr.Zero, tokenInfoLength, out tokenInfoLength);

        IntPtr tokenInformation = Marshal.AllocHGlobal((int)tokenInfoLength);
        GetTokenInformation(tokenHandle, TOKEN_INFORMATION_CLASS.TokenUser, tokenInformation, tokenInfoLength, out tokenInfoLength);

        TOKEN_USER tokenUser = (TOKEN_USER)Marshal.PtrToStructure(tokenInformation, typeof(TOKEN_USER));
        IntPtr userSid = tokenUser.User.Sid;

        uint nameLength = 0;
        uint domainLength = 0;
        SID_NAME_USE sidType;
        LookupAccountSid(null, userSid, null, ref nameLength, null, ref domainLength, out sidType);

        StringBuilder name = new StringBuilder((int)nameLength);
        StringBuilder domain = new StringBuilder((int)domainLength);
        LookupAccountSid(null, userSid, name, ref nameLength, domain, ref domainLength, out sidType);

        Console.WriteLine("用户名: " + name);
        Console.WriteLine("域名: " + domain);

        Marshal.FreeHGlobal(tokenInformation);
    }
}

[StructLayout(LayoutKind.Sequential)]
public struct SID_AND_ATTRIBUTES
{
    public IntPtr Sid;
    public uint Attributes;
}

[StructLayout(LayoutKind.Sequential)]
public struct TOKEN_USER
{
    public SID_AND_ATTRIBUTES User;
}

这段代码将打印出当前登录用户的用户名和域名。

请注意,这只是一个示例代码,实际使用时可能需要进行错误处理和资源释放等操作。此外,该代码仅适用于Windows操作系统。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Windows服务器如何配置远程登录用户登录

www.qcloud.com→管理中心→控制台→云服务器→右侧“登录” 重启过程比较漫长,需要10分钟左右。...通过网页VNC登录进去(因为这时候远程连接进不去,只能通过这种方式进去) 8.jpg 9.jpg 运行gpedit.msc命令 10.jpg 计算机配置→管理模板→windows组件→远程桌面服务→.../archive/2013/07/05/3174246.html 重启服务器试试多用户远程连接吧!...远程桌面服务安装好之后使用是120天临时授权,并不是一直有效,这个授权是微软定。...有一次夜班有个用户打了不下5次电话就问这个服务怎么搭建,我跟说有默认授权期限,超过就不行,他说他肯定会在120天内重装系统。 12.jpg

16.8K131

如何通过反射获取属性名字属性类型

显然我们事先不知道要查哪个表,泛型dao基本要求就是对所有的表都适用,这就需要我们动态获取表名,基本思想可以是方法中传入一个类(前提是数据库中实体类都是一一对应实例,通过反射获取这个实体类中属性名属性类型...反射是java中一个很重要特性,在不知道类中信息时候,利用反射我们可以获取到类中所有的信息,例如属性名,属性类型,方法名,还可以执行类中方法,很强大,在框架中大多数也是采用反射获取类中信息。...以前知识只是知道反射可以破坏单例(因为反射可以获取到类中所有信息,构造方法也不例外),但是现实中没有哪个程序员写完了单例模式,在用反射来破坏单例吧…… 在说反射前先说一个在反射中很重要类Class...,包括权限修饰符,属性类型,属性名,这里String是java.lang.String,属性名属性类型后面可以利用字符串截取获得实际想要数据。...(); 输出是: int class java.lang.String class java.lang.String int 独立获取属性名: String name = field.getName(

3.7K20

如何定义统计用户登录次数?

本期我们来聊聊互联网产品登录是怎么回事儿,以及如何合理地定义用户登录次数。 那就先从我们浏览网页开始说吧。当我们打开浏览器时候,输入一个网址,敲了回车之后,就向远程服务器发送了一个请求。...这里要想统计真正活跃,就要看看,这个用户在七天内 PV,也就是说,我们要拿到带有用户登录页面浏览数据,才能统计真正活跃,只看登录次数是不行。...我们再假设一种情况,你包夜浏览了两天图片视频网站,然后关掉了浏览器,打了一天游戏,又回来继续浏览图片视频网站。发现不用重新输入用户密码,直接打开页面就能继续浏览,那这算登录几次呢?...从行为上看,你明明是两次打开浏览器,进入网站,但是只输入了一次用户密码,因为服务器会话有效期大于两天,所以不用重新输入也能使用。那么,这种情况下,如果想记录为两次活跃,只看登录次数也是不行。...因为会话有效期可能一直续期,也可能卡在需要续期时间点,用户并没有操作,然后当用户想操作时候,立马又需要重新登录。所以,登录次数意义不大,要结合续期情况用户具体行为分析,才有意义。

4.2K30

小程序登录用户信息手机号获取

小程序通过 wx.login 获取 code(用户登录凭证,有效期五分钟,使用一次后实效) 服务端拿到 code,调用 code2Session,获取用户 openid (用户在当前应用唯一标识)、...unionid (用户在开发平台唯一标识) session_key (会话秘钥是对用户数据进行 加密签名 秘钥,在获取用户信息时会用到) 等信息。...为了安全,服务器不应该把会话秘钥下发到小程序,也不应该对外提供这个秘钥 通过 unionid openid 自定义服务端登录获取用户信息 用户授权后,小程序通过 wx.getUserInfo 获取用户信息...,敏感信息被加密 把加密信息传给服务端,使用在登录获取 session_key 解密数据,解密方法可以看微信 开放数据校验与解密文档 获取手机号 需要用户主动触发才能发起获取手机号接口,所以该功能不由...小程序通过 组件触发 getPhoneNumber 事件,获得加密后信息 把加密信息传给服务端,使用在登录获取 session_key 解密数据,获得用户绑定手机号 参考文档

1.6K30

go: 如何获取linux用户uidgid

获取当前用户信息 在Go中,我们可以使用os/user包来获取Linux用户ID组ID。...以下是一个简单示例: go package main import ( "fmt" "os/user" ) func main() { // 获取当前用户 currentUser, err...ID:", currentUser.Gid) } 这段代码首先调用user.Current()函数来获取当前用户信息,然后打印出用户ID (Uid) 组ID (Gid)。...这是因为sudo命令作用就是以超级用户(root)身份运行命令。 获取指定用户信息 在Go中,我们可以使用os/user包Lookup函数来获取指定用户用户信息,包括用户ID组ID。...:", userInfo.Gid) } 这段代码首先调用user.Lookup函数来获取指定用户用户信息,然后打印出用户ID (Uid) 组ID (Gid)。

21910

Spring Security 如何动态更新登录用户信息?松哥来大家捋一捋

前两天松哥发了一篇文章,大家仔细过了一遍 Spring Security 登录流程: 松哥手把手带你捋一遍 Spring Security 登录流程 在这篇文章中,我大家详细分享了 Spring...1.获取用户登录信息 用户信息获取,其实办法很多,上面提到 SecurityContextHolder.getContext().getAuthentication() 是一个静态方法,也就是利用这个方法...,这里我就不再赘述,如果对如何获取 Spring Security 中用户信息还不熟悉,大家可以参考松哥之前文章:松哥手把手带你捋一遍 Spring Security 登录流程 今天主要是想大家聊一下如何修改用户信息...2.修改用户登录信息 在 Spring Security 中,当用户登录成功之后,如果前端提供了修改用户信息功能,在前端修改完用户信息之后,存储在 Spring Security 中用户信息也要及时修改...,以防止在后面其他请求中获取到错误用户信息,Spring Security 中用户信息要如何修改呢?

4.9K10

电脑预装Office 2019 家庭学生版如何免费激活

Office帐户登录/注册步骤 在开始激活预安装 Office 2019 家庭学生版之前,请确保你具备有效 Microsoft 帐户。...步骤 7 此时,需要进行隐私设置,根据根据用户需求选择是否发送可选数据,然后单击相应按钮。 步骤 8 在“文件”选项卡“帐户”下,可看到你 Office 激活。...如何处理Office激活过程中某些错误? 在激活预安装 Office 2019 家庭学生版时,你可能会遇到以下问题。如果遇到,请按照相应指南进行解决。...有关帐户错误通知 激活前需要更新 Office 有关帐户错误通知 步骤 1 如果在注册 Microsoft 帐户时未填写“姓氏名字”字段,则在尝试激活 Office 时,右上角可能会显示帐户错误消息...步骤 2 单击右上角帐户错误消息,你可通过在弹出窗口中填写“姓氏名字”字段来解决此问题。 激活前需要更新 Office 步骤 1 在右下角,你将看到“Office 更新可用”通知。

9.2K40

想问问大家惠普笔记本office怎么激活?

Office帐户登录/注册步骤 在开始激活预安装 Office 2019 家庭学生版之前,请确保你具备有效 Microsoft 帐户。...步骤 7 此时,需要进行隐私设置,根据根据用户需求选择是否发送可选数据,然后单击相应按钮。 步骤 8 在“文件”选项卡“帐户”下,可看到你 Office 激活。...如何处理Office激活过程中某些错误? 在激活预安装 Office 2019 家庭学生版时,你可能会遇到以下问题。如果遇到,请按照相应指南进行解决。...•有关帐户错误通知 •激活前需要更新 Office 有关帐户错误通知 步骤 1 如果在注册 Microsoft 帐户时未填写“姓氏名字”字段,则在尝试激活 Office 时,右上角可能会显示帐户错误消息...步骤 2 单击右上角帐户错误消息,你可通过在弹出窗口中填写“姓氏名字”字段来解决此问题。 激活前需要更新 Office 步骤 1 在右下角,你将看到“Office 更新可用”通知。

4.4K40

CAS SSO单点登录服务端环境搭建

1.因为是本地模拟sso环境,而sso环境测试需要域名,所以需要虚拟几个域名出来,步骤如下: 2.进入目录C:\Windows\System32\drivers\etc 3.修改hosts文件 127.0.0.1... jeesz.cn 127.0.0.1  sso1.jeesz.cn 127.0.0.1  sso2.jeesz.cn 4.生成认证证书 注意:我们可以根据sso单点登录架构图可以看到,在客户端和服务端进行交互时候...其中名字姓氏使用你域名,保持C:\Windows\System32\drivers\etc\hosts 文件中映射域名相同,注意不要写成IP。...在这里我使用口令是minglisoft(这个要记住,后面还会使用到) 名字姓氏使用是jeesz.cn(对应host中域名配置) (五)使用命令keytool -export -file D:/sso-cas...:casuser 默认密码为:Mellon  以下是所有的cas sso单点登录交付件源码 到此casserver测试成功!!

63620

iOS 2020 开发者账号 身份验证步骤

iPhone 设备,或者运行 iPadOS 13.1 或更高版本 iPad,并确保其启用锁屏密码、触控 ID 或面容 ID。...打开下载好「Apple Developer」软件(软件中文名为「开发者」)。 点击「账户」,然后点击「登录」,选择通过 Apple ID 登录。...输入对应开发者账号密码(这一步可能需要双重认证验证码)。 登录之后,点击「验证您身份」,进入身份验证页面。 ? image 点击继续。...image 输入正确名字姓氏、身份证号电话号码。请勿输入别名、昵称或公司名称作为您姓氏名字,错误地输入您法定姓名将导致注册审核延误。 ?...确保您脸部清楚地显示在取景框内,然后轻点“拍摄”。 查看您自拍照以确保照片清晰,然后轻点 "确认"。 ? image 至此,完成认证。

1.5K20

WordPress 用户 user_login、user_nicename、display_name nickname 有什么区别

WordPress 中有一堆用户名相关字段: user_login - 用户名 user_nicename - 别名 first_name - 名字 last_name - 姓氏 nickname...user_login 就是用户注册时输入用户名,WordPress 默认不支持中文名,所以这里一般都是英文加数字中划线下划线,每次登录后台使用也是这个字段。...所以大部分 WordPress 用户 user_nicename user_login 是一样,这样通过查看某个作者文章列表链接,就能猜到他登录账号 user_login,然后就可以暴力破解...WPJAM 用户管理插件优化 那么多名字,所以个人感觉,最好合并一下,所以 WPJAM 用户管理插件提供了下面的设置选项: 屏蔽姓名设置:屏蔽了姓氏名字设置,简化后台个人资料界面设置。...如果用户没有修改过别名(user_nicename),为了进一步防止用户名暴露,WPJAM 用户管理插件还提供了隐藏登录名设置选项。 所以改进之后最终用户界面如下所示:

78920

通用汽车遭撞库攻击被暴露车主个人信息

撞库是指黑客通过收集网上泄露用户密码信息,生成对应字典表,并尝试批量登陆其他网站后,得到一系列可以登录用户。...经后续调查,通用汽车表示目前没有证据表明登录信息是从通用汽车本身获得,“未经授权用户获得了之前在其他非通用汽车网站上被泄露客户登录凭证访问权限,然后在客户通用汽车账户上重复使用这些凭证。”...对此通用汽车要求受影响用户 在再次登录他们帐户之前重置他们密码。 个人信息暴露 当黑客成功入侵用户通用汽车帐户后,他们可以访问存储在该网站上某些信息。...此信息包括以下个人详细信息: 名字姓氏, 个人电子邮件地址, 个人地址, 与帐户绑定注册家庭成员用户电话号码, 最后已知保存最喜欢位置信息, 当前订阅 OnStar 套餐(如果适用),...家庭成员头像照片(如果上传), 个人资料图片, 搜索目的地信息。

30910

【Google Play】创建 Google 开发者账号 ( 注册邮箱账号 | 创建开发者账号 )

2、填写信用卡信息 3、设置账单地址 4、支付并创建 5、查看 Google Play 管理页面 一、注册 Google 邮箱账号 ---- 1、进入 Google 账户页面 进入 Google 账号登录页面...输入 “姓氏” , “名字” , “用户名称” , 以及密码 4、设置电话邮箱 填写 电话 , 备用邮箱 , 生日 , 性别 ; 填写完毕后 , 点击 “下一步” 按钮 ; 5、同意隐私条款 同意...邮箱账号创建完成 , 进入个人信息首页 ; 至此 Google 邮箱账号创建完成 , 下一步开始创建 Google 开发者账号 ; 二、创建 Google 开发者账号 ---- 1、开发者账号设置 登录之前注册...CVC 银行验证码 ; 3、设置账单地址 信用卡信息填写完毕后 , 继续填写账单邮寄地址 ; 4、支付并创建 填写完毕后 , 点击 " 购买 " , 如果信用卡信息无误 , 会弹出 " 开发者账号创建..." 提示 ; 5、查看 Google Play 管理页面 点击 " 转到 Play 管理中心 " 按钮 , 进入到 Google Play 管理页面 ; 查看 " 用户权限 " , 25

14.6K30

WPJAM「用户管理插件」:自定义头像,屏蔽个人设置,优化姓名设置,隐藏登录名,限制登陆失败次数,防止暴力破解等功能

我们可以移除用户个人设置,采用使用系统默认值。 优化姓名设置 默认情况下,个人资料页面用户姓名设置是这样: 一般情况下,我们是不需要用户输入名字姓氏,公开显示名字直接为昵称即可。...所以我们提供了下面两个选项: 屏蔽姓名设置:屏蔽了姓氏名字设置,简化后台个人资料界面设置。 显示名称设置:取消显示名称选择器,直接使用昵称作为显示名称。...所以改进之后最终用户界面如下所示: 隐藏登录名 如果用户没有修改过别名(user_nicename),那么他别名用户名(user_login)很大概率是一样,然后作者文章链接或者其他地方就会暴露用户名...2. user_login 不出现在 body_class comment_class 中。 3. 隐藏登录失败时候未知用户密码不正确错误信息,都显示:「用户名或者密码错误。」...记录用户最后登录时间 新增记录用户最后登录时间功能,用户登录之后,在后台用户列表就会显示该用户最后登录时间,并且支持按照用户最后登录时间进行排序,也可以按照用户注册时间排序。

1.2K10

我用 Python 偷偷查到暗恋女生名字

下面我们用 Python 实现一个手机号码获取妹子名字功能。 2 编 写 代 码 首先,我们需要爬取国内最常用一些姓氏,以百度百科 - 中国姓氏为例。 ?...如果是非好友关系,转账界面对方显示名字不完全,可以点击「验证按钮」,输入对方姓氏就能进行确认。 所以,可以遍历上面获取姓氏,一个个地去验证。...= True return yes_or_right 组合上面获取数据,就能得到妹子完整名字啦。...3 结 果 结 论 拿常用姓氏去一个个验证姓名即可拿到妹子完整名字。...但是由于支付宝对接口限制,一个账号每天只能有 10+ 次试错机会;因此,如果妹子姓氏不是那么常见,可以需要试错多次才能拿到妹子名字

59520
领券