Code:
/ FX-1434 / FX-1434 / 1.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
- RecognizedWordUnit.cs
- ProtocolElement.cs
- ControlCodeDomSerializer.cs
- DataGridColumnHeadersPresenterAutomationPeer.cs
- TaskExceptionHolder.cs
- ReflectionHelper.cs
- KeySplineConverter.cs
- WorkflowNamespace.cs
- XmlSchemaImport.cs
- ProviderBase.cs
- UnsafeNativeMethods.cs
- WebBrowserSiteBase.cs
- WindowsClaimSet.cs
- QueryCreatedEventArgs.cs
- Emitter.cs
- NullableConverter.cs
- AbstractExpressions.cs
- FileDialogCustomPlacesCollection.cs
- FilterElement.cs
- Decoder.cs
- WasHttpModulesInstallComponent.cs
- PrintDialog.cs
- Int16AnimationBase.cs
- Attribute.cs
- PageSetupDialog.cs
- FtpWebRequest.cs
- ConnectivityStatus.cs
- CodeAccessSecurityEngine.cs
- Comparer.cs
- TextDecorationCollection.cs
- IPHostEntry.cs
- AuthenticationConfig.cs
- PrinterResolution.cs
- TextSelectionProcessor.cs
- Compiler.cs
- StringOutput.cs
- SystemIcmpV6Statistics.cs
- IResourceProvider.cs
- ConstraintCollection.cs
- RawStylusSystemGestureInputReport.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- Int32Collection.cs
- JsonDeserializer.cs
- DateTimeSerializationSection.cs
- StylusEventArgs.cs
- WindowsScrollBar.cs
- WebPartTransformerCollection.cs
- AbstractDataSvcMapFileLoader.cs
- SafeLocalMemHandle.cs
- RawStylusSystemGestureInputReport.cs
- embossbitmapeffect.cs
- IgnoreFileBuildProvider.cs
- MemberMaps.cs
- ItemsPanelTemplate.cs
- SchemaImporterExtension.cs
- DataAdapter.cs
- ProbeRequestResponseAsyncResult.cs
- BamlRecordReader.cs
- Marshal.cs
- DeclarativeCatalogPart.cs
- RangeEnumerable.cs
- PropertyCondition.cs
- ResourcesBuildProvider.cs
- DataObjectFieldAttribute.cs
- AuthenticationModuleElement.cs
- DataKey.cs
- QueryContinueDragEventArgs.cs
- DPTypeDescriptorContext.cs
- ChtmlCommandAdapter.cs
- AlternationConverter.cs
- WebRequestModuleElementCollection.cs
- OuterGlowBitmapEffect.cs
- TextSearch.cs
- DocumentSchemaValidator.cs
- WebSysDisplayNameAttribute.cs
- BindingOperations.cs
- HtmlHead.cs
- EdmItemCollection.cs
- Tokenizer.cs
- ConnectionProviderAttribute.cs
- NetworkInformationPermission.cs
- PageTheme.cs
- DashStyle.cs
- DataRowExtensions.cs
- RuleSettings.cs
- GrowingArray.cs
- Rect3DValueSerializer.cs
- EdmProviderManifest.cs
- SortKey.cs
- EntityViewContainer.cs
- ContentPropertyAttribute.cs
- HTTPNotFoundHandler.cs
- TextTreeUndo.cs
- BinaryNode.cs
- QueryStatement.cs
- RegexGroupCollection.cs
- BlockUIContainer.cs
- Control.cs
- LinqDataSourceEditData.cs
- UpdatePanel.cs