V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
badacook
V2EX  ›  C#

C# 调用 ADUser Constructors

  •  
  •   badacook · 2020-12-02 21:45:51 +08:00 · 1738 次点击
    这是一个创建于 1212 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大家好,这里请教大家一个问题
    一个任务中,使用 C#定义一个方法,输入一个字符串,相当于用户名
    返回一个对象,要求该对象具备 ADUser 常用的属性,能否不用自定义 class
    此处可能涉及 C#调用相关 Windows API 如 ADUser Constructors
    可参阅这篇文章 https://www.cnblogs.com/benwu/p/4132026.html
    不知道能否实现,还望各位前辈不吝赐教,谢谢了
    4 条回复    2020-12-06 10:56:58 +08:00
    forgottencoast
        1
    forgottencoast  
       2020-12-03 00:15:50 +08:00
    你先说你要调用那个 API,你找到了吗?文档链接呢?
    badacook
        2
    badacook  
    OP
       2020-12-03 00:56:26 +08:00
    ADUser Constructors 就这个啊,我是想在 C#中创建一个对象,具有 ADUser 常用的属性,能否不用自定类,直接加载
    Assembly:Microsoft.ActiveDirectory.Management.dll ,使用 ADUser 构造函数完成,就是想问一下 这个思路是否可行
    forgottencoast
        3
    forgottencoast  
       2020-12-04 22:55:39 +08:00
    如果你看不到源代码的话,你不知道这个类的设计是否符合你的要求,虽然属性可以使用,但是里面可能会包含一些逻辑处理,这里面可能会在你的程序中引入 bug 。
    而且 ADUser 这个类的继承关系很复杂,所以正常来说肯定是不建议这样用的,不过你非要这样用也不是不可以。
    况且自己自定义一个类也是非常简单的事情。
    badacook
        4
    badacook  
    OP
       2020-12-06 10:56:58 +08:00
    我已经使用 ILSpy 反编译工具,查看了 Microsoft.ActiveDirectory.Management.dll 中 class ADUser 的源码,如下:

    实际应用中 我不会这样做,这样尝试 主要是练习:
    C#调用 C#的非托管库及构造函数,并打印对象的属性名称和方法
    但是我尝试着 C# 平台调用( P / Invoke ) 非托管库的方法,但构造函数的调用语法好像有不同
    我还是没实现练习效果,不知是否可以给出该实例的示例代码,以供参考,谢谢了
    其中 Microsoft.ActiveDirectory.Management.dll 已分享至网盘
    链接: https://pan.baidu.com/s/1sLFBKPla6AvQ9OZc7uFQ2Q 提取码: d3eu

    using Microsoft.ActiveDirectory.Management.Commands;
    using System;
    using System.Security.Principal;
    namespace Microsoft.ActiveDirectory.Management
    {
    public class ADUser : ADAccount
    {
    public string GivenName
    {
    get
    {
    return (string)base.GetValue("GivenName");
    }
    set
    {
    base.SetValue("GivenName", value);
    }
    }
    public string Surname
    {
    get
    {
    return (string)base.GetValue("Surname");
    }
    set
    {
    base.SetValue("Surname", value);
    }
    }
    static ADUser()
    {
    ADEntity.RegisterMappingTable(typeof(ADUser), ADUserFactory<ADUser>.AttributeTable);
    }
    public ADUser()
    {
    }
    public ADUser(string identity) : base(identity)
    {
    }
    public ADUser(Guid guid) : base(guid)
    {
    }
    public ADUser(SecurityIdentifier sid) : base(sid)
    {
    }
    public ADUser(ADObject identity) : base(identity)
    {
    }
    }
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2871 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:11 · PVG 21:11 · LAX 06:11 · JFK 09:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.