编程语言
首页 > 编程语言> > 如何使用C#读取“uSNChanged”属性

如何使用C#读取“uSNChanged”属性

作者:互联网

我想通过使用C#的ActiveDirectory中的uSNChanged值获取最后修改或创建的属性…我也试图找到uSNChanged的最大值,你能帮我找出解决方案吗?谢谢

解决方法:

有两种方法可以通过.NET检索uSNChanged属性:

>包含对COM库的引用:“Active DS Type Library”,然后您需要使用IADsLargeInterger来检索值并最终将其转换为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;
}

>仅使用C#转换值.感谢Simon Gilbee,我们有这个选项:

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;
}

我强烈建议您使用选项#2以避免遗留ActiveDs库的问题,并且在this list之后不需要答案.

标签:c,active-directory,directoryservices
来源: https://codeday.me/bug/20190630/1333255.html