protected override void SetPropertyValue(IOguObject srcOguObject, string srcPropertyName, DirectoryEntry entry, string targetPropertyName, string context, SetterContext setterContext) { int userAccountControl = Convert.ToInt32(entry.Properties[targetPropertyName].Value); // 可能为null int result = userAccountControl; if (userAccountControl == 0 || entry.IsBounded() == false) { result = (int)(ADS_USER_FLAG.ADS_UF_NORMAL_ACCOUNT | ADS_USER_FLAG.ADS_UF_PASSWD_NOTREQD); entry.Properties[targetPropertyName].Value = result; setterContext["UACPropertySetter_LazySetProperties"] = true; } else { MergeUACValue(srcOguObject, srcPropertyName, entry, targetPropertyName, context); } }
protected override void SetPropertyValue(IOguObject srcOguObject, string srcPropertyName, DirectoryEntry entry, string targetPropertyName, string context, SetterContext setterContext) { string srcPropertyValue = GetNormalizeddSourceValue(srcOguObject, srcPropertyName, context); string targetPropertyValue = GetNormalizeddTargetValue(entry, targetPropertyName, context); if (srcOguObject.FullPath == SynchronizeContext.Current.SourceRootPath) { srcPropertyValue = new PathPartEnumerator(SynchronizeContext.Current.TargetRootOU).Last(); //极其特别,不一定可靠,权限中心应限制更改这一组织的名称和位置。 } else { string relativePath = SynchronizeHelper.GetRelativePath(srcOguObject); if (relativePath.IndexOf('\\') < 0) { srcPropertyValue = SynchronizeContext.Current.GetMappedName(srcPropertyValue); } } if (srcPropertyValue != targetPropertyValue && entry.IsBounded() == true) { TraceItHere(srcOguObject, srcPropertyName, entry, targetPropertyName, context, srcPropertyValue, targetPropertyValue); entry.CommitChanges(); try { entry.Rename(srcOguObject.ObjectType.SchemaTypeToPrefix() + "=" + ADHelper.EscapeString(srcPropertyValue)); } catch (DirectoryServicesCOMException ex) { if (ex.ErrorCode == -2147019886) { //对象已存在 entry.Rename(srcOguObject.ObjectType.SchemaTypeToPrefix() + "=TMP" + Environment.TickCount.ToString("X")); SynchronizeContext.Current.DelayActions.Add(new DelayRenameAction(srcOguObject, entry.NativeGuid)); } else { throw; } } } }