`
hanyezhiyu8
  • 浏览: 153647 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

获取当前用户的SID

 
阅读更多

方法一:

BOOL GetSID(CString& csSID)
{
    BOOL bRes = FALSE;
    csSID.Empty();

    char acUserName[UNLEN + 1];
    ::SecureZeroMemory(acUserName, sizeof(acUserName));
    DWORD dwLength = UNLEN;  

    bRes = ::GetUserNameA(acUserName, &dwLength);
    if (bRes)
    {
        BYTE sidBuffer[100];
        ::SecureZeroMemory(acUserName, sizeof(sidBuffer));
        PSID psid = (PSID)&sidBuffer;
        DWORD sidBufferSize = 100;
        char domainBuffer[80];
        ::SecureZeroMemory(acUserName, sizeof(domainBuffer));
        DWORD domainBufferSize = 80;
        SID_NAME_USE snu;

        //Get SID
        bRes = LookupAccountNameA(0, acUserName, psid, &sidBufferSize, domainBuffer, &domainBufferSize, &snu);
        if (bRes)
        {
            char* cSid = NULL;
            bRes = ConvertSidToStringSidA(psid, &cSid);
            if (bRes)
            {
                csSID = cSid;
            }
            if (cSid)
            {                
                LocalFree((HLOCAL)cSid); // Release sid space
            }
        }
    }

    return bRes;
}

 

 

方法二:

BOOL GetSID(CString& csSID)
{
    BOOL bRes = FALSE;
    csSID.Empty();

    HANDLE hToken = NULL;    
    HANDLE hCurProcess = GetCurrentProcess();
    bRes = OpenProcessToken(hCurProcess, TOKEN_QUERY, &hToken)
    if (bRes) 
    {        
        DWORD dwBufferSize = 0;
        bRes = GetTokenInformation(hToken, TokenUser, NULL, 0, &dwBufferSize);
        //ASSERT(GetLastError() == ERROR_INSUFFICIENT_BUFFER);
        if (bRes)
        {
            LPBYTE buffer = new byte[dwBufferSize];
            if (NULL != buffer)
            {
                ::SecureZeroMemory(buffer, sizeof(buffer));
                PTOKEN_USER pTokenUser = reinterpret_cast<PTOKEN_USER>(buffer);
                bRes = GetTokenInformation( hToken, 
                                            TokenUser, 
                                            pTokenUser, 
                                            dwBufferSize,
                                            &dwBufferSize)

                if (bRes) 
                {
                    if (IsValidSid(pTokenUser->User.Sid)) 
                    {
                        PSID pSid = pTokenUser->User.Sid;
                        LPTSTR pszSID = NULL;
                        bRes = ConvertSidToStringSid(pSid, &pszSID);
                        if (bRes)
                        {
                            csSID = pszSID;
                        }
                        if (pszSID)
                        {
                            LocalFree( pszSID );
                            pszSID = NULL;
                        }                        
                    }
                }
                delete []buffer;
                buffer = NULL;
            }
        }        
    }

    if (hToken)
    {
        CloseHandle( hToken );
        hToken = NULL;
    }

    return bRes;
}

 

分享到:
评论

相关推荐

    vc++ 获得Windows系统的登录用户名

    vc++编程获得Windows系统的登录用户名,很多都是Administrator,如上图的编译所示,这个要跟系统的SAM相关了,因为Windows的登录信息存取在Windows目录的SAM文件中,这个文件是经过特殊加密的,一般情况下不...

    whoami命令 打印当前登录用户

    这个工具可以用来获取本地系统上当前用户(访问令牌)的用户名和组信息,以及相应的安全标识符(SID)、声明、本地系统上当前用户的权限、登录标识符(登录 ID)。 whoami命令显示自身的用户名称,本指令相当于执行”id -...

    PC电脑微信c#源代码

    微信PC版协议实现,本人亲自调试通过,不会出现1100的错误,值得你做二次开发: ...5.初始化微信信息获得当前用户的信息 6.获得所有的好友列表 7.保持与服务器的信息同步 8.获得别人发来的消息 9.向用户发送消息

    php查看当前Session的ID实例

    有两种方法可以得到用户的session id,第一是使用session_id()函数,另外一种是使用内置的常量SID获得,SID包含了session id和session值 &lt;?php session_start(); print("&lt;html&gt;&lt;b&gt;"); $sid = session_...

    WindowsServer网络安全讲义(PPT-48页).pptx

    用户帐户和计算机帐户(以及组)也称为安全主体,是被自动指派了安全标识符 (SID)(可用于访问域资源)的目录对象。 用户或计算机帐户用于: 验证用户或计算机的身份:用户帐户使用户能够利用经域验证后的标识登录到...

    服务器部署方案(1).doc

    出现检测信息条,用户获取以前的安装信息,最后出现"可用产品对话框",要求选择 安装产品类型,可以选择安装数据库、管理服务器或客户端。这里选择"Oracle9i Database 9.0.1.1.1",单击"下一步"。 5.在 "安装类型...

    social:社交网络 API 包装器和工具

    根据社交网络的 SID 为会话生成唯一的用户 UID 和唯一的 SESSION_ID 社交媒体支持: vk.com odnoklassniki.ru 支持的 API 方法: 获取用户资料 获取用户的好友列表 获取好友资料 使用用户余额(仅适用于 vk.com...

    PHP Session变量不能传送到下一页的解决方法

    下面我解释一下: Session储存于服务器端(默认以文件方式存储session),根据客户端提供的session id来得到用户的文件,取得变量的值,session id可以使用客户端的Cookie或者Http1.1协议的Query_String(就是访问的...

    sysinternals 工具集合 (20090226版)

     PsGetSid是一个远程获取账号sid信息的工具。它是Sysinternals 命令行工具不断完善的 PsTools 工具包的一部分。  PsKill  Windows NT/2000 没有附带命令行终止实用工具。您可以从 Windows NT 或 Win2K 资源工具包...

    ORACLE之常用FAQ V1.0(整理)

    [Q]怎么获得当前的SCN 20 [Q]ROWID的结构与组成 20 [Q]怎么样获取对象的DDL语句 20 [Q]如何创建约束的索引在别的表空间上 21 [Q]怎么知道那些表没有建立主键 21 [Q]dbms_output提示缓冲区不够,怎么增加 22 [Q]怎么...

    Windows Server 2008系统管理视频教程csdn.txt

    3-2用户的SID和用户的身份09:34 3-3禁用管理员02:29 3-4创建隐藏账户08:56 3-5创建不属于管理员组的管理员06:54 3-6使用密码重设盘恢复密码06:16 3-7系统内置的组和自定义组04:05 3-8系统内置的组和自定义组04:05 3-...

    Get-EndpointInformation:收集各种WMICIM信息并以CSS格式的XML显示的PowerShell脚本

    当前显示有关以下内容的信息: 主机名上次启动时间操作系统的BIOS 芯片组PSVersionTable 逻辑磁盘网络适​​配器主机文件已安装的应用程序Windows服务待办事项: 收集用户信息,SID 公用IP已收集但未显示 捕获...

    SysinternalsSuite windows工具集合

    PsGetSid: 显示计算机或用户的 SID . PsInfo: 获取系统信息. PsKill: 终止本地或远程进程. PsList: 显示进程和线程有关的信息. PsLoggedOn: 显示已登陆系统的用户 PsLogList: 转储事件日志记录. PsPasswd: ...

    DX1.5 手机正式版

    //获取是否开启了自动转义 define(‘ICONV_ENABLE’, function_exists(‘iconv’));//iconv函数是否存在 define(‘MB_ENABLE’, function_exists(‘mb_convert_encoding’));//mb_convert_encoding函数是否存在 ...

    Access+2000中文版高级编程

    6.3.1 与当前数据库连接 118 6.3.2 与另一个数据库连接 119 6.4 使用ADO创建记录集 120 6.4.1 打开简单的记录集 120 6.4.2 循环搜索和编辑记录集 122 6.4.3 创建永久记录集 124 6.4.4 使用RecordCount, ...

    Access 2000中文版高级编程(part1)

    6.3.1 与当前数据库连接 118 6.3.2 与另一个数据库连接 119 6.4 使用ADO创建记录集 120 6.4.1 打开简单的记录集 120 6.4.2 循环搜索和编辑记录集 122 6.4.3 创建永久记录集 124 6.4.4 使用RecordCount, BOF和...

    SQL培训第一期

    当前用户表所有列信息,搜索列所在的表: select * from user_tab_columns t where t.column_name like '%ORGANCODE%'; 2.1.5.3 user_tablespaces 当前用户表空间 2.1.5.4 dba_users 数据库所有用户 2.1.5.5 dba_...

    Windows Sysinternals Suite v2019.06.29.zip

    显示计算机或用户的 SID。 PsInfo 获取有关系统的信息。 PsKill 终止本地或远程进程。 PsList 显示有关进程和线程的信息。 PsLoggedOn 显示登录到某个系统的用户。 PsLogList 转储事件日志记录。 ...

    ORACLE数据库日常维护知识点总结

    就可以查出一些表,然后根据这些表就可以获得会话信息。 像这样就是 查询当前正在操作的会话: SELECT SID, SERIAL#, STATUS, USERNAME, SCHEMANAME, OSUSER,TERMINAL, MACHINE, PROGRAM, A.NAME FROM V$SESSION S,...

    Sysinternals 实用程序全集 (完整版 49.2M)

    了解每个人都一直在谈论的计算机 SID 问题并获取免费的计算机 SID 更改器 NewSID。 Process Explorer 找出进程打开了哪些文件、注册表项和其他对象以及已加载哪些 DLL 等信息。这个功能异常强大的实用工具甚至可以...

Global site tag (gtag.js) - Google Analytics