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
- DesignerRegion.cs
- _NestedSingleAsyncResult.cs
- SerializationObjectManager.cs
- EntityParameterCollection.cs
- SmtpLoginAuthenticationModule.cs
- FontCacheUtil.cs
- DirectionalAction.cs
- ComboBox.cs
- UInt64Storage.cs
- TextTreeTextNode.cs
- SchemaEntity.cs
- KeyNotFoundException.cs
- CorrelationTokenTypeConvertor.cs
- InternalsVisibleToAttribute.cs
- SymLanguageType.cs
- QueuePathEditor.cs
- PerformanceCounterManager.cs
- SingleStorage.cs
- ErrorEventArgs.cs
- PersonalizationDictionary.cs
- GACIdentityPermission.cs
- GenericEnumerator.cs
- DataError.cs
- Array.cs
- TextEditorContextMenu.cs
- StandardBindingElement.cs
- CodeDomSerializerBase.cs
- HttpProtocolImporter.cs
- Enum.cs
- EqualityComparer.cs
- StringExpressionSet.cs
- StringPropertyBuilder.cs
- TrackBarRenderer.cs
- Helper.cs
- XmlSchemaGroup.cs
- EnvelopedPkcs7.cs
- WebPartAuthorizationEventArgs.cs
- AppDomainFactory.cs
- ContentFilePart.cs
- ServiceModelEnumValidatorAttribute.cs
- Monitor.cs
- DesignerAdRotatorAdapter.cs
- OleDbPermission.cs
- ViewManagerAttribute.cs
- DesignerActionListCollection.cs
- DoubleCollection.cs
- CombinedGeometry.cs
- MarkupExtensionParser.cs
- Pair.cs
- TypeGeneratedEventArgs.cs
- WebPartsPersonalizationAuthorization.cs
- PageBorderless.cs
- CapabilitiesAssignment.cs
- StringComparer.cs
- HttpInputStream.cs
- InteropDesigner.xaml.cs
- SerializableAttribute.cs
- MetadataArtifactLoaderCompositeResource.cs
- dataobject.cs
- CompositeKey.cs
- ThemeableAttribute.cs
- MarkupProperty.cs
- SessionStateContainer.cs
- ExpressionBinding.cs
- ActiveDocumentEvent.cs
- SharedUtils.cs
- AsyncOperationContext.cs
- NativeMethodsCLR.cs
- OLEDB_Enum.cs
- EventLog.cs
- ExpressionParser.cs
- TextBoxAutoCompleteSourceConverter.cs
- ExpressionBindingCollection.cs
- AssemblyCacheEntry.cs
- PeerObject.cs
- DBAsyncResult.cs
- DefaultProxySection.cs
- WindowsListView.cs
- WithStatement.cs
- RoleGroupCollection.cs
- Camera.cs
- OleDbError.cs
- CompiledELinqQueryState.cs
- StringStorage.cs
- InternalDuplexBindingElement.cs
- ReadOnlyDataSourceView.cs
- LinqExpressionNormalizer.cs
- PersonalizationProviderCollection.cs
- PersonalizationProviderHelper.cs
- RegexMatch.cs
- CommandTreeTypeHelper.cs
- ScrollPatternIdentifiers.cs
- BasicExpandProvider.cs
- DBBindings.cs
- Domain.cs
- HtmlToClrEventProxy.cs
- Frame.cs
- MaterialGroup.cs
- DBBindings.cs
- WebResponse.cs