Code:
/ 4.0 / 4.0 / 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. // ==++== // // 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
- DynamicScriptObject.cs
- RecordsAffectedEventArgs.cs
- DesignerVerb.cs
- ProxyElement.cs
- WrapPanel.cs
- MediaCommands.cs
- DrawingDrawingContext.cs
- XmlName.cs
- BatchParser.cs
- PreviewKeyDownEventArgs.cs
- TrustLevelCollection.cs
- LayoutEvent.cs
- EntityDataSourceColumn.cs
- HostedNamedPipeTransportManager.cs
- ScrollEventArgs.cs
- SqlConnectionHelper.cs
- LocationEnvironment.cs
- ProfileInfo.cs
- IpcManager.cs
- SmiConnection.cs
- ExtensionsSection.cs
- WinEventQueueItem.cs
- CircleHotSpot.cs
- DetailsViewActionList.cs
- WebMethodAttribute.cs
- PartialArray.cs
- EndOfStreamException.cs
- WebPartPersonalization.cs
- TemplateControlParser.cs
- Help.cs
- SafeLibraryHandle.cs
- ServiceOperationDetailViewControl.cs
- BitmapEffect.cs
- MachineKey.cs
- StyleBamlRecordReader.cs
- BridgeDataRecord.cs
- CapabilitiesSection.cs
- CheckBoxField.cs
- NameValuePair.cs
- DataServiceRequestOfT.cs
- ToolStripDropDownButton.cs
- AuthorizationSection.cs
- FormatException.cs
- ContractMapping.cs
- PresentationSource.cs
- TraceHandler.cs
- DbXmlEnabledProviderManifest.cs
- RtType.cs
- PackWebResponse.cs
- QueryContext.cs
- ClosableStream.cs
- FileUtil.cs
- Helpers.cs
- XmlArrayItemAttributes.cs
- Translator.cs
- XsltCompileContext.cs
- _KerberosClient.cs
- SqlDataSourceView.cs
- FixedSOMTableRow.cs
- iisPickupDirectory.cs
- RegexWriter.cs
- DependsOnAttribute.cs
- HotSpotCollectionEditor.cs
- WaitForChangedResult.cs
- CustomTypeDescriptor.cs
- DataGridViewSelectedCellCollection.cs
- IndicShape.cs
- KeyValueConfigurationCollection.cs
- DataSysAttribute.cs
- ObjectDataSourceStatusEventArgs.cs
- RowUpdatedEventArgs.cs
- WebPartExportVerb.cs
- SHA256Managed.cs
- ThicknessAnimationBase.cs
- LinqDataSourceContextEventArgs.cs
- NativeMethods.cs
- CachedFontFace.cs
- __Filters.cs
- File.cs
- CollectionBase.cs
- XmlSchemas.cs
- XMLSchema.cs
- RepeatBehavior.cs
- FixedTextView.cs
- ProcessInputEventArgs.cs
- WindowsFormsHelpers.cs
- Table.cs
- PropertyFilterAttribute.cs
- ZipQueryOperator.cs
- ItemContainerGenerator.cs
- XmlAnyAttributeAttribute.cs
- GetPageCompletedEventArgs.cs
- Internal.cs
- ListComponentEditor.cs
- MultiSelector.cs
- Vector3DCollectionConverter.cs
- MSAAWinEventWrap.cs
- EmptyReadOnlyDictionaryInternal.cs
- CapabilitiesPattern.cs
- DrawingImage.cs