How to read “uSNChanged” property using C#

一个人想着一个人 提交于 2019-12-19 03:32:34

问题


I want to get the last modified or created attributes via the uSNChanged value in ActiveDirectory using C# ... I was also trying to find the max value of uSNChanged, can you help me to find out the solution? Thanks


回答1:


There are two ways to retrieve the uSNChanged property via .NET:

  1. Include a reference to a COM library: "Active DS Type Library", then you need to use the IADsLargeInterger to retrieve the value and finally convert it to a long. For example:

    IADsLargeInteger li_ad = (IADsLargeInteger)oUser.Properties["USNChanged"].Value;
    long l_uChanged = GetLongFromLargeInteger( li_ad );
    
    static long GetLongFromLargeInteger(  IADsLargeInteger  Li )
    {
        long retval = Li.HighPart;
        retval <<=32;
        retval |=(uint)Li.LowPart;
        return retval;
    }
    
  2. Translate the values only using C#. Thanks to Simon Gilbee, we have this option:

    long usnChanged = CovertADSLargeIntegerToInt64(oUser.Properties["USNChanged"].Value);
    
    public static Int64 ConvertADSLargeIntegerToInt64(object adsLargeInteger)
    {
      var highPart = (Int32)adsLargeInteger.GetType().InvokeMember("HighPart", System.Reflection.BindingFlags.GetProperty, null, adsLargeInteger, null);
      var lowPart  = (Int32)adsLargeInteger.GetType().InvokeMember("LowPart",  System.Reflection.BindingFlags.GetProperty, null, adsLargeInteger, null);
      return highPart * ((Int64)UInt32.MaxValue + 1) + lowPart;
    }
    

I highly recommend you go with Option #2 to avoid problems with the legacy ActiveDs library and won't need answers off this list.




回答2:


i got the solution guys,we can get a maximum usnchanged value of a domaincontroller through this attribute HighestCommittedUsn



来源:https://stackoverflow.com/questions/10958278/how-to-read-usnchanged-property-using-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!