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
- UrlPath.cs
- FontDialog.cs
- SecurityTokenReferenceStyle.cs
- SemanticKeyElement.cs
- ZipFileInfoCollection.cs
- CodeRemoveEventStatement.cs
- SqlFactory.cs
- GregorianCalendar.cs
- InternalConfigRoot.cs
- ContentPresenter.cs
- SspiNegotiationTokenProvider.cs
- CommonGetThemePartSize.cs
- FormatterConverter.cs
- PropertySourceInfo.cs
- WbmpConverter.cs
- _SecureChannel.cs
- CollectionViewGroupInternal.cs
- IgnoreFileBuildProvider.cs
- SqlXml.cs
- BitmapEncoder.cs
- CompositeKey.cs
- EncryptedType.cs
- FtpCachePolicyElement.cs
- IsolatedStorageFile.cs
- StreamWriter.cs
- IisTraceWebEventProvider.cs
- CompilerGeneratedAttribute.cs
- SamlAttributeStatement.cs
- ProbeMatchesMessage11.cs
- Switch.cs
- Base64Decoder.cs
- FieldMetadata.cs
- counter.cs
- WebPartConnectionsConfigureVerb.cs
- Transform.cs
- ThicknessConverter.cs
- TypeListConverter.cs
- SqlParameterizer.cs
- ExpressionDumper.cs
- BitmapEffectDrawing.cs
- DataGridViewRowsAddedEventArgs.cs
- LinkUtilities.cs
- AffineTransform3D.cs
- MsmqTransportSecurityElement.cs
- PropertyFilter.cs
- UIElementHelper.cs
- PersistenceTypeAttribute.cs
- RemotingConfigParser.cs
- RowUpdatingEventArgs.cs
- MetadataItem.cs
- RNGCryptoServiceProvider.cs
- ValidationErrorCollection.cs
- OpacityConverter.cs
- RtfNavigator.cs
- StatusBarItem.cs
- UnknownWrapper.cs
- TextCompositionManager.cs
- KeyInstance.cs
- CodePageEncoding.cs
- InternalResources.cs
- SoapIgnoreAttribute.cs
- PropertyEmitterBase.cs
- XamlFilter.cs
- CleanUpVirtualizedItemEventArgs.cs
- SignedInfo.cs
- ExpandCollapseProviderWrapper.cs
- Byte.cs
- URLString.cs
- HandlerFactoryWrapper.cs
- SeekStoryboard.cs
- Psha1DerivedKeyGenerator.cs
- GetMemberBinder.cs
- Rotation3DAnimationBase.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- RemotingConfigParser.cs
- GeneralTransform.cs
- login.cs
- EncoderExceptionFallback.cs
- CharacterMetricsDictionary.cs
- ToolBarDesigner.cs
- TemplateColumn.cs
- UTF32Encoding.cs
- WindowsGraphicsWrapper.cs
- ParsedAttributeCollection.cs
- InterleavedZipPartStream.cs
- DesignerUtils.cs
- SQLInt16.cs
- ToolBarOverflowPanel.cs
- TextPenaltyModule.cs
- PasswordTextNavigator.cs
- SQLInt32Storage.cs
- ToolBar.cs
- WindowsSecurityToken.cs
- ComboBoxItem.cs
- WebPartDescription.cs
- DataRowCollection.cs
- StoreAnnotationsMap.cs
- FileStream.cs
- TypeDescriptionProviderAttribute.cs
- PhysicalOps.cs