Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Log / System / IO / Log / LogArchiveSnapshot.cs / 1305376 / LogArchiveSnapshot.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.IO.Log { using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; public sealed class LogArchiveSnapshot { SequenceNumber archiveTail; SequenceNumber baseSequenceNumber; SequenceNumber lastSequenceNumber; IEnumerableregions; const int MaxFileNameLength = 260; internal LogArchiveSnapshot(LogStore store, ulong lsnLow, ulong lsnHigh) { StringBuilder baseLogFileName = new StringBuilder(MaxFileNameLength); int actualLength; ulong baseLogFileOffset; ulong baseLogFileLength; ulong lsnBase; ulong lsnLast; ulong lsnArchiveTail; SafeArchiveContext archiveContext = null; try { while (!UnsafeNativeMethods.PrepareLogArchive( store.Handle, baseLogFileName, baseLogFileName.Capacity, ref lsnLow, ref lsnHigh, out actualLength, out baseLogFileOffset, out baseLogFileLength, out lsnBase, out lsnLast, out lsnArchiveTail, out archiveContext)) { baseLogFileName.EnsureCapacity(actualLength+1); } this.archiveTail = new SequenceNumber(lsnArchiveTail); this.baseSequenceNumber = new SequenceNumber(lsnBase); this.lastSequenceNumber = new SequenceNumber(lsnLast); List regions = new List (); byte[] readBuffer = new byte[checked((uint)baseLogFileLength)]; uint actualDataLength = 0; unsafe { fixed(byte *pbReadBuffer = readBuffer) { UnsafeNativeMethods.ReadLogArchiveMetadata( archiveContext, 0, readBuffer.Length, pbReadBuffer, out actualDataLength); } } byte[] baseFileData; if (actualDataLength == (uint)baseLogFileLength) { baseFileData = readBuffer; } else { baseFileData = new byte[actualDataLength]; Array.Copy(readBuffer, baseFileData, baseFileData.Length); } regions.Add(new FileRegion((long)baseLogFileLength, baseLogFileName.ToString(), (long)baseLogFileOffset, baseFileData)); CLFS_ARCHIVE_DESCRIPTOR descriptor = new CLFS_ARCHIVE_DESCRIPTOR(); while(true) { int returnedCount; if (!UnsafeNativeMethods.GetNextLogArchiveExtentSingle( archiveContext, ref descriptor, out returnedCount)) { break; } if (returnedCount < 1) break; long start = checked((long)descriptor.coffLow); long length = checked((long)(descriptor.coffHigh - descriptor.coffLow)); string fileName = descriptor.infoContainer.GetActualFileName(store.Handle); FileInfo containerInfo; containerInfo = new FileInfo(fileName); regions.Add(new FileRegion(containerInfo.Length, fileName, start, length)); } this.regions = regions.AsReadOnly(); } finally { if (archiveContext != null && !archiveContext.IsInvalid) { archiveContext.Close(); } } } public IEnumerable ArchiveRegions { get { return this.regions; } } public SequenceNumber ArchiveTail { get { return this.archiveTail; } } public SequenceNumber BaseSequenceNumber { get { return this.baseSequenceNumber; } } public SequenceNumber LastSequenceNumber { get { return this.lastSequenceNumber; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PropertyTab.cs
- DataKeyArray.cs
- IndexOutOfRangeException.cs
- XNodeValidator.cs
- BinaryMethodMessage.cs
- RuntimeConfigLKG.cs
- SQLInt64.cs
- BindingValueChangedEventArgs.cs
- RouteUrlExpressionBuilder.cs
- ReachDocumentSequenceSerializerAsync.cs
- RepeaterCommandEventArgs.cs
- AutomationElementCollection.cs
- EntityContainerEntitySet.cs
- HitTestWithPointDrawingContextWalker.cs
- safelinkcollection.cs
- ScopelessEnumAttribute.cs
- TransactionManager.cs
- NotifyIcon.cs
- MessageQueuePermission.cs
- DbConnectionPoolGroupProviderInfo.cs
- EditorZone.cs
- IFormattable.cs
- ParameterToken.cs
- BackgroundFormatInfo.cs
- ClientScriptManager.cs
- SafeRegistryHandle.cs
- ColorConverter.cs
- XmlSchema.cs
- TemplateLookupAction.cs
- While.cs
- XmlSchemaGroupRef.cs
- MissingManifestResourceException.cs
- MenuItemStyle.cs
- DataGridViewTextBoxEditingControl.cs
- ImageKeyConverter.cs
- PrintDialog.cs
- CodeTypeParameter.cs
- DefaultObjectSerializer.cs
- PropertyChangedEventArgs.cs
- XmlBaseWriter.cs
- PersistenceIOParticipant.cs
- Timer.cs
- NotificationContext.cs
- IImplicitResourceProvider.cs
- CssTextWriter.cs
- FormatException.cs
- TextOnlyOutput.cs
- SigningDialog.cs
- ScrollProperties.cs
- CssClassPropertyAttribute.cs
- VisualBrush.cs
- CompoundFileIOPermission.cs
- DateTimeOffsetConverter.cs
- UserThread.cs
- followingquery.cs
- Metafile.cs
- FieldDescriptor.cs
- PieceDirectory.cs
- HttpCookieCollection.cs
- DataGridViewRowStateChangedEventArgs.cs
- FontNamesConverter.cs
- SpellerHighlightLayer.cs
- NotSupportedException.cs
- FieldDescriptor.cs
- ZipIOLocalFileBlock.cs
- CodeDomSerializer.cs
- TextDecorationUnitValidation.cs
- WizardStepCollectionEditor.cs
- KeyboardDevice.cs
- ResourcesBuildProvider.cs
- SelectionListDesigner.cs
- GeneralTransform3DCollection.cs
- SafeRightsManagementSessionHandle.cs
- sortedlist.cs
- WebResourceAttribute.cs
- DrawingCollection.cs
- WindowsRegion.cs
- XmlIncludeAttribute.cs
- ActiveXHost.cs
- SerTrace.cs
- oledbmetadatacollectionnames.cs
- FilteredXmlReader.cs
- ReflectEventDescriptor.cs
- SqlFunctionAttribute.cs
- Image.cs
- CounterSetInstanceCounterDataSet.cs
- GeometryConverter.cs
- DataGridLinkButton.cs
- NativeMethods.cs
- MulticastDelegate.cs
- WrappedDispatcherException.cs
- DataGridViewCell.cs
- HuffCodec.cs
- EventDescriptorCollection.cs
- MessagingDescriptionAttribute.cs
- EpmContentDeSerializer.cs
- HealthMonitoringSection.cs
- ManipulationPivot.cs
- ItemDragEvent.cs
- OptionalMessageQuery.cs