Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Data / System / Data / ProviderBase / WrappedIUnknown.cs / 1305376 / 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
- UnderstoodHeaders.cs
- WpfGeneratedKnownTypes.cs
- ImageAutomationPeer.cs
- SamlAuthenticationClaimResource.cs
- MethodImplAttribute.cs
- SynchronousReceiveBehavior.cs
- PasswordBoxAutomationPeer.cs
- RequestCacheValidator.cs
- ToolStripMenuItem.cs
- ContextStack.cs
- GenericNameHandler.cs
- SkewTransform.cs
- XPathMessageFilterElement.cs
- ControlBuilder.cs
- FixedPageAutomationPeer.cs
- FragmentNavigationEventArgs.cs
- WebPartAuthorizationEventArgs.cs
- StaticFileHandler.cs
- smtpconnection.cs
- PenCursorManager.cs
- EndpointInfoCollection.cs
- InvokeHandlers.cs
- ServiceOperationParameter.cs
- EqualityComparer.cs
- xmlfixedPageInfo.cs
- DrawingGroup.cs
- XmlSchemaIdentityConstraint.cs
- DbRetry.cs
- BezierSegment.cs
- WebServiceAttribute.cs
- TextBreakpoint.cs
- TraceHandlerErrorFormatter.cs
- IImplicitResourceProvider.cs
- JsonReaderDelegator.cs
- StructuredProperty.cs
- ValidatedControlConverter.cs
- NavigationProgressEventArgs.cs
- SafeProcessHandle.cs
- DesignerObjectListAdapter.cs
- BaseTreeIterator.cs
- SoapSchemaMember.cs
- LinkAreaEditor.cs
- PropertyFilter.cs
- SoapReflectionImporter.cs
- PrintPreviewDialog.cs
- ResourceContainer.cs
- EncodingDataItem.cs
- designeractionlistschangedeventargs.cs
- ParagraphVisual.cs
- WriterOutput.cs
- mansign.cs
- PopupRoot.cs
- TextElementCollection.cs
- SettingsPropertyIsReadOnlyException.cs
- RowToFieldTransformer.cs
- HtmlTitle.cs
- BitStream.cs
- SequentialWorkflowHeaderFooter.cs
- NGCSerializerAsync.cs
- DbTransaction.cs
- WebFormsRootDesigner.cs
- IteratorFilter.cs
- ItemList.cs
- ArrayHelper.cs
- OleDbFactory.cs
- SwitchAttribute.cs
- SupportingTokenChannel.cs
- WSHttpTransportSecurityElement.cs
- SmiEventSink_DeferedProcessing.cs
- CorrelationValidator.cs
- WebSysDescriptionAttribute.cs
- WebControlAdapter.cs
- PrimitiveDataContract.cs
- SspiHelper.cs
- State.cs
- _FtpControlStream.cs
- LoadedOrUnloadedOperation.cs
- DataSourceBooleanViewSchemaConverter.cs
- MessageBox.cs
- ObjectKeyFrameCollection.cs
- IISUnsafeMethods.cs
- WebPartMinimizeVerb.cs
- TextPattern.cs
- ColumnCollection.cs
- WebServiceBindingAttribute.cs
- ElementNotAvailableException.cs
- FormattedText.cs
- TextMetrics.cs
- GlyphTypeface.cs
- AssemblyBuilder.cs
- TextBoxBase.cs
- AsnEncodedData.cs
- GridEntryCollection.cs
- StylusShape.cs
- InertiaTranslationBehavior.cs
- TextViewSelectionProcessor.cs
- DataGridClipboardHelper.cs
- ArrayItemReference.cs
- SQLConvert.cs
- PolyBezierSegmentFigureLogic.cs