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
- TargetInvocationException.cs
- Rotation3DAnimation.cs
- ScopelessEnumAttribute.cs
- GlobalEventManager.cs
- LocalsItemDescription.cs
- ColorConvertedBitmapExtension.cs
- JobDuplex.cs
- DragEventArgs.cs
- _HTTPDateParse.cs
- DataControlCommands.cs
- PathGeometry.cs
- XsltLoader.cs
- BooleanFunctions.cs
- CanonicalFormWriter.cs
- ListViewTableCell.cs
- CombinedGeometry.cs
- HttpHandlerActionCollection.cs
- InnerItemCollectionView.cs
- MenuItemCollection.cs
- TypeConverterHelper.cs
- ExpressionBuilder.cs
- CardSpacePolicyElement.cs
- MsmqIntegrationAppDomainProtocolHandler.cs
- WebPartEditorApplyVerb.cs
- DataGridItemEventArgs.cs
- InProcStateClientManager.cs
- ColumnReorderedEventArgs.cs
- FontCollection.cs
- CatalogPartChrome.cs
- CompositionAdorner.cs
- ZipArchive.cs
- ConfigurationValidatorAttribute.cs
- FunctionQuery.cs
- RequiredAttributeAttribute.cs
- XmlSchemaAnyAttribute.cs
- SafeNativeMethodsCLR.cs
- Metafile.cs
- SqlDataSourceWizardForm.cs
- NativeMethods.cs
- LayoutTableCell.cs
- NameValueConfigurationElement.cs
- SponsorHelper.cs
- NullableFloatMinMaxAggregationOperator.cs
- CompilationSection.cs
- EncodingNLS.cs
- CacheVirtualItemsEvent.cs
- HttpModuleActionCollection.cs
- NativeMethods.cs
- CqlIdentifiers.cs
- FileDialog.cs
- RestClientProxyHandler.cs
- AsymmetricAlgorithm.cs
- DotExpr.cs
- CmsInterop.cs
- AdornerDecorator.cs
- BitConverter.cs
- UserControlBuildProvider.cs
- BinaryFormatter.cs
- ObjectManager.cs
- PathTooLongException.cs
- StringConverter.cs
- DataGridViewEditingControlShowingEventArgs.cs
- IsolatedStorage.cs
- TitleStyle.cs
- PersonalizationEntry.cs
- ResourceBinder.cs
- DocumentPageTextView.cs
- ReturnEventArgs.cs
- Padding.cs
- TheQuery.cs
- DirectoryRedirect.cs
- QuaternionValueSerializer.cs
- AnimationTimeline.cs
- Util.cs
- ListBox.cs
- ContentPosition.cs
- RtfFormatStack.cs
- GlobalEventManager.cs
- TaiwanCalendar.cs
- ActiveXSerializer.cs
- SQLStringStorage.cs
- DoubleConverter.cs
- CompleteWizardStep.cs
- PngBitmapDecoder.cs
- CombinedGeometry.cs
- SafeLibraryHandle.cs
- DelayedRegex.cs
- FilterQueryOptionExpression.cs
- UnaryQueryOperator.cs
- NavigatingCancelEventArgs.cs
- PerformanceCountersElement.cs
- IndexObject.cs
- PermissionSetTriple.cs
- DataGridCommandEventArgs.cs
- FileDialogPermission.cs
- DataDesignUtil.cs
- xsdvalidator.cs
- NativeMethods.cs
- SqlCacheDependencyDatabaseCollection.cs
- PngBitmapEncoder.cs