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
- SamlSubjectStatement.cs
- NavigationFailedEventArgs.cs
- InstanceKeyView.cs
- Literal.cs
- ConditionalDesigner.cs
- SynthesizerStateChangedEventArgs.cs
- BamlCollectionHolder.cs
- CompareValidator.cs
- ButtonFieldBase.cs
- InstanceStoreQueryResult.cs
- RoleManagerSection.cs
- WebPartCatalogCloseVerb.cs
- ObjectAnimationBase.cs
- SafeLocalMemHandle.cs
- translator.cs
- TdsValueSetter.cs
- PenThread.cs
- followingquery.cs
- DelegateBodyWriter.cs
- CatalogPartCollection.cs
- ValueSerializer.cs
- DeferredTextReference.cs
- Stackframe.cs
- StorageComplexTypeMapping.cs
- DataErrorValidationRule.cs
- SafeNativeMethods.cs
- unsafenativemethodsother.cs
- PrimitiveType.cs
- ManipulationDeltaEventArgs.cs
- HashFinalRequest.cs
- DateTimeConverter2.cs
- TextRangeProviderWrapper.cs
- EncryptedKeyIdentifierClause.cs
- CommonDialog.cs
- Vector3DAnimation.cs
- UriParserTemplates.cs
- DisposableCollectionWrapper.cs
- StreamSecurityUpgradeInitiatorAsyncResult.cs
- Descriptor.cs
- ThemeDictionaryExtension.cs
- Message.cs
- ReferencedCollectionType.cs
- SchemaImporterExtensionsSection.cs
- MetabaseServerConfig.cs
- Matrix.cs
- SRGSCompiler.cs
- CompilerScope.cs
- ListItem.cs
- StackSpiller.Temps.cs
- UInt64.cs
- EdmFunctionAttribute.cs
- WebPartDisplayMode.cs
- Constant.cs
- ProcessInfo.cs
- MediaPlayerState.cs
- TextBoxAutomationPeer.cs
- Configuration.cs
- SqlRecordBuffer.cs
- XmlTextAttribute.cs
- ModelTreeEnumerator.cs
- PreviewPrintController.cs
- ValueHandle.cs
- UIPermission.cs
- SystemWebCachingSectionGroup.cs
- PagePropertiesChangingEventArgs.cs
- ElementHostAutomationPeer.cs
- HiddenField.cs
- Section.cs
- HandledMouseEvent.cs
- AssemblyBuilder.cs
- InputScope.cs
- QueryInterceptorAttribute.cs
- MessageQueueException.cs
- QueryOutputWriter.cs
- SqlMethodTransformer.cs
- ClrProviderManifest.cs
- SafeNativeMethods.cs
- ProviderUtil.cs
- RootAction.cs
- EmbeddedMailObject.cs
- XmlSchemaFacet.cs
- StrongNameKeyPair.cs
- C14NUtil.cs
- RoutedUICommand.cs
- XPathNodeHelper.cs
- GroupAggregateExpr.cs
- ToolStripHighContrastRenderer.cs
- SynchronousChannel.cs
- MetaChildrenColumn.cs
- MetaModel.cs
- WhitespaceRule.cs
- SafeWaitHandle.cs
- EdmComplexPropertyAttribute.cs
- MailWebEventProvider.cs
- XmlAggregates.cs
- CngProvider.cs
- Util.cs
- PerformanceCounterPermission.cs
- RegexFCD.cs
- WebPermission.cs