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
- FixedSOMFixedBlock.cs
- SystemWebExtensionsSectionGroup.cs
- PropertyTabAttribute.cs
- OrderedDictionary.cs
- FileCodeGroup.cs
- Version.cs
- MultipleViewProviderWrapper.cs
- sqlcontext.cs
- ListItemConverter.cs
- DrawingDrawingContext.cs
- AssemblyBuilder.cs
- DesignerVerb.cs
- SizeAnimationUsingKeyFrames.cs
- InputProcessorProfilesLoader.cs
- FixedTextSelectionProcessor.cs
- InstallerTypeAttribute.cs
- autovalidator.cs
- SurrogateEncoder.cs
- PackageStore.cs
- HandlerBase.cs
- StateWorkerRequest.cs
- InvalidDocumentContentsException.cs
- XmlSchemaResource.cs
- AcceleratedTokenProvider.cs
- ConnectionStringSettingsCollection.cs
- RandomNumberGenerator.cs
- BaseProcessor.cs
- Encoder.cs
- IdentityManager.cs
- Suspend.cs
- BaseParaClient.cs
- OleDbCommandBuilder.cs
- PrintControllerWithStatusDialog.cs
- PlaceHolder.cs
- SatelliteContractVersionAttribute.cs
- HtmlTextArea.cs
- HttpGetProtocolImporter.cs
- Margins.cs
- Quad.cs
- DragEvent.cs
- ObjectIDGenerator.cs
- FusionWrap.cs
- Application.cs
- BaseCodePageEncoding.cs
- HwndMouseInputProvider.cs
- ThreadStateException.cs
- ConfigXmlCDataSection.cs
- TokenBasedSetEnumerator.cs
- ValuePatternIdentifiers.cs
- ObjectDataSource.cs
- InternalCache.cs
- StreamReader.cs
- Wrapper.cs
- CodeCommentStatementCollection.cs
- UIElement.cs
- DrawListViewItemEventArgs.cs
- WebControlAdapter.cs
- PropertyRecord.cs
- ISAPIWorkerRequest.cs
- UrlParameterReader.cs
- ReadOnlyMetadataCollection.cs
- AsyncCompletedEventArgs.cs
- LayoutInformation.cs
- GenericWebPart.cs
- ProviderCollection.cs
- EtwTrace.cs
- ControlEvent.cs
- ResourceAttributes.cs
- cookieexception.cs
- HttpResponseHeader.cs
- CopyNodeSetAction.cs
- ToolBar.cs
- IndicFontClient.cs
- MarkerProperties.cs
- ActivityTrace.cs
- StructuralComparisons.cs
- RoleManagerModule.cs
- RelationshipType.cs
- CompositeCollection.cs
- CacheOutputQuery.cs
- StorageComplexPropertyMapping.cs
- DragDeltaEventArgs.cs
- TableRowCollection.cs
- TextEndOfSegment.cs
- RouteItem.cs
- Point3DAnimation.cs
- UserNameSecurityToken.cs
- SpotLight.cs
- XmlArrayItemAttribute.cs
- SRGSCompiler.cs
- PersonalizationStateInfoCollection.cs
- XmlDownloadManager.cs
- TreeNodeClickEventArgs.cs
- ArithmeticLiteral.cs
- ColumnWidthChangingEvent.cs
- XmlNodeReader.cs
- Operators.cs
- UndoEngine.cs
- JoinTreeNode.cs
- BrowserCapabilitiesFactoryBase.cs