Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ClientType.cs
- Internal.cs
- SecurityStandardsManager.cs
- DataGridViewEditingControlShowingEventArgs.cs
- SqlDataRecord.cs
- CodeMethodInvokeExpression.cs
- _WinHttpWebProxyDataBuilder.cs
- ParallelTimeline.cs
- NavigationWindow.cs
- TextEditorCharacters.cs
- Tile.cs
- StreamWriter.cs
- SystemMulticastIPAddressInformation.cs
- CodeCompileUnit.cs
- ProcessThreadCollection.cs
- CodeCatchClauseCollection.cs
- StylusPointProperties.cs
- CreateUserErrorEventArgs.cs
- InputLanguageEventArgs.cs
- GlyphRun.cs
- XmlSchemaSimpleContentExtension.cs
- CodePageUtils.cs
- XmlAutoDetectWriter.cs
- Expr.cs
- XmlWriter.cs
- WebDisplayNameAttribute.cs
- BamlLocalizationDictionary.cs
- GC.cs
- XsltLoader.cs
- AttributeCollection.cs
- ObjectStateFormatter.cs
- InternalPolicyElement.cs
- ClearCollection.cs
- ActiveXContainer.cs
- EdgeProfileValidation.cs
- AssemblyBuilder.cs
- TableRowCollection.cs
- Enum.cs
- WebColorConverter.cs
- NavigateEvent.cs
- XmlNamespaceDeclarationsAttribute.cs
- FixedDSBuilder.cs
- ObjectDataSource.cs
- FrameworkObject.cs
- Version.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- StrongNameUtility.cs
- SoapReflectionImporter.cs
- DataColumnMapping.cs
- IsolationInterop.cs
- CellNormalizer.cs
- FormsAuthenticationUserCollection.cs
- Selection.cs
- OperationAbortedException.cs
- FixedSOMPage.cs
- XmlSchemaImport.cs
- DistinctQueryOperator.cs
- Brushes.cs
- ButtonField.cs
- Constraint.cs
- CqlErrorHelper.cs
- AppDomainProtocolHandler.cs
- GridViewColumnHeader.cs
- FlowLayoutSettings.cs
- SafeThemeHandle.cs
- ResourceContainer.cs
- MatrixAnimationUsingPath.cs
- Invariant.cs
- SrgsToken.cs
- IImplicitResourceProvider.cs
- NullRuntimeConfig.cs
- BrowserCapabilitiesFactory.cs
- Parser.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- DTCTransactionManager.cs
- EncoderReplacementFallback.cs
- SamlAuthorizationDecisionClaimResource.cs
- PageRanges.cs
- WindowsFormsHostPropertyMap.cs
- WebPartTransformerAttribute.cs
- InstanceDataCollection.cs
- MatrixConverter.cs
- GridToolTip.cs
- SqlMethodCallConverter.cs
- UIElementPropertyUndoUnit.cs
- MetadataItem.cs
- TypeGeneratedEventArgs.cs
- WinFormsComponentEditor.cs
- COM2IDispatchConverter.cs
- UnauthorizedAccessException.cs
- dtdvalidator.cs
- StringAnimationBase.cs
- Utils.cs
- FixedDocumentSequencePaginator.cs
- TimerElapsedEvenArgs.cs
- MetadataPropertyCollection.cs
- GeneralTransform3DTo2D.cs
- XPathDescendantIterator.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- DesignTable.cs