Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- NamespaceList.cs
- ObjectIDGenerator.cs
- DataContractJsonSerializer.cs
- PageWrapper.cs
- Int32AnimationUsingKeyFrames.cs
- TextBox.cs
- DbInsertCommandTree.cs
- TypeReference.cs
- CompositeFontFamily.cs
- ClientSideProviderDescription.cs
- MessagePartSpecification.cs
- EventLogReader.cs
- MetadataArtifactLoaderCompositeResource.cs
- CellConstantDomain.cs
- ZipIOLocalFileHeader.cs
- UsernameTokenFactoryCredential.cs
- InvokeMethod.cs
- DeriveBytes.cs
- IncrementalHitTester.cs
- MergeFilterQuery.cs
- PartManifestEntry.cs
- Image.cs
- CustomAssemblyResolver.cs
- ToolStripHighContrastRenderer.cs
- DataAdapter.cs
- X500Name.cs
- EditingMode.cs
- SmtpFailedRecipientsException.cs
- ManagedFilter.cs
- SqlCacheDependency.cs
- BitmapEffectState.cs
- ExpressionLink.cs
- ObjectKeyFrameCollection.cs
- FreezableDefaultValueFactory.cs
- MemoryFailPoint.cs
- COM2ColorConverter.cs
- NavigationEventArgs.cs
- SelectionItemPattern.cs
- BevelBitmapEffect.cs
- TabletCollection.cs
- assertwrapper.cs
- PropertyGridEditorPart.cs
- Compiler.cs
- TimeSpanConverter.cs
- ISCIIEncoding.cs
- HtmlElementErrorEventArgs.cs
- SiteMapSection.cs
- PersonalizationStateInfoCollection.cs
- SqlSupersetValidator.cs
- PerformanceCounterPermissionAttribute.cs
- Rfc2898DeriveBytes.cs
- httpserverutility.cs
- URLString.cs
- ComponentEditorPage.cs
- Function.cs
- PreDigestedSignedInfo.cs
- DiscoveryRequestHandler.cs
- PrintingPermission.cs
- Viewport3DAutomationPeer.cs
- DynamicActivityProperty.cs
- ConstantCheck.cs
- MessageQueuePermission.cs
- TimeStampChecker.cs
- Rectangle.cs
- XPathMessageFilter.cs
- GetWinFXPath.cs
- XmlSchemaCompilationSettings.cs
- GeneralTransform3DGroup.cs
- SecurityPermission.cs
- XmlSchemas.cs
- CommentEmitter.cs
- CodeDirectoryCompiler.cs
- MailMessageEventArgs.cs
- DataGridViewImageCell.cs
- XmlSchemaParticle.cs
- X509RecipientCertificateServiceElement.cs
- TextParagraphProperties.cs
- HttpRequestBase.cs
- DurableRuntimeValidator.cs
- XPathScanner.cs
- DiagnosticStrings.cs
- WebServiceTypeData.cs
- DllNotFoundException.cs
- X509Utils.cs
- Stream.cs
- ValueHandle.cs
- XmlSchemaInclude.cs
- ContextStaticAttribute.cs
- WCFModelStrings.Designer.cs
- thaishape.cs
- ConfigurationStrings.cs
- ObjectItemCollection.cs
- MsmqInputMessage.cs
- SafeThreadHandle.cs
- DataDocumentXPathNavigator.cs
- DesignerTextBoxAdapter.cs
- XmlUrlResolver.cs
- StreamInfo.cs
- SplineKeyFrames.cs
- WebPartDisplayModeEventArgs.cs