Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >windows logon API

windows logon API

作者头像
阿新
发布于 2018-04-12 09:57:47
发布于 2018-04-12 09:57:47
9800
举报
文章被收录于专栏:c#开发者c#开发者

using System; using System.Collections.Generic; using System.Text; using System.ComponentModel;

using System.Security; using System.Security.Principal; using System.Runtime; using System.Runtime.InteropServices;

using System.Web; using System.Web.Security;

namespace Impersonate {     [StructLayout(LayoutKind.Sequential,CharSet=CharSet.Auto)] struct _USE_INFO_2 {   internal string ui2_local;   internal string ui2_remote;   internal IntPtr ui2_password; // don't pass a string or StringBuilder here!!   internal uint ui2_status;   internal uint ui2_asg_type;   internal uint ui2_refcount;   internal uint ui2_usecount;   internal string ui2_username;   internal string ui2_domainname; } class WinNet {   [DllImport("netapi32", CharSet=CharSet.Auto, SetLastError=true), SuppressUnmanagedCodeSecurityAttribute]   static extern int NetUseAdd(    string UncServerName, // not used    int Level,  // use info struct level 1 or 2    IntPtr Buf,  // Buffer    ref int ParmError   );   const uint USE_WILDCARD = 0xFFFFFFFF;

  // Establish a use record   public static void UseRecord(string resource, string user, string password, string domain)   {    int ret = 0;    int paramError = 0;    _USE_INFO_2 use2 = new _USE_INFO_2();    IntPtr pBuf = IntPtr.Zero;    use2.ui2_password = IntPtr.Zero;    try    {     pBuf = Marshal.AllocHGlobal(Marshal.SizeOf(use2));     use2.ui2_local = null;     use2.ui2_asg_type = USE_WILDCARD;     use2.ui2_remote = resource;     use2.ui2_password = Marshal.StringToHGlobalAuto(password);     use2.ui2_username = user;     use2.ui2_domainname = domain;     Marshal.StructureToPtr(use2, pBuf, true);     ret = NetUseAdd(null, 2, pBuf, ref paramError);     if(ret != 0)     {          throw new Exception(new Win32Exception(Marshal.GetLastWin32Error()).Message);     }    }    finally    {     Marshal.FreeHGlobal(use2.ui2_password);     Marshal.FreeHGlobal(pBuf);    }   } }

