如何使用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