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
- HttpHandlerAction.cs
- DataBinding.cs
- FilterException.cs
- LinearGradientBrush.cs
- AssemblyAttributesGoHere.cs
- WebPartExportVerb.cs
- DataTableReaderListener.cs
- HttpDebugHandler.cs
- NativeRightsManagementAPIsStructures.cs
- ProcessProtocolHandler.cs
- StaticDataManager.cs
- figurelengthconverter.cs
- SendActivityEventArgs.cs
- ListViewGroupItemCollection.cs
- BinHexDecoder.cs
- RelationshipType.cs
- EventMap.cs
- HttpException.cs
- FontStyle.cs
- FunctionMappingTranslator.cs
- SponsorHelper.cs
- RubberbandSelector.cs
- TextDpi.cs
- Geometry3D.cs
- DecoderBestFitFallback.cs
- SystemColorTracker.cs
- CursorConverter.cs
- WebPartMenuStyle.cs
- DrawingContextDrawingContextWalker.cs
- RegisteredDisposeScript.cs
- InProcStateClientManager.cs
- QuaternionRotation3D.cs
- TableStyle.cs
- ArgIterator.cs
- QilIterator.cs
- DateTimeFormatInfoScanner.cs
- DesignerVerbCollection.cs
- MessageEncodingBindingElementImporter.cs
- StreamReader.cs
- DuplicateWaitObjectException.cs
- SspiWrapper.cs
- FolderBrowserDialog.cs
- AnnotationAdorner.cs
- EntitySetBaseCollection.cs
- HostSecurityManager.cs
- StructuredTypeEmitter.cs
- CommonGetThemePartSize.cs
- Zone.cs
- MemberInfoSerializationHolder.cs
- BasePattern.cs
- WebResourceUtil.cs
- EnlistmentTraceIdentifier.cs
- TypeLibConverter.cs
- ListViewEditEventArgs.cs
- Registry.cs
- DataGridViewCellParsingEventArgs.cs
- XPathAncestorIterator.cs
- NoResizeSelectionBorderGlyph.cs
- XmlSerializerAssemblyAttribute.cs
- PageAsyncTask.cs
- ArgumentDesigner.xaml.cs
- SQLDateTimeStorage.cs
- Confirm.cs
- SecurityTokenAuthenticator.cs
- HandledEventArgs.cs
- ImageField.cs
- RuleRef.cs
- TreePrinter.cs
- SafeRightsManagementHandle.cs
- FormatSettings.cs
- FieldAccessException.cs
- Symbol.cs
- OperatorExpressions.cs
- SocketPermission.cs
- SiteMapNodeItem.cs
- ObjectRef.cs
- Button.cs
- Quaternion.cs
- recordstatescratchpad.cs
- BitConverter.cs
- ScrollEventArgs.cs
- XPathCompileException.cs
- LogicalExpr.cs
- TrustManager.cs
- HotSpotCollection.cs
- HtmlInputSubmit.cs
- IgnoreSectionHandler.cs
- WebPermission.cs
- Graphics.cs
- AnnotationResourceCollection.cs
- DBDataPermissionAttribute.cs
- SqlOuterApplyReducer.cs
- Odbc32.cs
- SBCSCodePageEncoding.cs
- NetMsmqBindingElement.cs
- FunctionDescription.cs
- ConstraintManager.cs
- TileBrush.cs
- WinEventQueueItem.cs
- MessageVersion.cs