Code:
/ 4.0 / 4.0 / 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. //------------------------------------------------------------------------------ // 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; IEnumerable regions; 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
- BrowserCapabilitiesFactory.cs
- EndpointNotFoundException.cs
- Part.cs
- EmptyEnumerator.cs
- Attributes.cs
- ConfigXmlComment.cs
- Int16AnimationUsingKeyFrames.cs
- AxWrapperGen.cs
- ConfigurationSettings.cs
- PeerUnsafeNativeMethods.cs
- PLINQETWProvider.cs
- ControlDesigner.cs
- EventLogEntry.cs
- JapaneseCalendar.cs
- XmlILIndex.cs
- StreamWriter.cs
- SourceItem.cs
- BaseProcessProtocolHandler.cs
- DesignBindingConverter.cs
- IdleTimeoutMonitor.cs
- TextFormattingConverter.cs
- AsyncResult.cs
- ControlTemplate.cs
- StringFunctions.cs
- SettingsAttributes.cs
- IResourceProvider.cs
- ListBase.cs
- ZoomPercentageConverter.cs
- DataGridViewCellConverter.cs
- PriorityQueue.cs
- cookiecollection.cs
- ToolBarOverflowPanel.cs
- ContainerUIElement3D.cs
- SafeFileMappingHandle.cs
- Exceptions.cs
- RequestCachePolicy.cs
- IssuerInformation.cs
- FakeModelPropertyImpl.cs
- SingleAnimationUsingKeyFrames.cs
- ExpressionBuilderCollection.cs
- XamlBrushSerializer.cs
- SecurityDescriptor.cs
- PackageProperties.cs
- __ConsoleStream.cs
- FontStretch.cs
- XPathBinder.cs
- OverlappedAsyncResult.cs
- Peer.cs
- NamedPipeChannelListener.cs
- sqlstateclientmanager.cs
- QueryContinueDragEventArgs.cs
- BaseCodePageEncoding.cs
- RichTextBoxDesigner.cs
- HttpResponseHeader.cs
- DeclaredTypeValidatorAttribute.cs
- NavigationProperty.cs
- LineServicesCallbacks.cs
- DataGridViewCellValidatingEventArgs.cs
- RegexBoyerMoore.cs
- codemethodreferenceexpression.cs
- Assembly.cs
- DragDrop.cs
- TextRangeAdaptor.cs
- TrustManagerPromptUI.cs
- RectAnimationBase.cs
- Range.cs
- DataGridViewComboBoxCell.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- RadioButtonRenderer.cs
- XmlSchemaFacet.cs
- TemplatedWizardStep.cs
- Memoizer.cs
- MarkupExtensionParser.cs
- Graph.cs
- HtmlInputText.cs
- RelationshipNavigation.cs
- RequiredFieldValidator.cs
- IIS7WorkerRequest.cs
- CallContext.cs
- ObjectStateManager.cs
- XmlTextEncoder.cs
- TransactionFlowBindingElementImporter.cs
- Vector3D.cs
- WeakReference.cs
- XPathSelfQuery.cs
- CallInfo.cs
- DataRowChangeEvent.cs
- DataBindingHandlerAttribute.cs
- PointAnimationClockResource.cs
- LicenseException.cs
- dsa.cs
- Deserializer.cs
- Identity.cs
- SmiMetaData.cs
- Hashtable.cs
- Html32TextWriter.cs
- TreeNodeStyle.cs
- Convert.cs
- DomNameTable.cs
- FastPropertyAccessor.cs