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
- AssemblyNameProxy.cs
- GenericTextProperties.cs
- RepeatBehaviorConverter.cs
- PerfCounterSection.cs
- BuildProviderUtils.cs
- ThreadAttributes.cs
- Baml2006Reader.cs
- TextChange.cs
- BamlLocalizer.cs
- StringSorter.cs
- Triplet.cs
- CodeAttributeArgumentCollection.cs
- WebPartMinimizeVerb.cs
- IncrementalHitTester.cs
- BaseHashHelper.cs
- XamlTypeMapper.cs
- VectorAnimationBase.cs
- AssociationSet.cs
- FormView.cs
- ObjectSecurity.cs
- UriParserTemplates.cs
- WindowsEditBox.cs
- OptimizedTemplateContentHelper.cs
- DataControlField.cs
- PropertyGridCommands.cs
- XslException.cs
- GetPageCompletedEventArgs.cs
- RichTextBoxAutomationPeer.cs
- Timer.cs
- ModuleBuilder.cs
- AppDomainUnloadedException.cs
- RuntimeCompatibilityAttribute.cs
- Math.cs
- IChannel.cs
- MouseGesture.cs
- FigureHelper.cs
- ItemList.cs
- TrailingSpaceComparer.cs
- SerialPinChanges.cs
- ServerReliableChannelBinder.cs
- IODescriptionAttribute.cs
- HttpWebRequest.cs
- DesignerActionGlyph.cs
- PageParser.cs
- ChannelReliableSession.cs
- EntityDataSource.cs
- TreeView.cs
- EtwTrace.cs
- WeakReferenceEnumerator.cs
- EntitySetBaseCollection.cs
- EncoderExceptionFallback.cs
- Control.cs
- ArithmeticException.cs
- ListItemConverter.cs
- AlgoModule.cs
- IOException.cs
- cookiecollection.cs
- ToolStripKeyboardHandlingService.cs
- StringBuilder.cs
- ExpressionTable.cs
- KeyGestureValueSerializer.cs
- SimpleMailWebEventProvider.cs
- AdapterUtil.cs
- BulletedListEventArgs.cs
- HwndProxyElementProvider.cs
- COMException.cs
- XmlUtf8RawTextWriter.cs
- BooleanExpr.cs
- ResourcePool.cs
- PermissionRequestEvidence.cs
- EntitySqlQueryCacheKey.cs
- ReceiveSecurityHeaderElementManager.cs
- AssemblyAssociatedContentFileAttribute.cs
- XmlWrappingWriter.cs
- TabRenderer.cs
- HotSpot.cs
- SourceFileBuildProvider.cs
- ScaleTransform.cs
- SerializationSectionGroup.cs
- InternalSendMessage.cs
- CodeArrayIndexerExpression.cs
- Model3D.cs
- EventPropertyMap.cs
- HierarchicalDataSourceControl.cs
- MailWriter.cs
- ConstraintConverter.cs
- IsolatedStorageFile.cs
- Debug.cs
- RegistryConfigurationProvider.cs
- X509Certificate2Collection.cs
- DefinitionProperties.cs
- ProviderMetadata.cs
- LexicalChunk.cs
- ComponentResourceKeyConverter.cs
- TargetInvocationException.cs
- BinaryObjectReader.cs
- InheritedPropertyChangedEventArgs.cs
- ContentControl.cs
- MetafileHeader.cs
- CodeConstructor.cs