Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / IO / PinnedBufferMemoryStream.cs / 1305376 / PinnedBufferMemoryStream.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: PinnedBufferMemoryStream ** **[....] ** ** ** Purpose: Pins a byte[], exposing it as an unmanaged memory ** stream. Used in ResourceReader for corner cases. ** ** ===========================================================*/ using System; using System.Runtime.InteropServices; using System.Diagnostics.Contracts; namespace System.IO { internal sealed unsafe class PinnedBufferMemoryStream : UnmanagedMemoryStream { private byte[] _array; private GCHandle _pinningHandle; // The new inheritance model requires a Critical default ctor since base (UnmanagedMemoryStream) has one [System.Security.SecurityCritical] private PinnedBufferMemoryStream():base(){} [System.Security.SecurityCritical] // auto-generated internal PinnedBufferMemoryStream(byte[] array) { Contract.Assert(array != null, "Array can't be null"); int len = array.Length; // Handle 0 length byte arrays specially. if (len == 0) { array = new byte[1]; len = 0; } _array = array; _pinningHandle = new GCHandle(array, GCHandleType.Pinned); // Now the byte[] is pinned for the lifetime of this instance. // But I also need to get a pointer to that block of memory... fixed(byte* ptr = _array) Initialize(ptr, len, len, FileAccess.Read, true); } ~PinnedBufferMemoryStream() { Dispose(false); } [System.Security.SecuritySafeCritical] // auto-generated protected override void Dispose(bool disposing) { if (_isOpen) { _pinningHandle.Free(); _isOpen = false; } #if _DEBUG // To help track down lifetime issues on checked builds, force //a full GC here. if (disposing) { GC.Collect(); GC.WaitForPendingFinalizers(); } #endif base.Dispose(disposing); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: PinnedBufferMemoryStream ** **[....] ** ** ** Purpose: Pins a byte[], exposing it as an unmanaged memory ** stream. Used in ResourceReader for corner cases. ** ** ===========================================================*/ using System; using System.Runtime.InteropServices; using System.Diagnostics.Contracts; namespace System.IO { internal sealed unsafe class PinnedBufferMemoryStream : UnmanagedMemoryStream { private byte[] _array; private GCHandle _pinningHandle; // The new inheritance model requires a Critical default ctor since base (UnmanagedMemoryStream) has one [System.Security.SecurityCritical] private PinnedBufferMemoryStream():base(){} [System.Security.SecurityCritical] // auto-generated internal PinnedBufferMemoryStream(byte[] array) { Contract.Assert(array != null, "Array can't be null"); int len = array.Length; // Handle 0 length byte arrays specially. if (len == 0) { array = new byte[1]; len = 0; } _array = array; _pinningHandle = new GCHandle(array, GCHandleType.Pinned); // Now the byte[] is pinned for the lifetime of this instance. // But I also need to get a pointer to that block of memory... fixed(byte* ptr = _array) Initialize(ptr, len, len, FileAccess.Read, true); } ~PinnedBufferMemoryStream() { Dispose(false); } [System.Security.SecuritySafeCritical] // auto-generated protected override void Dispose(bool disposing) { if (_isOpen) { _pinningHandle.Free(); _isOpen = false; } #if _DEBUG // To help track down lifetime issues on checked builds, force //a full GC here. if (disposing) { GC.Collect(); GC.WaitForPendingFinalizers(); } #endif base.Dispose(disposing); } } } // 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
- ScrollProviderWrapper.cs
- TextServicesDisplayAttributePropertyRanges.cs
- AssertValidation.cs
- DataGridViewCellStyleConverter.cs
- CmsInterop.cs
- ExpandedWrapper.cs
- WebBrowser.cs
- Line.cs
- DropDownList.cs
- ExceptionRoutedEventArgs.cs
- ResourceDescriptionAttribute.cs
- DbParameterCollectionHelper.cs
- RequestValidator.cs
- WebPartEditorApplyVerb.cs
- FlowNode.cs
- CustomErrorsSectionWrapper.cs
- SettingsSavedEventArgs.cs
- BigInt.cs
- CounterSample.cs
- MediaTimeline.cs
- SharedStatics.cs
- RightsManagementResourceHelper.cs
- RefExpr.cs
- TypeHelper.cs
- SynchronizationContext.cs
- LogicalTreeHelper.cs
- ReflectionServiceProvider.cs
- RegistryPermission.cs
- DbDataAdapter.cs
- MultilineStringConverter.cs
- Column.cs
- NavigationEventArgs.cs
- PeerName.cs
- SlipBehavior.cs
- Package.cs
- SamlAssertion.cs
- AssemblyNameEqualityComparer.cs
- DataGridViewImageCell.cs
- EdmPropertyAttribute.cs
- DependencyObject.cs
- ProgressBar.cs
- OdbcException.cs
- TemplateBindingExpression.cs
- ToolStripCodeDomSerializer.cs
- ImageMetadata.cs
- CopyCodeAction.cs
- Animatable.cs
- MessageHeaderAttribute.cs
- SQLUtility.cs
- HTMLTagNameToTypeMapper.cs
- Timer.cs
- TrustExchangeException.cs
- AnonymousIdentificationSection.cs
- TypeResolvingOptionsAttribute.cs
- ReadOnlyDataSourceView.cs
- TrustSection.cs
- CssTextWriter.cs
- RichTextBoxConstants.cs
- SizeAnimationUsingKeyFrames.cs
- RegexTree.cs
- ImageIndexConverter.cs
- ColumnTypeConverter.cs
- TemplateAction.cs
- WebPartEditVerb.cs
- TextEncodedRawTextWriter.cs
- QueryModel.cs
- ProcessThread.cs
- ReferenceConverter.cs
- LongTypeConverter.cs
- MethodCallTranslator.cs
- ContractReference.cs
- VectorValueSerializer.cs
- PointLight.cs
- SettingsProperty.cs
- Collection.cs
- AdRotatorDesigner.cs
- CompilerErrorCollection.cs
- OleDbErrorCollection.cs
- XmlUrlResolver.cs
- XhtmlConformanceSection.cs
- InputLanguage.cs
- TreeView.cs
- AsymmetricKeyExchangeDeformatter.cs
- WindowsSolidBrush.cs
- WindowsAltTab.cs
- HandlerMappingMemo.cs
- RangeValuePattern.cs
- BooleanAnimationBase.cs
- Panel.cs
- DetailsViewModeEventArgs.cs
- MailWriter.cs
- ConditionalExpression.cs
- ScriptControlDescriptor.cs
- MbpInfo.cs
- SurrogateEncoder.cs
- ProcessModule.cs
- LOSFormatter.cs
- BitmapImage.cs
- UnmanagedMemoryStream.cs
- EmptyStringExpandableObjectConverter.cs