Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Data / System / Data / ProviderBase / WrappedIUnknown.cs / 1305376 / 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
- PreProcessor.cs
- PropertySet.cs
- ColorConvertedBitmap.cs
- IntSecurity.cs
- JoinSymbol.cs
- TemplatePartAttribute.cs
- AttachedAnnotationChangedEventArgs.cs
- GridLength.cs
- SuppressMessageAttribute.cs
- ModelProperty.cs
- ADRole.cs
- QilStrConcat.cs
- ProjectionNode.cs
- ViewLoader.cs
- MD5Cng.cs
- PersistChildrenAttribute.cs
- CommunicationException.cs
- GetWinFXPath.cs
- NativeMethods.cs
- EntityDataSourceEntityTypeFilterItem.cs
- ApplicationHost.cs
- LongTypeConverter.cs
- TypeUtil.cs
- CookielessHelper.cs
- ProfilePropertySettings.cs
- XmlSignatureProperties.cs
- ValueConversionAttribute.cs
- AppDomainShutdownMonitor.cs
- Dictionary.cs
- SqlLiftIndependentRowExpressions.cs
- ScriptBehaviorDescriptor.cs
- InvokePatternIdentifiers.cs
- UnicastIPAddressInformationCollection.cs
- XmlSerializableServices.cs
- Block.cs
- AttachedPropertyMethodSelector.cs
- ClientTargetSection.cs
- MessageQueueAccessControlEntry.cs
- InputMethodStateTypeInfo.cs
- AdRotator.cs
- MenuItemStyle.cs
- DataGridViewComboBoxCell.cs
- Suspend.cs
- XamlStream.cs
- EndpointDiscoveryMetadata.cs
- WhitespaceSignificantCollectionAttribute.cs
- ExternalException.cs
- TimeEnumHelper.cs
- CodePropertyReferenceExpression.cs
- IPAddress.cs
- mediaeventshelper.cs
- EventQueueState.cs
- BamlBinaryWriter.cs
- ResetableIterator.cs
- RawStylusInput.cs
- DataRelationPropertyDescriptor.cs
- WorkflowRuntime.cs
- WebContext.cs
- ValueTypeFixupInfo.cs
- SizeChangedInfo.cs
- WebSysDescriptionAttribute.cs
- FontDialog.cs
- HttpCookieCollection.cs
- ConsoleEntryPoint.cs
- ZipArchive.cs
- EmptyEnumerable.cs
- XmlSchemaExporter.cs
- CompilationRelaxations.cs
- HwndStylusInputProvider.cs
- HtmlSelect.cs
- __Error.cs
- ExtensionFile.cs
- WebConfigurationHost.cs
- EntityViewGenerationConstants.cs
- BlurBitmapEffect.cs
- MetadataElement.cs
- DataServiceConfiguration.cs
- FontCollection.cs
- PropertyEntry.cs
- SubMenuStyle.cs
- Track.cs
- FileStream.cs
- ArrangedElement.cs
- GroupItem.cs
- XmlArrayItemAttribute.cs
- EntityUtil.cs
- CommonProperties.cs
- GB18030Encoding.cs
- DirectoryObjectSecurity.cs
- EditorPartChrome.cs
- Error.cs
- XD.cs
- DataGridViewCellConverter.cs
- AssemblyResourceLoader.cs
- EncoderBestFitFallback.cs
- CodeTypeMemberCollection.cs
- XPathScanner.cs
- TreeViewAutomationPeer.cs
- XmlFileEditor.cs
- RSACryptoServiceProvider.cs