使用 C# 获取当前用户的SID

如何用C语言获取系统的sid信息? 在Win7中,你可以在cmd中输入whoami/user来轻松获取sid信息,但是,要在程序中获得,该怎么做呢?如下(Windows API, 我服了你): #include #include #define MAX_NAME 256 void ConvertSid(PSID pSid, LPTSTR TextualSid) { PSID_IDENTIFIER_AUTHORI 阅读详情

转自:http://blog.youkuaiyun.com/zmoneyz/article/details/29865229


C# 获取当前用户的SID  

2013-08-21 17:16:51|  分类: C# |  标签:c#   |举报 |字号 订阅

1.简单点的:
System.Security.Principal.WindowsIdentity currentUser = System.Security.Principal.WindowsIdentity.GetCurrent();
string sid = currentUser.User.ToString();
2.复杂点的:
private string GetSid(string strLogin)
{
    string str = "";
    // Parse the string to check if domain name is present.
    int idx = strLogin.IndexOf('\\');
    if (idx == -1)
    {
        idx = strLogin.IndexOf('@');
    }

    string strDomain;
    string strName;

    if (idx != -1)
    {
        strDomain = strLogin.Substring(0, idx);
        strName = strLogin.Substring(idx + 1);
    }
    else
    {
        strDomain = Environment.MachineName;
        strName = strLogin;
    }


    DirectoryEntry obDirEntry = null;
    try
    {
        Int64 iBigVal = 5;
        Byte[] bigArr = BitConverter.GetBytes(iBigVal);
        obDirEntry = new DirectoryEntry("WinNT://" +
                                strDomain + "/" + strName);
        System.DirectoryServices.PropertyCollection
                            coll = obDirEntry.Properties;
        object obVal = coll["objectSid"].Value;
        if (null != obVal)
        {
            str = this.ConvertByteToStringSid((Byte[])obVal);
        }

    }
    catch (Exception ex)
    {
        str = "";
        System.Diagnostics.Trace.Write(ex.Message);
    }
    return str;
}

private string ConvertByteToStringSid(Byte[] sidBytes)
{
    StringBuilder strSid = new StringBuilder();
    strSid.Append("S-");
    try
    {
        // Add SID revision.
        strSid.Append(sidBytes[0].ToString());
        // Next six bytes are SID authority value.
        if (sidBytes[6] != 0 || sidBytes[5] != 0)
        {
            string strAuth = String.Format
                ("0x{0:2x}{1:2x}{2:2x}{3:2x}{4:2x}{5:2x}",
                (Int16)sidBytes[1],
                (Int16)sidBytes[2],
                (Int16)sidBytes[3],
                (Int16)sidBytes[4],
                (Int16)sidBytes[5],
                (Int16)sidBytes[6]);
            strSid.Append("-");
            strSid.Append(strAuth);
        }
        else
        {
            Int64 iVal = (Int32)(sidBytes[1]) +
                (Int32)(sidBytes[2] << 8) +
                (Int32)(sidBytes[3] << 16) +
                (Int32)(sidBytes[4] << 24);
            strSid.Append("-");
            strSid.Append(iVal.ToString());
        }

        // Get sub authority count...
        int iSubCount = Convert.ToInt32(sidBytes[7]);
        int idxAuth = 0;
        for (int i = 0; i < iSubCount; i++)
        {
            idxAuth = 8 + i * 4;
            UInt32 iSubAuth = BitConverter.ToUInt32(sidBytes, idxAuth);
            strSid.Append("-");
            strSid.Append(iSubAuth.ToString());
        }
    }
    catch (Exception ex)
    {
        System.Diagnostics.Trace.Write(ex.Message);
        return "";
    }
    return strSid.ToString();
}
这段是参考:
http://www.netomatix.com/GetUserSid.aspx
http://www.codeproject.com/Articles/3688/How-to-get-user-SID-using-DirectoryServices-classe
要添加引用程序集: System.DirectoryServices(在 system.directoryservices.dll 中),本人用的方法1,方法2没去验证正确性

C#实现获取Windows当前用户信息 (附完整源代码) 阅读详情

相关推荐

从Windows操作系统中获取当前用户名和密码(附带源代码)

请记住,在实际开发中,直接获取用户密码是不安全的,这里仅提供了一个演示示例。的方法,该方法尝试获取当前用户的密码。请注意,获取密码的过程相当复杂,需要调用一些Windows操作系统API,并解析返回的用户信息。在C#编程中,我们经常需要获取当前用户的信息,包括用户名和密码。本文将介绍如何使用C#从Windows操作系统中获取当前用户名和密码,并提供相应的源代码示例。请注意,由于安全性考虑,通常不建议直接获取用户的密码,因为密码应该是加密保存的。因此,本文中的示例仅用于演示目的,不建议用于实际生产环境。

code88888的博客 761

SharePoint使用 C# 获取当前用户的SID

