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
- StylusPointProperties.cs
- HtmlUtf8RawTextWriter.cs
- MultiByteCodec.cs
- SystemColors.cs
- LinkUtilities.cs
- FileRecordSequenceHelper.cs
- CommentEmitter.cs
- TranslateTransform.cs
- _LoggingObject.cs
- AsymmetricSecurityProtocol.cs
- basenumberconverter.cs
- ListBox.cs
- CommonDialog.cs
- XmlILOptimizerVisitor.cs
- __Error.cs
- RegistrationContext.cs
- SystemIPInterfaceStatistics.cs
- PrintPageEvent.cs
- SkewTransform.cs
- DataGridViewRowConverter.cs
- CompiledIdentityConstraint.cs
- GuidConverter.cs
- dbdatarecord.cs
- SqlClientMetaDataCollectionNames.cs
- JsonReader.cs
- TableCellAutomationPeer.cs
- ErrorWrapper.cs
- Int32Converter.cs
- FilterQueryOptionExpression.cs
- UnorderedHashRepartitionStream.cs
- TimeSpanFormat.cs
- HwndSubclass.cs
- WpfKnownTypeInvoker.cs
- ModuleBuilder.cs
- OSFeature.cs
- UserNamePasswordValidator.cs
- ThaiBuddhistCalendar.cs
- OutputScopeManager.cs
- WeakEventTable.cs
- InfiniteTimeSpanConverter.cs
- LocalizedNameDescriptionPair.cs
- _ProxyChain.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- ContentDisposition.cs
- SessionKeyExpiredException.cs
- ServicePointManager.cs
- DataSourceControl.cs
- SystemInfo.cs
- XmlNotation.cs
- UserInitiatedNavigationPermission.cs
- _MultipleConnectAsync.cs
- Hyperlink.cs
- ConfigurationStrings.cs
- InputProviderSite.cs
- Vector3DAnimationBase.cs
- CompressEmulationStream.cs
- HtmlControlPersistable.cs
- DispatchWrapper.cs
- ExpandSegment.cs
- QuotedStringWriteStateInfo.cs
- RuntimeIdentifierPropertyAttribute.cs
- XmlSchemaSimpleContentRestriction.cs
- MustUnderstandSoapException.cs
- CustomServiceCredentials.cs
- TextBoxBaseDesigner.cs
- Errors.cs
- GatewayDefinition.cs
- XmlEncodedRawTextWriter.cs
- StyleSelector.cs
- ApplicationFileCodeDomTreeGenerator.cs
- ItemType.cs
- ArgumentValidation.cs
- GlobalProxySelection.cs
- TreeIterator.cs
- DataPagerField.cs
- Style.cs
- StateRuntime.cs
- FlowDocument.cs
- CalloutQueueItem.cs
- MemberRestriction.cs
- StrokeCollectionConverter.cs
- OwnerDrawPropertyBag.cs
- NTAccount.cs
- DataGridViewRow.cs
- ResXFileRef.cs
- CharUnicodeInfo.cs
- StringUtil.cs
- TextEffect.cs
- FontEmbeddingManager.cs
- DataMemberFieldEditor.cs
- BlurBitmapEffect.cs
- View.cs
- XmlEntityReference.cs
- ManipulationBoundaryFeedbackEventArgs.cs
- PresentationSource.cs
- FormCollection.cs
- CodeAttributeDeclarationCollection.cs
- ColorBlend.cs
- XamlGridLengthSerializer.cs
- XmlTypeAttribute.cs