Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Data / System / Data / ProviderBase / WrappedIUnknown.cs / 1 / WrappedIUnknown.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //----------------------------------------------------------------------------- namespace System.Data.ProviderBase { using System; using System.Data.Common; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using System.Threading; // We wrap the interface as a native IUnknown IntPtr so that every // thread that creates a connection will fake the correct context when // in transactions, otherwise everything is marshalled. We do this // for two reasons: first for the connection pooler, this is a significant // performance gain, second for the OLE DB provider, it doesn't marshal. internal class WrappedIUnknown : SafeHandle { internal WrappedIUnknown() : base(IntPtr.Zero, true) { } internal WrappedIUnknown(object unknown) : this() { if (null != unknown) { RuntimeHelpers.PrepareConstrainedRegions(); try {} finally { base.handle = Marshal.GetIUnknownForObject(unknown); // } } } public override bool IsInvalid { get { return (IntPtr.Zero == base.handle); } } internal object ComWrapper() { // NOTE: Method, instead of property, to avoid being evaluated at // runtime in the debugger. object value = null; bool mustRelease = false; RuntimeHelpers.PrepareConstrainedRegions(); try { DangerousAddRef(ref mustRelease); IntPtr handle = DangerousGetHandle(); value = System.Runtime.Remoting.Services.EnterpriseServicesHelper.WrapIUnknownWithComObject(handle); } finally { if (mustRelease) { DangerousRelease(); } } return value; } override protected bool ReleaseHandle() { // NOTE: The SafeHandle class guarantees this will be called exactly once. IntPtr ptr = base.handle; base.handle = IntPtr.Zero; if (IntPtr.Zero != ptr) { Marshal.Release(ptr); } return true; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //----------------------------------------------------------------------------- namespace System.Data.ProviderBase { using System; using System.Data.Common; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using System.Threading; // We wrap the interface as a native IUnknown IntPtr so that every // thread that creates a connection will fake the correct context when // in transactions, otherwise everything is marshalled. We do this // for two reasons: first for the connection pooler, this is a significant // performance gain, second for the OLE DB provider, it doesn't marshal. internal class WrappedIUnknown : SafeHandle { internal WrappedIUnknown() : base(IntPtr.Zero, true) { } internal WrappedIUnknown(object unknown) : this() { if (null != unknown) { RuntimeHelpers.PrepareConstrainedRegions(); try {} finally { base.handle = Marshal.GetIUnknownForObject(unknown); // } } } public override bool IsInvalid { get { return (IntPtr.Zero == base.handle); } } internal object ComWrapper() { // NOTE: Method, instead of property, to avoid being evaluated at // runtime in the debugger. object value = null; bool mustRelease = false; RuntimeHelpers.PrepareConstrainedRegions(); try { DangerousAddRef(ref mustRelease); IntPtr handle = DangerousGetHandle(); value = System.Runtime.Remoting.Services.EnterpriseServicesHelper.WrapIUnknownWithComObject(handle); } finally { if (mustRelease) { DangerousRelease(); } } return value; } override protected bool ReleaseHandle() { // NOTE: The SafeHandle class guarantees this will be called exactly once. IntPtr ptr = base.handle; base.handle = IntPtr.Zero; if (IntPtr.Zero != ptr) { Marshal.Release(ptr); } return true; } } } // 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
- FontEmbeddingManager.cs
- DataColumnChangeEvent.cs
- ThreadAbortException.cs
- EraserBehavior.cs
- ContentElement.cs
- CreateUserWizardStep.cs
- StringDictionaryWithComparer.cs
- AuthorizationRule.cs
- serverconfig.cs
- DataSourceXmlSubItemAttribute.cs
- StickyNoteAnnotations.cs
- ParseHttpDate.cs
- IResourceProvider.cs
- FlowLayoutPanel.cs
- DecoderReplacementFallback.cs
- XmlJsonReader.cs
- OracleRowUpdatedEventArgs.cs
- EmptyCollection.cs
- DataGridViewCellCancelEventArgs.cs
- MenuItem.cs
- ProcessManager.cs
- SR.cs
- RoutedPropertyChangedEventArgs.cs
- PixelFormat.cs
- SurrogateEncoder.cs
- Ref.cs
- InstanceLockLostException.cs
- WebHeaderCollection.cs
- Trace.cs
- CrossSiteScriptingValidation.cs
- ExtractedStateEntry.cs
- ParseElement.cs
- NotifyIcon.cs
- XmlRawWriterWrapper.cs
- AppSettingsSection.cs
- PropertyFilterAttribute.cs
- ResourcePart.cs
- ControlCachePolicy.cs
- QilTypeChecker.cs
- ListViewAutomationPeer.cs
- XmlNodeList.cs
- Proxy.cs
- InitiatorServiceModelSecurityTokenRequirement.cs
- RequiredAttributeAttribute.cs
- AttributeCollection.cs
- WindowsProgressbar.cs
- _Rfc2616CacheValidators.cs
- RtfToXamlLexer.cs
- Transform3D.cs
- ChtmlFormAdapter.cs
- SubstitutionList.cs
- invalidudtexception.cs
- CodeThrowExceptionStatement.cs
- CDSsyncETWBCLProvider.cs
- ProxyWebPartManager.cs
- FormsAuthenticationModule.cs
- ProviderSettings.cs
- Panel.cs
- CompositionCommandSet.cs
- MenuAdapter.cs
- CalendarTable.cs
- MarkedHighlightComponent.cs
- ParserOptions.cs
- ListMarkerSourceInfo.cs
- BitmapDownload.cs
- EditorServiceContext.cs
- CroppedBitmap.cs
- ComponentEditorForm.cs
- ToolStripRenderer.cs
- StringWriter.cs
- ParsedAttributeCollection.cs
- HttpCachePolicyBase.cs
- ToolCreatedEventArgs.cs
- Helper.cs
- _BasicClient.cs
- SmiRecordBuffer.cs
- VectorCollectionValueSerializer.cs
- PrefixQName.cs
- Page.cs
- IISUnsafeMethods.cs
- TransactionChannelFactory.cs
- LineBreakRecord.cs
- LocalTransaction.cs
- SimpleHandlerFactory.cs
- ColumnWidthChangingEvent.cs
- InkPresenter.cs
- Animatable.cs
- CodeDirectoryCompiler.cs
- KeyInterop.cs
- DocumentSequenceHighlightLayer.cs
- DllNotFoundException.cs
- InvalidOperationException.cs
- GPPOINTF.cs
- HttpWriter.cs
- ElementAction.cs
- WebAdminConfigurationHelper.cs
- AsymmetricKeyExchangeDeformatter.cs
- TextFormatterHost.cs
- ConfigurationPropertyCollection.cs
- DesignBindingConverter.cs