Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Log / System / IO / Log / LogExtentCollection.cs / 1305376 / LogExtentCollection.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace System.IO.Log
{
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
using Microsoft.Win32.SafeHandles;
public sealed class LogExtentCollection : IEnumerable
{
LogStore store;
int version;
internal LogExtentCollection(LogStore store)
{
this.store = store;
}
public int Count
{
get
{
CLFS_INFORMATION info;
this.store.GetLogFileInformation(out info);
return (int)info.TotalContainers;
}
}
public int FreeCount
{
get
{
CLFS_INFORMATION info;
this.store.GetLogFileInformation(out info);
return (int)info.FreeContainers;
}
}
int Version
{
get
{
return this.version;
}
}
LogStore Store
{
get
{
return this.store;
}
}
public void Add(string path)
{
if(string.IsNullOrEmpty(path))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentNull("path"));
}
if (this.Count == 0)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.InvalidOperation(SR.LogStore_SizeRequired));
}
UnsafeNativeMethods.AddLogContainerNoSizeSync(
this.store.Handle,
path);
this.version++;
}
public void Add(string path, long size)
{
if(string.IsNullOrEmpty(path))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentNull("path"));
}
if (size <= 0)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("size"));
}
CLFS_INFORMATION info;
this.store.GetLogFileInformation(out info);
if ((ulong)size < info.ContainerSize)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentInvalid(SR.LogStore_SizeTooSmall));
}
ulong ulSize = (ulong)size;
UnsafeNativeMethods.AddLogContainerSync(
this.store.Handle,
ref ulSize,
path);
this.version++;
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
public IEnumerator GetEnumerator()
{
return new LogExtentEnumerator(this);
}
public void Remove(string path, bool force)
{
if(string.IsNullOrEmpty(path))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentNull("path"));
}
UnsafeNativeMethods.RemoveLogContainerSync(
this.store.Handle,
path,
force);
this.version++;
}
public void Remove(LogExtent extent, bool force)
{
if(extent == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentNull("extent"));
}
UnsafeNativeMethods.RemoveLogContainerSync(
this.store.Handle,
extent.Path,
force);
this.version++;
}
class LogExtentEnumerator : IEnumerator
{
LogExtentCollection collection;
List.Enumerator innerEnum;
int version;
public LogExtentEnumerator(LogExtentCollection collection)
{
this.collection = collection;
this.version = this.collection.Version;
SafeFileHandle logHandle = this.collection.Store.Handle;
CLFS_SCAN_CONTEXT scanContext = new CLFS_SCAN_CONTEXT();
try
{
List extents = new List();
CLFS_INFORMATION logInfo;
this.collection.Store.GetLogFileInformation(out logInfo);
if (logInfo.TotalContainers > 0)
{
UnsafeNativeMethods.CreateLogContainerScanContextSync(
logHandle,
0,
logInfo.TotalContainers,
CLFS_SCAN_MODE.CLFS_SCAN_FORWARD,
ref scanContext);
long containerPointer = scanContext.pinfoContainer.ToInt64();
CLFS_CONTAINER_INFORMATION_WRAPPER info;
info = new CLFS_CONTAINER_INFORMATION_WRAPPER();
int infoSize;
infoSize = Marshal.SizeOf(typeof(CLFS_CONTAINER_INFORMATION_WRAPPER));
for (uint i = 0; i < scanContext.cContainersReturned; i++)
{
Marshal.PtrToStructure(new IntPtr(containerPointer),
info);
LogExtent extent = new LogExtent(
info.info.GetActualFileName(logHandle),
info.info.FileSize,
(LogExtentState)info.info.State);
extents.Add(extent);
containerPointer += infoSize;
}
}
this.innerEnum = extents.GetEnumerator();
}
finally
{
if ((scanContext.eScanMode & CLFS_SCAN_MODE.CLFS_SCAN_INITIALIZED) != 0)
{
UnsafeNativeMethods.ScanLogContainersSyncClose(
ref scanContext);
}
}
}
object IEnumerator.Current
{
get
{
return this.Current;
}
}
public LogExtent Current
{
get { return this.innerEnum.Current; }
}
public bool MoveNext()
{
if (this.version != this.collection.Version)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
Error.InvalidOperation(SR.InvalidOperation_EnumFailedVersion));
}
return this.innerEnum.MoveNext();
}
public void Dispose()
{
this.innerEnum.Dispose();
}
public void Reset()
{
((IEnumerator)this.innerEnum).Reset();
this.version = this.collection.Version;
}
}
}
}
// 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
- Literal.cs
- InternalsVisibleToAttribute.cs
- RealProxy.cs
- ZoneIdentityPermission.cs
- validationstate.cs
- InheritanceAttribute.cs
- SHA256Managed.cs
- CustomExpression.cs
- ThousandthOfEmRealDoubles.cs
- TrackingDataItem.cs
- DataSourceProvider.cs
- BaseCodePageEncoding.cs
- Int32Rect.cs
- JapaneseLunisolarCalendar.cs
- BasicBrowserDialog.cs
- NamespaceList.cs
- RectKeyFrameCollection.cs
- Clause.cs
- TTSEngineTypes.cs
- Transform3DCollection.cs
- SqlConnectionPoolGroupProviderInfo.cs
- ThrowHelper.cs
- AssemblyAttributes.cs
- SystemIcmpV6Statistics.cs
- DataGridViewRowCancelEventArgs.cs
- ElementsClipboardData.cs
- ClientRequest.cs
- ComplexTypeEmitter.cs
- PageMediaSize.cs
- IIS7WorkerRequest.cs
- FactorySettingsElement.cs
- ToolStripItemClickedEventArgs.cs
- _HTTPDateParse.cs
- DateTimeStorage.cs
- TextProviderWrapper.cs
- AttachmentCollection.cs
- BaseContextMenu.cs
- ChannelBase.cs
- AnnotationAuthorChangedEventArgs.cs
- RequestQueue.cs
- IUnknownConstantAttribute.cs
- SingleStorage.cs
- SplineKeyFrames.cs
- PathFigure.cs
- Sequence.cs
- ClientProxyGenerator.cs
- HostingEnvironmentSection.cs
- SyndicationFeed.cs
- NumberSubstitution.cs
- DataTableReaderListener.cs
- TabControlEvent.cs
- HwndStylusInputProvider.cs
- PropertyConverter.cs
- ServiceInstallComponent.cs
- SchemaImporter.cs
- ObjectQuery.cs
- StatusBar.cs
- XmlWellformedWriter.cs
- Nodes.cs
- ScrollBarAutomationPeer.cs
- SoapCommonClasses.cs
- HtmlMobileTextWriter.cs
- PropertyChangeTracker.cs
- OperationDescription.cs
- ImmutableClientRuntime.cs
- StreamGeometry.cs
- HWStack.cs
- Crypto.cs
- DataPointer.cs
- XmlSubtreeReader.cs
- WSHttpBindingCollectionElement.cs
- BaseHashHelper.cs
- MaskedTextBoxDesignerActionList.cs
- FileDetails.cs
- SoapInteropTypes.cs
- DiffuseMaterial.cs
- DataSourceHelper.cs
- VScrollBar.cs
- ElementsClipboardData.cs
- DataMemberFieldEditor.cs
- XmlSchemaGroupRef.cs
- SamlAuthenticationClaimResource.cs
- ProgressBarBrushConverter.cs
- ConvertEvent.cs
- SettingsAttributeDictionary.cs
- MultiPropertyDescriptorGridEntry.cs
- Attributes.cs
- NullableFloatSumAggregationOperator.cs
- HelpProvider.cs
- FormViewInsertEventArgs.cs
- UIPermission.cs
- NotificationContext.cs
- SemanticValue.cs
- ClipboardData.cs
- GACMembershipCondition.cs
- SafeViewOfFileHandle.cs
- MemoryFailPoint.cs
- Brush.cs
- ExpandSegmentCollection.cs
- mda.cs