internal bool TryGetValue(Guid objId, out ObjectIdRecord value) { IndexKey key = new IndexKey(); key.Id = objId; return(_index.TryGetValue(key, out value)); }
internal void Add(Guid objId, FileRecordReference mftRef, Guid birthId, Guid birthVolumeId, Guid birthDomainId) { IndexKey newKey = new IndexKey(); newKey.Id = objId; ObjectIdRecord newData = new ObjectIdRecord(); newData.MftReference = mftRef; newData.BirthObjectId = birthId; newData.BirthVolumeId = birthVolumeId; newData.BirthDomainId = birthDomainId; _index[newKey] = newData; _file.UpdateRecordInMft(); }
internal static string EntryAsString(IndexEntry entry, string fileName, string indexName) { IByteArraySerializable keyValue = null; IByteArraySerializable dataValue = null; // Try to guess the type of data in the key and data fields from the filename and index name if (indexName == "$I30") { keyValue = new FileNameRecord(); dataValue = new FileRecordReference(); } else if (fileName == "$ObjId" && indexName == "$O") { keyValue = new ObjectIds.IndexKey(); dataValue = new ObjectIdRecord(); } else if (fileName == "$Reparse" && indexName == "$R") { keyValue = new ReparsePoints.Key(); dataValue = new ReparsePoints.Data(); } else if (fileName == "$Quota") { if (indexName == "$O") { keyValue = new Quotas.OwnerKey(); dataValue = new Quotas.OwnerRecord(); } else if (indexName == "$Q") { keyValue = new Quotas.OwnerRecord(); dataValue = new Quotas.QuotaRecord(); } } else if (fileName == "$Secure") { if (indexName == "$SII") { keyValue = new SecurityDescriptors.IdIndexKey(); dataValue = new SecurityDescriptors.IdIndexData(); } else if (indexName == "$SDH") { keyValue = new SecurityDescriptors.HashIndexKey(); dataValue = new SecurityDescriptors.IdIndexData(); } } try { if (keyValue != null && dataValue != null) { keyValue.ReadFrom(entry.KeyBuffer, 0); dataValue.ReadFrom(entry.DataBuffer, 0); return("{" + keyValue + "-->" + dataValue + "}"); } } catch { return("{Parsing-Error}"); } return("{Unknown-Index-Type}"); }