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
- TableLayout.cs
- NotifyIcon.cs
- SafeBitVector32.cs
- FixedPageProcessor.cs
- FormClosedEvent.cs
- RuntimeComponentFilter.cs
- WsiProfilesElementCollection.cs
- TiffBitmapEncoder.cs
- ZipIOExtraField.cs
- DataPagerField.cs
- PerfCounterSection.cs
- IResourceProvider.cs
- BitmapSourceSafeMILHandle.cs
- DataBoundControlAdapter.cs
- GridViewColumnCollection.cs
- MethodRental.cs
- OutputCacheSettings.cs
- OracleParameterCollection.cs
- NameSpaceExtractor.cs
- BaseConfigurationRecord.cs
- WebUtil.cs
- HttpCacheVaryByContentEncodings.cs
- OutputCacheSection.cs
- TreeIterator.cs
- CapabilitiesRule.cs
- ExpandoObject.cs
- httpapplicationstate.cs
- PropertyChange.cs
- InputBinding.cs
- WebPartAuthorizationEventArgs.cs
- BaseTemplateBuildProvider.cs
- Page.cs
- Matrix.cs
- BuildManager.cs
- Bits.cs
- Properties.cs
- SizeAnimationBase.cs
- OAVariantLib.cs
- ResourceProperty.cs
- Classification.cs
- documentation.cs
- MultitargetingHelpers.cs
- CompositeActivityValidator.cs
- PenThreadPool.cs
- ResourcePool.cs
- TaskFileService.cs
- DirectionalLight.cs
- BoundingRectTracker.cs
- DashStyle.cs
- UpdatePanelTrigger.cs
- ElapsedEventArgs.cs
- SchemaNamespaceManager.cs
- TextCompositionEventArgs.cs
- UIElementPropertyUndoUnit.cs
- Config.cs
- Compiler.cs
- HttpCacheVaryByContentEncodings.cs
- RenderOptions.cs
- ContextMenu.cs
- DeclarativeExpressionConditionDeclaration.cs
- SqlTriggerContext.cs
- ContentElement.cs
- WSIdentityFaultException.cs
- RangeExpression.cs
- ObjectTag.cs
- FixedBufferAttribute.cs
- DefaultObjectSerializer.cs
- ComplexPropertyEntry.cs
- SerializationHelper.cs
- ObjectDataSourceView.cs
- MetafileHeaderWmf.cs
- CheckPair.cs
- COM2Enum.cs
- UriWriter.cs
- Wizard.cs
- PageWrapper.cs
- URLAttribute.cs
- columnmapfactory.cs
- FunctionMappingTranslator.cs
- ListBoxItem.cs
- PresentationSource.cs
- DefaultTextStoreTextComposition.cs
- XmlCharCheckingReader.cs
- FixUp.cs
- Wizard.cs
- DataSourceHelper.cs
- User.cs
- InvalidateEvent.cs
- DebuggerAttributes.cs
- LoginUtil.cs
- SQLSingle.cs
- StreamWriter.cs
- MsmqInputChannelListener.cs
- DivideByZeroException.cs
- ClientType.cs
- QilCloneVisitor.cs
- RegistryKey.cs
- DrawingCollection.cs
- MetadataFile.cs
- Gdiplus.cs