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
- ICollection.cs
- coordinator.cs
- DBSqlParser.cs
- EventProviderWriter.cs
- SafePointer.cs
- XamlHostingConfiguration.cs
- LayoutEditorPart.cs
- XmlFileEditor.cs
- COM2IDispatchConverter.cs
- DataSourceSelectArguments.cs
- RoleGroup.cs
- iisPickupDirectory.cs
- WindowInteropHelper.cs
- XpsFontSubsetter.cs
- Thumb.cs
- ObjectToken.cs
- AuthenticationServiceManager.cs
- ConnectionsZone.cs
- FormatException.cs
- AppLevelCompilationSectionCache.cs
- CodeConditionStatement.cs
- DataGridColumnStyleMappingNameEditor.cs
- MatrixConverter.cs
- PreviousTrackingServiceAttribute.cs
- SpecularMaterial.cs
- BasicCellRelation.cs
- CryptoApi.cs
- HtmlMeta.cs
- RowUpdatedEventArgs.cs
- PassportAuthentication.cs
- IntAverageAggregationOperator.cs
- OdbcConnectionHandle.cs
- QueryBranchOp.cs
- TextWriterEngine.cs
- SimplePropertyEntry.cs
- InternalPermissions.cs
- TreeSet.cs
- ServerValidateEventArgs.cs
- XPathSelfQuery.cs
- SpStreamWrapper.cs
- WorkflowItemPresenter.cs
- FrameworkElementFactory.cs
- HandlerBase.cs
- ParseNumbers.cs
- UnmanagedMemoryStream.cs
- PrimitiveSchema.cs
- BamlMapTable.cs
- Track.cs
- ToolStripHighContrastRenderer.cs
- MessageBuffer.cs
- NavigationEventArgs.cs
- SqlSupersetValidator.cs
- EventProvider.cs
- ExpressionNormalizer.cs
- DataGridViewCellFormattingEventArgs.cs
- OdbcConnectionFactory.cs
- WebPartActionVerb.cs
- GeneralTransform3DTo2D.cs
- SamlAuthorizationDecisionClaimResource.cs
- DataGridViewRowsAddedEventArgs.cs
- PointCollection.cs
- DbParameterCollectionHelper.cs
- ScriptHandlerFactory.cs
- StringResourceManager.cs
- XmlTextWriter.cs
- PropertyBuilder.cs
- SafeEventLogWriteHandle.cs
- ByteKeyFrameCollection.cs
- Rule.cs
- BaseCAMarshaler.cs
- WinEventHandler.cs
- ResourceDescriptionAttribute.cs
- SHA1Cng.cs
- BindingNavigator.cs
- PrivilegedConfigurationManager.cs
- IsolatedStorageFilePermission.cs
- LocalServiceSecuritySettings.cs
- ToolStripMenuItem.cs
- MenuItemAutomationPeer.cs
- BitmapInitialize.cs
- PassportAuthentication.cs
- TextBoxLine.cs
- DynamicDataExtensions.cs
- SynchronizedDispatch.cs
- CannotUnloadAppDomainException.cs
- InlineCollection.cs
- shaper.cs
- MetadataItemCollectionFactory.cs
- EndpointConfigContainer.cs
- TextFormatter.cs
- CodeDirectoryCompiler.cs
- ObjectQueryProvider.cs
- PackageStore.cs
- TransactionInformation.cs
- WebControlAdapter.cs
- EventLevel.cs
- FormatConvertedBitmap.cs
- DbConnectionPool.cs
- PartialCachingControl.cs
- UpdateProgress.cs