`

如何在c#程序中模拟域帐户进行登录操作

阅读更多

代码加注释:

01 using System;
02 using System.Collections.Generic;
03 using System.Linq;
04 using System.Text;
05 using System.Security.Principal;
06 using System.Runtime.InteropServices;
07 using System.IO;
08   
09 namespace ConsoleApplication3
10 {
11     internal static class WinLogonHelper
12     {
13         /// <summary>
14         /// 模拟windows登录域
15         /// http://www.cnblogs.com/yukaizhao/
16         /// </summary>
17         [DllImport("advapi32.DLL", SetLastError = true)]
18         public static extern int LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
19     }
20   
21     class Program
22     {
23         static void Main(string[] args)
24         {
25             IntPtr admin_token = default(IntPtr);
26             WindowsIdentity wid_admin = null;
27             WindowsImpersonationContext wic = null;
28   
29             //在程序中模拟域帐户登录
30             if (WinLogonHelper.LogonUser("uid", "serverdomain", "pwd", 9, 0, ref admin_token) != 0)
31             {
32                 using (wid_admin = new WindowsIdentity(admin_token))
33                 {
34                     using (wic = wid_admin.Impersonate())
35                     {
36                         //假定要操作的文件路径是10.0.250.11上的d:\txt.txt文件可以这样操作
37                         FileInfo file = new FileInfo(@"\\10.0.250.11\d$\txt.txt");
38                         //想做什么操作就可以做了
39                     }
40                 }
41             }
42         }
43     }
44 }

模拟域帐户之后,就有了模拟用户的权限,这里千万要注意安全!

1
1
分享到:
评论

相关推荐

    c# 获取域 用户 组 信息

    在模拟域目录结构时,你可以将`DirectoryEntry`对象和其子对象构建成树形结构,可以使用递归方法,对每个OU创建一个树节点,然后将子OU或用户/组作为子节点添加。这样,就可以在程序中重现AD的层级结构。 以下是一...

    在SYSTEM权限下以当前用户权限运行程序

    在Windows操作系统中,权限分为不同级别,其中SYSTEM权限是最高的,它允许程序访问系统的核心资源,包括硬件、注册表、系统服务等。而当前用户权限则根据登录的用户账户有不同的权限级别。 描述中提到的 "ap.exe ...

    ldap连接测试工具源代码C#版

    通过阅读和分析这些源代码,开发者可以学习如何在C#中与LDAP服务器进行通信,以及如何构建类似的工具。 总结起来,这个C# LDAP连接测试工具是一个实用的开发辅助软件,尤其对于需要处理Windows域环境的系统管理员和...

    根据攻防以及域信息收集经验dump快而有用的域信息.zip

    1. **域枚举工具**:C#编写的程序可以用于枚举域中的用户、组、计算机、OU(组织单元)等对象,获取其属性信息,如SID(安全标识符)、成员关系等。 2. **DNS解析工具**:通过C#实现的DNS查询功能,可以获取域的DNS...

    JAVA_C#程序员面试宝典2

    例如,转账操作可能涉及从一个账户减去金额并同时向另一个账户添加相同金额,这两个操作需要在一个事务中完成。 7. **final, finally, finalize的区别**:final关键字用于声明不可变的变量或不可重写的方法;...

    C#编程经验技巧宝典

    72 &lt;br&gt;0102 将字符串首字母转换大写 72 &lt;br&gt;0103 如何进行字节数组和字符串的相互转换 72 &lt;br&gt;0104 如何把一个按空格分割的字符串存储在一个ArrayList数组中 73 &lt;br&gt;4.2 获取字符串信息 73 ...

    Howto (Almost) Everything In Active Directory via CSharp.pdf

    ### 如何(几乎)通过C#操作Active Directory中的所有事务 #### 引言 当涉及到通过编程方式访问Microsoft的Active Directory时,许多开发者似乎在整合各个部分以完成所需任务方面遇到了不少困难。由于存在多种与...

    实现用户身份验证Windows

    Windows身份验证基于Windows操作系统提供的安全性,它利用本地或域控制器的用户账户信息进行身份验证。NTLM是一种较老的身份验证协议,而Kerberos是更安全的选择,尤其是在域环境中。这两种协议都无需用户提供明文...

    Visual_Studio.NET相关词汇中英翻译

    管理员模式是指在操作系统中以最高权限运行的应用程序或用户账户。在管理员模式下,用户可以执行包括安装软件、更改系统设置等在内的各种高级操作。 #### 通知接收 (Advise Sink) 通知接收是指在COM编程中的一种...

    面试题.doc

    设置操作系统通常包括:安装环境准备,选择合适的安装介质(如光盘、USB驱动器或网络ISO),启动计算机进入安装程序,选择语言和地区设置,接受许可协议,选择安装类型(全新安装或升级),分区磁盘,设置用户账户和...

    使用凭据连接到UNC路径

    通过上述步骤,我们可以编写一个C#程序,使用指定的用户凭据连接到UNC路径,这对于需要在不同权限环境中访问网络资源的场景非常有用。提供的`Connect-to-a-UNC-Path-with-Credentials.pdf`文档可能详细解释了这个...

    asp.net初级面试题2

    2. **重载**:是指在同一个作用域内,允许存在多个同名函数,但这些函数的参数列表不同(数量、类型或顺序)。 3. **值类型与引用类型**:值类型存储在栈中,直接存储值;引用类型存储在堆中,存储的是指向对象的...

    程序员英语手册

    - **应用场景**:在企业级软件开发中,为了实现不同应用程序间的数据共享与流程自动化。 **2. Abstract 抽象的** - **定义**:在编程中指非具体存在的概念,如抽象类、抽象方法等,用于提供一个通用的模板或骨架,...

    使用表单身份验证的Windows身份验证

    在登录按钮的事件处理程序中,可以使用`System.Web.Security.WindowsIdentity`类的静态方法`Impersonate()`来模拟用户: ```csharp protected void btnLogin_Click(object sender, EventArgs e) { string username...

Global site tag (gtag.js) - Google Analytics