private static Dictionary <int, ReplPropertyMetaDataItem> ConvertByteToMetaDataInfo(byte[] data) { var output = new Dictionary <int, ReplPropertyMetaDataItem>(); //Trace.WriteLine("Beginning to analyze a replpropertymetadata data " + Convert.ToBase64String(data)); int version = BitConverter.ToInt32(data, 0); if (version != 1) { Trace.WriteLine("trust info version incompatible : " + version); return(output); } int recordcount = BitConverter.ToInt32(data, 8); //Trace.WriteLine("Number of records to analyze: " + recordcount); int pointer = 16; for (int i = 0; i < recordcount; i++) { var item = new ReplPropertyMetaDataItem(); item.AttrType = BitConverter.ToInt32(data, pointer); item.Version = BitConverter.ToInt32(data, pointer + 4); long filetime = BitConverter.ToInt64(data, pointer + 8) * 10000000; item.LastOriginatingChange = DateTime.FromFileTime(filetime); byte[] guid = new byte[16]; Array.Copy(data, pointer + 16, guid, 0, 16); item.LastOriginatingDsaInvocationID = new Guid(guid); item.UsnOriginatingChange = BitConverter.ToInt64(data, pointer + 32); item.UsnLocalChange = BitConverter.ToInt64(data, pointer + 40); pointer += 48; output[item.AttrType] = item; } return(output); }
private static Dictionary <string, ReplPropertyMetaDataItem> ConvertStringArrayToMetaDataInfo(IEnumerable <string> data) { var output = new Dictionary <string, ReplPropertyMetaDataItem>(); foreach (var xml in data) { var metaData = new ReplPropertyMetaDataItem(); XmlDocument doc = new XmlDocument(); doc.LoadXml(xml.Replace('\0', ' ')); foreach (XmlNode child in doc.DocumentElement.ChildNodes) { switch (child.Name) { case "pszAttributeName": metaData.AttrName = child.InnerText; break; case "dwVersion": metaData.Version = int.Parse(child.InnerText); break; case "ftimeLastOriginatingChange": metaData.LastOriginatingChange = DateTime.Parse(child.InnerText); break; case "uuidLastOriginatingDsaInvocationID": metaData.LastOriginatingDsaInvocationID = new Guid(child.InnerText); break; case "usnOriginatingChange": metaData.UsnOriginatingChange = long.Parse(child.InnerText); break; case "usnLocalChange": metaData.UsnLocalChange = long.Parse(child.InnerText); break; case "pszLastOriginatingDsaDN": //metaData.LastOriginatingDsaInvocationID = child.InnerText; break; } } if (!String.IsNullOrEmpty(metaData.AttrName)) { output[metaData.AttrName] = metaData; } } return(output); }