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
- TextParentUndoUnit.cs
- SecurityAlgorithmSuite.cs
- TypeInfo.cs
- Logging.cs
- TreeViewImageKeyConverter.cs
- counter.cs
- ModulesEntry.cs
- ConditionalAttribute.cs
- arclist.cs
- UnmanagedMemoryStream.cs
- AssemblyInfo.cs
- ProcessModelSection.cs
- SchemaLookupTable.cs
- base64Transforms.cs
- SpeechEvent.cs
- DBParameter.cs
- SimpleTypeResolver.cs
- StringUtil.cs
- SQLChars.cs
- RemotingConfigParser.cs
- ACE.cs
- BezierSegment.cs
- ValidationError.cs
- WebPart.cs
- AssociationType.cs
- MessageContractAttribute.cs
- VideoDrawing.cs
- CodeConditionStatement.cs
- DeclarativeCatalogPartDesigner.cs
- ComponentCodeDomSerializer.cs
- SoapClientProtocol.cs
- SecurityTokenSerializer.cs
- TreeViewCancelEvent.cs
- AttributeParameterInfo.cs
- MemoryFailPoint.cs
- BinaryWriter.cs
- XmlTextReaderImplHelpers.cs
- ListViewHitTestInfo.cs
- SerialErrors.cs
- InstanceCollisionException.cs
- CheckBoxField.cs
- OperationAbortedException.cs
- UnmanagedMemoryStreamWrapper.cs
- Rotation3DKeyFrameCollection.cs
- returneventsaver.cs
- WindowsListViewGroupSubsetLink.cs
- EntityViewGenerator.cs
- ReadOnlyDictionary.cs
- IdentityNotMappedException.cs
- Pen.cs
- MemberListBinding.cs
- GacUtil.cs
- Expression.cs
- DesignerCategoryAttribute.cs
- SafeFileHandle.cs
- PeerResolverElement.cs
- ApplicationContext.cs
- Descriptor.cs
- TagPrefixCollection.cs
- IntSecurity.cs
- COM2ColorConverter.cs
- FixedStringLookup.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- CompilerGeneratedAttribute.cs
- StaticContext.cs
- SecurityVersion.cs
- AssemblyUtil.cs
- DashStyles.cs
- XmlILIndex.cs
- Thread.cs
- ObjectFullSpanRewriter.cs
- SchemaMerger.cs
- Calendar.cs
- PanningMessageFilter.cs
- SoapAttributeOverrides.cs
- FontSourceCollection.cs
- ContentHostHelper.cs
- MethodBody.cs
- Permission.cs
- FileDialogCustomPlacesCollection.cs
- DefaultBinder.cs
- TextServicesPropertyRanges.cs
- OperandQuery.cs
- TextFormatterImp.cs
- BrowsableAttribute.cs
- Int16Animation.cs
- QueryableDataSourceEditData.cs
- PageThemeCodeDomTreeGenerator.cs
- ExtendedPropertyCollection.cs
- SecurityTokenException.cs
- ExpressionStringBuilder.cs
- CornerRadiusConverter.cs
- CheckBox.cs
- ScriptManagerProxy.cs
- TreeIterators.cs
- LambdaCompiler.Binary.cs
- EmptyEnumerator.cs
- WebSysDisplayNameAttribute.cs
- ECDiffieHellmanPublicKey.cs
- AssociationTypeEmitter.cs