    class Program     {         [System.Runtime.InteropServices.DllImport("advapi32.dll")]         public static extern int LogonUser(String lpszUserName,             String lpszDomain,             String lpszPassword,             int dwLogonType,             int dwLogonProvider,             ref IntPtr phToken);

        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]         public static extern int DuplicateToken(IntPtr hToken,             int impersonationLevel,             ref IntPtr hNewToken);

        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]         public static extern bool RevertToSelf();

        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]         public static extern bool CloseHandle(IntPtr handle);

        const int LOGON32_PROVIDER_DEFAULT = 0;         const int LOGON32_LOGON_INTERACTIVE = 2;

        static public WindowsImpersonationContext wic;

        //static void Main(string[] args)         //{         //    IntPtr lnToken;

        //    if (ImpersonateValidUser("michaell", "cmp-0641", "wilma"))         //    {         //        using (wic)         //        {

        //            string dir = @"\\cmp-0641\C$\" + "Test";         //            System.IO.Directory.CreateDirectory(dir);         //        }

        //        StringBuilder sb = new StringBuilder(80, 80);         //        RevertToSelf();         //        //CloseHandle( lnToken );         //    }         //    else         //    {

        //    }         //    return;         //}

        static public bool ImpersonateValidUser(String userName, String domain, String password)         {             WindowsIdentity wi;             IntPtr token = IntPtr.Zero;             IntPtr tokenDuplicate = IntPtr.Zero;

            if (RevertToSelf())             {                 if (LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE,                     LOGON32_PROVIDER_DEFAULT, ref token) != 0)                 {                     if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)                     {                         wi = new WindowsIdentity(tokenDuplicate);                         wic = wi.Impersonate();                         if (wic != null)                         {                             CloseHandle(token);                             CloseHandle(tokenDuplicate);                             return true;                         }                     }                 }             }             if (token != IntPtr.Zero)                 CloseHandle(token);             if (tokenDuplicate != IntPtr.Zero)                 CloseHandle(tokenDuplicate);             return false;         }

    }

    public class LogOnUser     {         //LogonUser parameters         [DllImport("advapi32.dll")]         private static extern bool LogonUser(String lpszUsername,                                                 String lpszDomain,                                                 String lpszPassword,                                                 int dwLogonType,                                                 int dwLogonProvider,                                                 ref IntPtr phToken);

        //CloseHandle parameters. When you are finished,         //free the memory allocated for the handle.         [DllImport("kernel32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]         private static extern bool CloseHandle(IntPtr handle);

        public static WindowsIdentity GetWindowsIdentity(string pUserName, string pDomain)         {             return null;         }

        public static WindowsIdentity GetWindowsIdentity(string pUserName, string pDomain, string pPassword)         {             IntPtr tokenHandle = IntPtr.Zero;

            try             {                 const int LOGON32_PROVIDER_DEFAULT = 0;                 const int LOGON32_LOGON_NETWORK = 5;

                //Call LogonUser to obtain a                 //handle to an access token                 bool returnValue = LogonUser(pUserName, pDomain,                              pPassword,                             LOGON32_LOGON_NETWORK,                            LOGON32_PROVIDER_DEFAULT,                             ref tokenHandle);

                if (false == returnValue)                 {                     return null;                 }

                ////Check the identity                 //Console.WriteLine("Before impersonation: " +                 //         WindowsIdentity.GetCurrent().Name);

                //Create a WindowsIdentity from the impersonation                 //token, then impersonate the user.                 WindowsIdentity newId;                 newId = new WindowsIdentity(tokenHandle);                 return newId;             }

            catch (Exception ex)             {                 // TODO log the Exception Message.                 return null;             }         }

    }

}

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2008-05-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
火山引擎数智平台VeDI发布《数据智能知识图谱》
大数据文摘作品 近日,火山引擎数智平台(VeDI)正式发布《数据智能知识图谱》(以下简称「图谱」),内容覆盖了包括数据存储计算、数据分析加速、数据研发治理、数据洞察分析,数据辅助决策、数据赋能营销等企业数据全生命周期的管理与应用。 点击文末「阅读原文」,下载高清图谱。 更强劲的数据基座能力 随着企业数字化转型的需求愈加强烈,数据存储计算作为转型最底层的基座也更加受到关注。过去,传统湖仓一体时常发生数据源数据入湖时效性差、多源数据管理难等问题;而在批流一体方面,由于批流存储引擎不统一导致批流任务分开处理
大数据文摘
2023/04/10
7230
火山引擎数智平台VeDI发布《数据智能知识图谱》
字节跳动基于DataLeap的DataOps实践
本文根据 ArchSummit 全球架构师峰会(深圳站)来自抖音数据研发负责人王洋的现场分享实录整理而成(有删减),本次分享主要包含字节跳动数据研发的模式与挑战、DataOps理念在字节的具象 、DataOps产品化及落地、最佳实践、未来展望五个部分,分享内容皆来自于字节跳动业务实践经验。
王知无-import_bigdata
2023/09/06
1K0
字节跳动基于DataLeap的DataOps实践
MediaCrawler,轻松爬取抖音小红书评论数据!
https://github.com/NanmiCoder/MediaCrawler
小F
2024/04/15
3.2K0
MediaCrawler,轻松爬取抖音小红书评论数据!
ClickHouse为啥在字节跳动能这么火? | 卓越技术团队访谈录
ClickHouse 开源于 2016 年,在一众大数据计算引擎里算是一个后起之秀。但凭借性能方面的突出优势,这几年 ClickHouse 在分析型数据库领域可谓风生水起。
深度学习与Python
2022/04/19
6610
ClickHouse为啥在字节跳动能这么火? | 卓越技术团队访谈录
因为“文化堕落”,印度“封杀”抖音
作为近两年最受人们关注的手机软件之一,抖音已经成为了很多年轻人的最爱,根据最新的数据显示,抖音在国内的日活达到了2.5亿,成为了当之无愧的新一代国民APP。
谭庆波
2019/03/06
1K0
因为“文化堕落”,印度“封杀”抖音
首次揭秘,字节跳动数据平台为什么不选“纯中台制”
面对个性化、多样化数据,以及企业内部的数据孤岛和业务孤岛,如果有一套能够处理海量数据的基础设施,那么在很大程度上可以挖掘并分析出对业务发展有价值的信息,从而帮助企业更快地作出数据驱动的决策,更快地推出适应用户 / 客户需求的产品。
深度学习与Python
2022/03/01
1.1K0
3D打印的儿时记忆 - 机械臂音画糖人
此次机械臂音画糖人的项目是在同济大学D&I学院-机械臂实验室完成的一次团队实践,希望通过结合机械臂3D打印的技术,融入互动模式来致敬中国的传统老手工艺糖画,基于此来探索设计、艺术和技术结合的应用场景的实验性尝试。
UDM Lab
2020/11/05
1.1K0
3D打印的儿时记忆 - 机械臂音画糖人
把抖音、今日头条背后的技术开放给企业,字节跳动揭秘A/B测试产品
机器之心发布 机器之心编辑部 「A/B 测试不一定是最好的评估方法。它不是万能的,但不会 A/B 测试肯定是不行的。」 4 月 20 日,首个火山引擎技术开放日在北京方恒时尚中心举办,字节跳动副总裁杨震原以《聊聊数据驱动和用 A/B 测试解决问题》为题,分享了他对于 A/B 测试的理解。 杨震原称,A/B 测试是字节跳动一项非常基础的工具,从公司成立之初就在使用,支撑了抖音、今日头条等产品的增长迭代。目前,字节跳动 A/B 测试每日新增 1500 + 实验,服务于 400 多项大大小小的业务,累计做了 70
机器之心
2023/03/29
4580
把抖音、今日头条背后的技术开放给企业,字节跳动揭秘A/B测试产品
“今日头条”名字是AB测试定的?字节跳动用九年时间打造出了怎样的数据平台
作者 | 罗旋 整理 | 褚杏娟 8 月 18 日,在北京·富力万丽酒店举办的 ArchSummit 全球架构师峰会上,字节跳动数据平台负责人罗旋老师,分享了字节跳动从 0 到 1 的数据平台建设过程。从最简单的数据处理方法,到国内最前沿的数据处理手段,字节数据平台经历了多阶段的发展过程,也有很多解决问题的思路值得技术人关注。以下是演讲整理,以飨读者。 1 数据平台发展路径:大而全?还是从业务问题出发? 大家好,我是罗旋,来自字节跳动数据平台。今天我想跟大家分享的主题是《字节跳动数据平台的实践与演
深度学习与Python
2023/03/29
4900
“今日头条”名字是AB测试定的?字节跳动用九年时间打造出了怎样的数据平台
Facebook最新研究:4小时让机器人学会2千种操作
总是需要用一只手抓住瓶子的底部,同时用另一只手抓住瓶盖并拧开,这种对人类来说小儿科的操作,让机器来做就要费很多事。这种高级操作步骤,就是所谓的Schema。
新智元
2019/10/10
5160
Facebook最新研究:4小时让机器人学会2千种操作
这是全球首个自适应机械臂:精准抗干扰,应用场景可迁移,斯坦福华人团队打造
融合力觉、视觉和深度学习等物理及AI技术,还要有通用性、智能程度与完成复杂任务的能力,可以在不确定工作环境中完成出色的工业级表现。
量子位
2019/07/15
9910
这是全球首个自适应机械臂:精准抗干扰,应用场景可迁移,斯坦福华人团队打造
抖音快手,电商迈入同一条河流
在淘宝、京东、拼多多的三方拉锯之中,电商购物早已经成为一种生活方式,而且也让电商的形式越来越多样。不论是基于亲友关系的社交电商,还是砍价声叫卖声此起彼伏的直播电商,都成为时下火热​的电商形式。
刘旷
2021/03/31
3390
抖音、快手、新东方来袭,旅游行业战火再起?
低调了许久的旅游行业,终于迎来了大复苏,旅客的出游热情也再度被点燃,出游人数呈现出不断攀升态势。以“十一”黄金周为例,据文化和旅游部数据中心统计,本次黄金周,国内旅游出游人数8.26亿人次,按可比口径同比增长71.3%,按可比口径较2019年增长4.1%;实现国内旅游收入7534.3亿元,按可比口径同比增长129.5%,按可比口径较2019年增长1.5%。
刘旷
2023/11/30
1820
数据湖技术在抖音近实时场景的实践
首先,数据湖可存储海量、低加工的原始数据。在数据湖中开发成本较低,可以支持灵活的构建,构建出来的数据的复用性也比较强。
从大数据到人工智能
2022/11/30
7720
数据湖技术在抖音近实时场景的实践
CV 加持的工业检测,从算法选型到模型部署
随着AI技术的逐渐成熟,越来越多的传统企业希望借助AI技术,实现智能质检。传统质检更多依靠有经验的人工劳动力来实现质量检查甚至分拣,但这样的方式,许多场景会有检查效率低,审核质量不稳定,人力投入成本高且难招聘等诸多问题。
CV君
2020/05/26
1.6K0
CV 加持的工业检测,从算法选型到模型部署
啫喱被抖音仔仔“致敬”,元宇宙知识产权谁来守护?
字节跳动一直对社交心心念,元宇宙被其视作新的切口。继去年以90亿元高价收购VR制造商Pico后,字节跳动先后上线元宇宙社交产品“Pixsoul”、虚拟人社交APP“派对岛”,投资XR眼镜品牌“李未可”。日前,抖音又推出社交新功能“抖音仔仔”,进入新版抖音消息界面,用户可开启抖音仔仔,通过捏脸、换装创造出专属的虚拟人物形象,还能选择不同“心情”,并将其保存为动态头像,也可邀请好友在不同场景下合拍。 不过,玩过抖音仔仔的很多网友都发现,这是一款“似曾相识”的应用。没错,其在核心玩法上虔诚地“致敬”了今年2月“
罗超频道
2022/08/26
7760
啫喱被抖音仔仔“致敬”,元宇宙知识产权谁来守护?
瘫痪患者借助脑机接口可进行数字绘画
一幅由瘫痪参与者创作的数字绘画。(来源:B M Dekleva et al J. Neural Eng. 10.1088/1741-2552/ac16b2)
脑机接口社区
2022/08/18
4030
瘫痪患者借助脑机接口可进行数字绘画
为什么说是刷抖音,玩快手?
毕业后一直做数据产品经理七八年了,竞品分析一直在做,比如各家BI产品对比分析、用户行为分析产品比较等,近期参加一个C端产品经理培训课程,关于用户研究的内容很有感触,分析的思路、思考的深度,值得B端产品学习,在此分享给大家。
数据干饭人
2022/07/01
5890
为什么说是刷抖音,玩快手?
抖音后端,实习offer。
阿秀一直强调过实习的重要性,很早以前就强调过,能去实习的机会一定要优先去实习,校招求职这块实习的加分项很大。
拓跋阿秀
2023/01/05
7590
抖音后端,实习offer。
ByteHouse 基于 ClickHouse 优化实现实时数仓场景突破
ByteHouse是火山引擎上的一款云原生数据仓库,为用户带来极速分析体验,能够支撑实时数据分析和海量数据离线分析。便捷的弹性扩缩容能力,极致分析性能和丰富的企业级特性,助力客户数字化转型。
java进阶架构师
2023/03/02
8700
ByteHouse 基于 ClickHouse 优化实现实时数仓场景突破
推荐阅读
相关推荐
火山引擎数智平台VeDI发布《数据智能知识图谱》
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档