C# 获取当前用户的SID   2013-08-21 17:16:51|  分类: C# |  标签:c#   |举报 |字号 订阅 1.简单点的: System.Security.Principal.WindowsIdentity currentUser = System.Security.Principal.WindowsIdentity.GetCurren

zmoneyz的专栏 2211

网络安全 —— 实验(基于华为eNSP模拟器)

8. 实验八 —— 通过路由的远程管理(基于实验七的基础配置)8. 实验八 —— 通过路由的远程管理(基于实验七的基础配置)6. 实验六 —— 交换机的远程控制(直接控制和间接控制)6. 实验六 —— 交换机的远程控制(直接控制和间接控制)5. 实验五 —— 将交换机作为PC端通过交换机相连。5. 实验五 —— 将交换机作为PC端通过交换机相连。4. 实验四 —— 两个PC机通过两台交换机相连。2. 实验二 —— 两个PC机通过交换机相连。2. 实验二 —— 两个PC机通过交换机相连。

这个家伙看起来很懒,只想把你留下来哦 9337

windows 获取当前用户的sid

1)cmd命令查询 2)代码获取 char userName[MAX_NAME] = ""; char sid[MAX_NAME] = ""; DWORD nameSize = sizeof(userName); GetUserName((LPWSTR)userName, &nameSize); char userSID[MAX_NAME] = ""; char us

fxbjye的博客 6585

从基础知识到PCB设计,打造全能硬件工程师

成为一名出色的硬件工程师需要在多个领域建立坚实的基础。从硬件基础知识、元器件学习、模拟电子电路到PCB设计,以及数字电子电路与通信,每个方面都是构建全面硬件工程师技能集的重要组成部分。通过深入学习和实践这些领域,你将能够在硬件工程领域中取得更多的成就。

weixin_46969363的博客 2717

ESP32-C3微型9轴感知模块的硬件工程实践

在嵌入式系统小型化趋势下,低功耗微控制器与多传感器融合成为智能终端的基础技术路径。其核心原理在于芯片能效比、射频合规性与电源噪声抑制的协同优化,技术价值体现在降低认证门槛、提升EMC鲁棒性及保障MEMS传感器精度。典型应用场景包括可穿戴设备、微型无人机姿态控制和工业边缘传感节点。本文围绕ESP32-C3平台展开,深入解析QFN封装选型逻辑、同步降压电源设计、LSM9DS1九轴校准策略等关键环节,覆盖FCC/CE认证规避、USB-C接口EMC防护等高频工程痛点。

weixin_42607969的博客 366

使用GraphAPI取得SharePointSiteID(GUID)

使用GraphAPI时,经常会有需要用到SiteID呀,ListID等等,取得方法在这里做一下备忘,便于以后查询, 打扰了。 问题:怎样在已知SharePointSiteURL的情况下获取SiteID和ListID 例:https://{HostName}/Sites/{SiteName} {SiteURL}=/Sites/{SiteName} 方法:1.打开GraphExploler 2.登录组...

jossielee2015的博客 1112

移相变压器Simulink建模与HVDC系统仿真实践

移相变压器是电力电子领域实现精确相位调节的核心设备,其通过特殊绕组设计改变输出电压相位角,在解决环网潮流不均、阻尼功率振荡等场景具有关键作用。本文基于MATLAB/Simulink环境,详细解析移相变压器的建模原理与技术实现,包括磁路耦合特性模拟、参数计算方法和控制策略设计。针对HVDC高压直流输电和FACTS柔性交流输电系统等典型应用,提供仿真模型搭建技巧与问题排查指南,特别涵盖新能源并网场景下的相位调节优化方案。通过实测数据验证,所建模型在稳态精度和动态响应方面均满足工程要求,为电力系统稳定性分析提供有

weixin_28278377的博客 270

服务中访问当前用户注册表信息

  Windows Vista后有session 0隔离机制,那么在服务中是不能直接访问当前登录用户的注册表信息的,因为此时的HKEY_CURRENT_USER是里面是system的。那么实在需要,该怎么做呢?方法还是有的,在网上搜了一下,如下两个链接提供了一些方法:   http://blog.youkuaiyun.com/zwh37333/article/details/6358725   http:...

weixin_30770783的博客 662

android 14.0 控制wifi启用禁用功能实现

在14.0的产品rom定制化开发中,在产品开发中,对于功能的开发的功能也是挺多的,而在对于wifi的功能定制需求,有要求需要通过系统属性来控制wifi开关是否可以打开 来控制是否可以连接wifi,打开控制wifi的功能,接下来分析wifi的开启流程来实现该功能的实现

安卓兼职framework和app工程师的博客 1769

UG\NX二次开发 找不到指定的dlx文件(Specified Dlx file not found)

有群友问:用Ctrl+U运行的时候就报错,找不到指定的dlx文件Specified Dlx file not found。怎么处理。

