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
- MSHTMLHost.cs
- DesignerImageAdapter.cs
- NavigationFailedEventArgs.cs
- StateMachineExecutionState.cs
- Rect3D.cs
- Int64AnimationUsingKeyFrames.cs
- TagMapInfo.cs
- DataSourceCache.cs
- ObjectListComponentEditor.cs
- TagNameToTypeMapper.cs
- OrderedDictionaryStateHelper.cs
- _BasicClient.cs
- IgnorePropertiesAttribute.cs
- XPathSelectionIterator.cs
- ReadOnlyKeyedCollection.cs
- DynamicPropertyHolder.cs
- RecognizedWordUnit.cs
- NoPersistScope.cs
- HitTestParameters.cs
- AccessDataSourceView.cs
- DPCustomTypeDescriptor.cs
- DesignerAttribute.cs
- DivideByZeroException.cs
- ReversePositionQuery.cs
- DynamicRenderer.cs
- DocumentXPathNavigator.cs
- AssertUtility.cs
- ObjectComplexPropertyMapping.cs
- CompilerScopeManager.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- Timeline.cs
- Vector3dCollection.cs
- TrackingStringDictionary.cs
- WsdlInspector.cs
- wgx_render.cs
- XmlMemberMapping.cs
- SafeHandles.cs
- HtmlMeta.cs
- DataSourceControl.cs
- CryptoApi.cs
- securestring.cs
- NumberFormatter.cs
- WebPartsPersonalizationAuthorization.cs
- DiffuseMaterial.cs
- HtmlPhoneCallAdapter.cs
- SystemResourceHost.cs
- CompositeDataBoundControl.cs
- GCHandleCookieTable.cs
- SafeTimerHandle.cs
- StylusTouchDevice.cs
- EdmType.cs
- PolicyAssertionCollection.cs
- XmlSchemaAnyAttribute.cs
- Compiler.cs
- XPathNodeInfoAtom.cs
- OleDbException.cs
- ResolvedKeyFrameEntry.cs
- ThreadStaticAttribute.cs
- TextWriterTraceListener.cs
- LayoutExceptionEventArgs.cs
- ScriptServiceAttribute.cs
- ResourcesChangeInfo.cs
- JsonServiceDocumentSerializer.cs
- StickyNote.cs
- TransactionException.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- backend.cs
- ByteStreamMessageEncodingElement.cs
- X509Certificate.cs
- CodeMethodMap.cs
- TextProviderWrapper.cs
- ObjectParameter.cs
- RoutedPropertyChangedEventArgs.cs
- OleDbParameter.cs
- CodeConstructor.cs
- VisualTreeHelper.cs
- HtmlHead.cs
- PerSessionInstanceContextProvider.cs
- RIPEMD160Managed.cs
- EditingCoordinator.cs
- DataPager.cs
- FontDriver.cs
- RefExpr.cs
- ProcessProtocolHandler.cs
- Serializer.cs
- NestPullup.cs
- MachineSettingsSection.cs
- ReadOnlyTernaryTree.cs
- GridView.cs
- Section.cs
- OleDbConnectionInternal.cs
- IProvider.cs
- WmlTextViewAdapter.cs
- UrlMappingsSection.cs
- UnsafeNativeMethods.cs
- ArgumentValueSerializer.cs
- DocumentPage.cs
- ImmComposition.cs
- WhitespaceRuleReader.cs
- AdPostCacheSubstitution.cs