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
- WebServiceData.cs
- ContentDisposition.cs
- DataGridViewColumnConverter.cs
- FormsAuthenticationCredentials.cs
- MissingMemberException.cs
- ReflectTypeDescriptionProvider.cs
- _Connection.cs
- FloaterParaClient.cs
- ListParagraph.cs
- HtmlWindow.cs
- HelpEvent.cs
- ListViewDeleteEventArgs.cs
- SystemIPInterfaceStatistics.cs
- CustomExpressionEventArgs.cs
- MethodToken.cs
- ConnectionManagementSection.cs
- EncoderFallback.cs
- VectorAnimation.cs
- PathGeometry.cs
- NegatedCellConstant.cs
- DataRowChangeEvent.cs
- ValueProviderWrapper.cs
- WebHostScriptMappingsInstallComponent.cs
- XmlNamespaceDeclarationsAttribute.cs
- PageClientProxyGenerator.cs
- GeometryHitTestParameters.cs
- TextEditorParagraphs.cs
- MonthCalendarDesigner.cs
- StreamingContext.cs
- InfoCard.cs
- RoutedEventConverter.cs
- UrlRoutingHandler.cs
- TransactionProxy.cs
- DataControlFieldHeaderCell.cs
- ChildrenQuery.cs
- NamespaceEmitter.cs
- Shape.cs
- IPAddressCollection.cs
- CustomCredentialPolicy.cs
- TraceSection.cs
- HuffmanTree.cs
- EmptyEnumerator.cs
- DrawingCollection.cs
- Method.cs
- SegmentInfo.cs
- RuleSettingsCollection.cs
- NetPipeSectionData.cs
- WebBaseEventKeyComparer.cs
- ReflectionUtil.cs
- Transform3D.cs
- Error.cs
- UnaryNode.cs
- CryptoApi.cs
- InteropExecutor.cs
- TypedRowGenerator.cs
- HeaderedContentControl.cs
- MethodRental.cs
- ListItemCollection.cs
- NavigationProgressEventArgs.cs
- DatatypeImplementation.cs
- ConfigurationPermission.cs
- HwndKeyboardInputProvider.cs
- DetailsViewDeleteEventArgs.cs
- VisualCollection.cs
- WasEndpointConfigContainer.cs
- _TimerThread.cs
- SpeakCompletedEventArgs.cs
- DataGridViewRowPrePaintEventArgs.cs
- SafeRightsManagementEnvironmentHandle.cs
- DocumentXPathNavigator.cs
- PropertyBuilder.cs
- XmlSerializationReader.cs
- ResolveNameEventArgs.cs
- CodeAttributeDeclarationCollection.cs
- BaseUriHelper.cs
- PatternMatcher.cs
- LoadItemsEventArgs.cs
- XamlSerializerUtil.cs
- SplineKeyFrames.cs
- ProcessModelSection.cs
- ParserOptions.cs
- ApplicationInfo.cs
- SqlDataSourceConfigureFilterForm.cs
- Canvas.cs
- TemplateModeChangedEventArgs.cs
- DecimalKeyFrameCollection.cs
- cookiecollection.cs
- _PooledStream.cs
- DynamicActivity.cs
- ResourceAttributes.cs
- DocobjHost.cs
- FileRegion.cs
- RelatedView.cs
- RenamedEventArgs.cs
- BrushProxy.cs
- Inflater.cs
- AssertSection.cs
- CellPartitioner.cs
- DataSet.cs
- DeflateStream.cs