Code:
/ 4.0 / 4.0 / 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. //------------------------------------------------------------------------------ // 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
- ImageInfo.cs
- PriorityQueue.cs
- ClientTargetCollection.cs
- SectionUpdates.cs
- PageAsyncTask.cs
- HtmlControlAdapter.cs
- Pens.cs
- DesignerGenericWebPart.cs
- XsltOutput.cs
- Panel.cs
- CustomAttributeSerializer.cs
- XmlSchemaComplexContentRestriction.cs
- ConversionValidationRule.cs
- EventSetter.cs
- ControlPropertyNameConverter.cs
- PrimitiveXmlSerializers.cs
- XamlContextStack.cs
- WebHttpSecurityModeHelper.cs
- MarkupWriter.cs
- TextBox.cs
- AnimationClockResource.cs
- TextPattern.cs
- TreeNodeStyleCollectionEditor.cs
- DataViewSetting.cs
- DecoderExceptionFallback.cs
- FixedSOMElement.cs
- SplitterEvent.cs
- WebPartEditorOkVerb.cs
- FlowLayoutPanelDesigner.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- NameValueFileSectionHandler.cs
- UserPreferenceChangingEventArgs.cs
- LinkUtilities.cs
- XmlTextReader.cs
- TimeSpanSecondsConverter.cs
- ParenthesizePropertyNameAttribute.cs
- MergablePropertyAttribute.cs
- MarkupCompilePass1.cs
- CompoundFileStorageReference.cs
- SuppressedPackageProperties.cs
- ControlSerializer.cs
- ClientSettingsStore.cs
- WizardForm.cs
- ColorComboBox.cs
- CompositeDesignerAccessibleObject.cs
- ArglessEventHandlerProxy.cs
- StyleHelper.cs
- ReflectPropertyDescriptor.cs
- TypeName.cs
- DataBindingHandlerAttribute.cs
- SchemaMerger.cs
- SqlDesignerDataSourceView.cs
- BrowserCapabilitiesFactory.cs
- ParallelQuery.cs
- NavigationWindowAutomationPeer.cs
- Border.cs
- LastQueryOperator.cs
- ObjectStateFormatter.cs
- SqlProfileProvider.cs
- mediaeventshelper.cs
- CqlBlock.cs
- HashMembershipCondition.cs
- shaperfactoryquerycachekey.cs
- Geometry3D.cs
- ReadOnlyDictionary.cs
- LinqDataSourceView.cs
- BaseHashHelper.cs
- SqlDependencyUtils.cs
- InstanceData.cs
- AuthenticateEventArgs.cs
- OuterGlowBitmapEffect.cs
- XmlArrayItemAttributes.cs
- XappLauncher.cs
- LinkedResourceCollection.cs
- TextElementEnumerator.cs
- FunctionImportMapping.cs
- XmlSerializableServices.cs
- CryptoApi.cs
- FamilyTypefaceCollection.cs
- TypeContext.cs
- ObjectDisposedException.cs
- ActionMessageFilterTable.cs
- xdrvalidator.cs
- SQLConvert.cs
- TableFieldsEditor.cs
- SqlFactory.cs
- CreateUserErrorEventArgs.cs
- PageEventArgs.cs
- InstanceDataCollectionCollection.cs
- CellRelation.cs
- CommandField.cs
- DataBinding.cs
- SurrogateSelector.cs
- querybuilder.cs
- RepeaterItemCollection.cs
- VisualCollection.cs
- QueryExpr.cs
- Char.cs
- RightsManagementPermission.cs
- AnimationClockResource.cs