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
- SiteMapPath.cs
- DataTableNameHandler.cs
- MenuItemBinding.cs
- ConfigXmlReader.cs
- RubberbandSelector.cs
- BitmapEffectDrawingContent.cs
- VirtualPath.cs
- ComplexTypeEmitter.cs
- TransformGroup.cs
- PropertyKey.cs
- connectionpool.cs
- ServiceDescriptions.cs
- PartialToken.cs
- SmiEventStream.cs
- MdImport.cs
- Menu.cs
- SHA1Managed.cs
- TableLayoutCellPaintEventArgs.cs
- CompressedStack.cs
- XmlAutoDetectWriter.cs
- TreePrinter.cs
- PropertyNames.cs
- PolicyStatement.cs
- XmlUTF8TextWriter.cs
- KnownTypes.cs
- XmlSchemaSimpleContentRestriction.cs
- TextDecorationCollection.cs
- MetadataItemCollectionFactory.cs
- OdbcException.cs
- DefaultBinder.cs
- FontEmbeddingManager.cs
- SymbolEqualComparer.cs
- DataGridViewTextBoxEditingControl.cs
- PnrpPeerResolverElement.cs
- ListenerAdapterBase.cs
- TreeViewItemAutomationPeer.cs
- DispatchChannelSink.cs
- UIntPtr.cs
- DivideByZeroException.cs
- HtmlButton.cs
- HashRepartitionEnumerator.cs
- NameSpaceEvent.cs
- AssociatedControlConverter.cs
- ComponentFactoryHelpers.cs
- CompletionBookmark.cs
- CommandLineParser.cs
- QuaternionAnimation.cs
- ExceptionUtility.cs
- XmlnsDefinitionAttribute.cs
- SqlDelegatedTransaction.cs
- ColumnReorderedEventArgs.cs
- DbDataAdapter.cs
- CookielessHelper.cs
- XmlMtomWriter.cs
- BatchStream.cs
- PrincipalPermissionMode.cs
- UriParserTemplates.cs
- UserControlCodeDomTreeGenerator.cs
- ProcessHostServerConfig.cs
- RegisteredArrayDeclaration.cs
- PrintEvent.cs
- CallbackValidator.cs
- ApplicationManager.cs
- OneOfConst.cs
- ProfilePropertySettingsCollection.cs
- CompiledRegexRunnerFactory.cs
- MD5CryptoServiceProvider.cs
- ActivityExecutionContextCollection.cs
- InlineCollection.cs
- TimeSpanValidatorAttribute.cs
- BamlLocalizableResourceKey.cs
- dataprotectionpermission.cs
- EventSourceCreationData.cs
- ServiceEndpoint.cs
- OpenTypeLayoutCache.cs
- StructuralCache.cs
- ChineseLunisolarCalendar.cs
- Control.cs
- GridToolTip.cs
- Point.cs
- OrderedDictionary.cs
- EraserBehavior.cs
- _LoggingObject.cs
- ToolBarTray.cs
- StylusOverProperty.cs
- HttpPostedFileBase.cs
- XmlBinaryWriterSession.cs
- StyleBamlTreeBuilder.cs
- ScrollChrome.cs
- XmlObjectSerializerWriteContext.cs
- CodeMethodReturnStatement.cs
- DisposableCollectionWrapper.cs
- TemplateControlBuildProvider.cs
- KeyGestureValueSerializer.cs
- COM2ColorConverter.cs
- AutomationElementCollection.cs
- AspProxy.cs
- _MultipleConnectAsync.cs
- Section.cs
- CryptoStream.cs