王牌飞行员_里海的博客 1127

C#调用注册表,修改IE相关配置

最近在项目中遇到用C#调用注册表,修改IE选项高级选项卡中的“显示图片”复选框,用到的代码如下: RegisterHelper.cs: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Micros

Mars的专栏 2157

深度强化Q学习-基于微软AirSim仿真环境的自动驾驶案例(原理代码详解简易可行)

最近在学习《强化学习原理与Python实现》,肖智清著。参考第十二章的自动驾驶案例,写一篇总结,尽量做到简单可行,让有志于自动驾驶的小伙伴可以通过此篇博客可以管中窥豹,初步了解自动驾驶的强化学习训练过程。 本篇将自动驾驶问题转化为回合制的强化学习任务,设计以车辆观察图像和运行状态为输入的自动驾驶算法,并在AirSim仿真环境中进行训练和测试。本篇使用带经验回放和目标网络的基于深度Q网络算法设计并实现智能体,对经验回放、目标网络和深度Q学习算法进行简单介绍,并用代码实现。

shao918516的博客 8599

.NET : 取得Windows账号的有关信息

下面这个小程序演示了如何取得当前用户身份的相关信息using System; using System.Security.Principal; namespace ConsoleApplication1 { class Program { /// /// 这个程序演示了如何获得当前Windows账号的相关信息 /// 作者:陈希章 /// /// stati

陈希章@中国 505

手把手教你学PCIE(5.1)--pcie固件初始化的硬件初始化

PCIe 固件初始化的硬件初始化是一个复杂但至关重要的过程。通过正确配置 PCIe 控制器和相关硬件,可以确保系统的稳定性和性能。以上步骤和示例代码提供了一个基本的框架,实际开发中可能需要根据具体的硬件和需求进行调整和优化。

MHD0815的博客 1688

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C#中datagridview获取当前行并修改数据

datagridview单击获取当前行的ID(此ID为数据库的ID) dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString() 如果想获

wangchaoqi1985的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

c#获取当前登录用户的所有进程,而不是所有用户的进程

获取当前登录用户的所有进程 而不显示所有用户的所有进程

qq_39956515的博客 2656

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C# 获取域用户信息

C#读取域信息,需要引用两个程序集 using System; using System.Collections.Generic; using System.Data; using System.DirectoryServices; using System.DirectoryServices.AccountManagement; using System.Linq...

weixin_30925411的博客 2891

获得user account的SID,GUID

1. 背景知识 When a new domain user or group account is created, Active Directory stores the account's SID in the Object-SID (objectSID) property of a User or Group object. It also assigns the new object ...

weixin_33951761的博客 500

C# 使用 sid 连接 Oracle(无需安装 Oracle 客户端)

c#教程https://www.xin3721.com/eschool/CSharpxin3721/ 最接我们公司的折桂打印平台系统,决定增加支持新的数据库:Oracle 数据库。其中主要代码是 C#, 其次是 Java。 Java 连各种数据库,很容易,下载 JDBC 驱动程序就可以了。C# 相对麻烦一点,我决定花点时间,进行调研/学习,调通C# 连接 Oracle(无需安装 Oracle 客户端)。 经过几天的网上搜索,中文、英文的资料,都看了不少。绝大多数,不靠谱,根本行不通,其文中说是可以不需.

chinaherolts2008的博客 981

VBS脚本获取安全标识符SID(Security Identifiers)的方法

一、SID简介        SID也就是安全标识符(Security Identifiers),是标识用户、组和计算机帐户的唯一的号码。在第一次创建该帐户时,将给网络上的每一个帐户发布一个唯一的 SID。Windows 2000 中的内部进程将引用帐户的 SID 而不是帐户的用户或组名。如果创建帐户,再删除帐户,然后使用相同的用户名创建另一个帐户,则新帐户将不具有授权给前一个帐户的权力或权限,

雨燕的博客 266

如何获取当前的Oracle用户的session id

两种方法:1.环境变量:SELECT USERENV(SID) FROM DUAL;直接获取SID,这种方式要注意的是它在oracle 10g以后的版本才有这个环境变量2.有时候v$mystat有权限, SELECT SID FROM V$MYSTAT WHERE ROWNUM =1; 前面一种显然简单点

CyberKnightGIC的专栏 2753

浅谈.NET(C#)与Windows用户账户信息的获取

原文:浅谈.NET(C#)与Windows用户账户信息的获取 目录 1. 用户账户名称 - 使用Environment类 2. 用户账户信息 - 使用WindowsIdentity和IdentityReference 3. 使用IPrincipal判断用户账户类型(支持用户账户控制(UAC)提示) 返回...

weixin_34410662的博客 783
上一篇: C#获取硬盘、CPU、主板、网卡的序列号
下一篇: 方法里获取外界变量名和值;
「已注销」
博客等级 码龄14年 116粉丝 43原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值