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
- BindStream.cs
- ConstraintManager.cs
- CallSite.cs
- EntitySqlException.cs
- InstalledFontCollection.cs
- Rect3DConverter.cs
- TextRunProperties.cs
- Token.cs
- XmlAutoDetectWriter.cs
- SmtpCommands.cs
- PropertyChangingEventArgs.cs
- DoubleKeyFrameCollection.cs
- HScrollBar.cs
- Ref.cs
- EventSource.cs
- ClipboardData.cs
- XhtmlBasicPhoneCallAdapter.cs
- sqlinternaltransaction.cs
- SerializerProvider.cs
- SchemaNotation.cs
- NextPreviousPagerField.cs
- NestedContainer.cs
- ListViewItemSelectionChangedEvent.cs
- DbProviderServices.cs
- BuildProviderAppliesToAttribute.cs
- RelationshipDetailsRow.cs
- DelayedRegex.cs
- TabPage.cs
- _AcceptOverlappedAsyncResult.cs
- SqlProviderUtilities.cs
- ElapsedEventArgs.cs
- GroupDescription.cs
- FixedSOMContainer.cs
- StringPropertyBuilder.cs
- ContractTypeNameElement.cs
- Peer.cs
- IpcManager.cs
- XmlName.cs
- VisualTreeHelper.cs
- MultipartContentParser.cs
- CapabilitiesState.cs
- SelectQueryOperator.cs
- JavaScriptSerializer.cs
- InvalidPrinterException.cs
- mediapermission.cs
- BehaviorDragDropEventArgs.cs
- PropertiesTab.cs
- TransformerTypeCollection.cs
- DrawTreeNodeEventArgs.cs
- GotoExpression.cs
- TraceSection.cs
- XamlDesignerSerializationManager.cs
- SortAction.cs
- XmlSubtreeReader.cs
- RegexTypeEditor.cs
- MailSettingsSection.cs
- TagPrefixCollection.cs
- CodeEventReferenceExpression.cs
- Vector3D.cs
- PropertyToken.cs
- ArrayExtension.cs
- FrameworkReadOnlyPropertyMetadata.cs
- Compress.cs
- UnitySerializationHolder.cs
- LayoutEngine.cs
- TogglePattern.cs
- ColorTranslator.cs
- PointUtil.cs
- PeerContact.cs
- FigureHelper.cs
- SoapExtensionReflector.cs
- TypeResolver.cs
- Command.cs
- KeyPullup.cs
- GridViewSelectEventArgs.cs
- DeriveBytes.cs
- fixedPageContentExtractor.cs
- Math.cs
- WebPartMenu.cs
- Matrix3DStack.cs
- AccessControlList.cs
- X509ServiceCertificateAuthenticationElement.cs
- Point.cs
- AuthStoreRoleProvider.cs
- ObservableDictionary.cs
- tooltip.cs
- CodeIndexerExpression.cs
- SoapExtensionTypeElement.cs
- ProfileSection.cs
- RootProjectionNode.cs
- BitSet.cs
- TextServicesHost.cs
- IPHostEntry.cs
- OneOfScalarConst.cs
- TraceLog.cs
- ACL.cs
- UserInitiatedNavigationPermission.cs
- TableRowGroupCollection.cs
- CryptoStream.cs
- GlyphRun.cs