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
- KeySplineConverter.cs
- ViewUtilities.cs
- WindowsTooltip.cs
- CustomSignedXml.cs
- DelimitedListTraceListener.cs
- FacetChecker.cs
- BufferAllocator.cs
- MLangCodePageEncoding.cs
- XmlCharCheckingWriter.cs
- HealthMonitoringSection.cs
- RectAnimationUsingKeyFrames.cs
- DataRowView.cs
- CustomAttributeBuilder.cs
- DocumentAutomationPeer.cs
- PathNode.cs
- ACE.cs
- ApplicationGesture.cs
- Query.cs
- TreeNode.cs
- TextTreeText.cs
- Figure.cs
- XmlCharCheckingWriter.cs
- SQLBytes.cs
- ArrangedElement.cs
- validation.cs
- HybridDictionary.cs
- DBBindings.cs
- _BufferOffsetSize.cs
- EnumDataContract.cs
- Event.cs
- SerializationSectionGroup.cs
- XMLUtil.cs
- DebugHandleTracker.cs
- SqlDataSourceView.cs
- State.cs
- MethodImplAttribute.cs
- FormViewPagerRow.cs
- ProxyAttribute.cs
- BadImageFormatException.cs
- FilterableAttribute.cs
- HttpTransportElement.cs
- arabicshape.cs
- UserPersonalizationStateInfo.cs
- CreateUserWizardAutoFormat.cs
- SafeEventLogWriteHandle.cs
- activationcontext.cs
- Visual3D.cs
- ListBoxItemWrapperAutomationPeer.cs
- RemotingConfigParser.cs
- RangeBase.cs
- GeneralTransform3DTo2D.cs
- MsmqIntegrationAppDomainProtocolHandler.cs
- PanelStyle.cs
- ReflectionHelper.cs
- WindowsRichEditRange.cs
- XmlnsDictionary.cs
- SchemaContext.cs
- QilParameter.cs
- CheckoutException.cs
- FunctionCommandText.cs
- WSHttpBindingBaseElement.cs
- DbBuffer.cs
- CultureData.cs
- IssuanceLicense.cs
- AnchoredBlock.cs
- HotSpotCollectionEditor.cs
- PointCollection.cs
- MediaCommands.cs
- NestPullup.cs
- diagnosticsswitches.cs
- CollectionsUtil.cs
- DataViewSettingCollection.cs
- BamlRecordHelper.cs
- SpellCheck.cs
- EmbossBitmapEffect.cs
- MessageRpc.cs
- Clock.cs
- InternalBufferOverflowException.cs
- InteropAutomationProvider.cs
- UIElement3DAutomationPeer.cs
- DefaultEvaluationContext.cs
- SequenceFullException.cs
- TriggerActionCollection.cs
- KnownBoxes.cs
- CompilerResults.cs
- DataStorage.cs
- CodeSnippetCompileUnit.cs
- VariableModifiersHelper.cs
- QilLoop.cs
- ObjectDataSourceMethodEventArgs.cs
- BamlVersionHeader.cs
- InputQueueChannelAcceptor.cs
- BStrWrapper.cs
- DirectoryInfo.cs
- BindingSource.cs
- ProxyWebPartConnectionCollection.cs
- TextServicesCompartmentContext.cs
- IndentedTextWriter.cs
- DataMember.cs
- LongTypeConverter.cs