Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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.
//
// [....]
// [....]
//-----------------------------------------------------------------------------
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
- IdentifierCreationService.cs
- WebBrowser.cs
- CodeTypeDelegate.cs
- HMAC.cs
- MarshalByValueComponent.cs
- BinarySerializer.cs
- DesignerCategoryAttribute.cs
- BlobPersonalizationState.cs
- HtmlAnchor.cs
- BitmapEffect.cs
- grammarelement.cs
- CalendarDay.cs
- AccessedThroughPropertyAttribute.cs
- URLIdentityPermission.cs
- Base64Encoder.cs
- StringValidator.cs
- Italic.cs
- Inline.cs
- StrokeCollectionDefaultValueFactory.cs
- SubordinateTransaction.cs
- EntityContainerEntitySet.cs
- TrackingLocationCollection.cs
- NullableFloatMinMaxAggregationOperator.cs
- Underline.cs
- SHA384Managed.cs
- DoubleCollectionConverter.cs
- PerformanceCounterPermission.cs
- OpenTypeLayout.cs
- CultureData.cs
- PropertyCollection.cs
- ImageMap.cs
- OleDbError.cs
- StorageAssociationTypeMapping.cs
- ContextBase.cs
- WindowPattern.cs
- SqlBuilder.cs
- InputScopeAttribute.cs
- DataGridViewRowConverter.cs
- DefaultAsyncDataDispatcher.cs
- SqlConnectionHelper.cs
- DataGridViewElement.cs
- WebCategoryAttribute.cs
- SHA512.cs
- ListViewTableCell.cs
- SystemEvents.cs
- Operator.cs
- WebException.cs
- InvalidOperationException.cs
- QueryCacheEntry.cs
- AssemblyBuilder.cs
- ColorTransformHelper.cs
- ButtonAutomationPeer.cs
- NumberAction.cs
- PresentationSource.cs
- XmlSchemaFacet.cs
- GenericAuthenticationEventArgs.cs
- TypefaceMap.cs
- SrgsDocumentParser.cs
- HashCodeCombiner.cs
- DeclarativeConditionsCollection.cs
- storepermission.cs
- BrowserInteropHelper.cs
- CriticalFinalizerObject.cs
- TextEditorSelection.cs
- Vector3DCollectionValueSerializer.cs
- x509utils.cs
- MemoryFailPoint.cs
- ResumeStoryboard.cs
- ClientRolePrincipal.cs
- Equal.cs
- CssClassPropertyAttribute.cs
- DataGridViewElement.cs
- TextEditorCharacters.cs
- ControlBuilderAttribute.cs
- XmlDataSourceNodeDescriptor.cs
- CatalogPart.cs
- SessionStateContainer.cs
- ToolStripRenderEventArgs.cs
- RegexGroup.cs
- RequestCacheEntry.cs
- UnsafeNativeMethods.cs
- InstanceHandle.cs
- SoapIncludeAttribute.cs
- CqlWriter.cs
- TrackingDataItem.cs
- TemplateControl.cs
- OpenTypeCommon.cs
- OutputScopeManager.cs
- EntityTypeEmitter.cs
- webeventbuffer.cs
- ReflectionUtil.cs
- FormViewDeleteEventArgs.cs
- EnumValAlphaComparer.cs
- CategoryAttribute.cs
- WsdlExporter.cs
- WebContext.cs
- StrongTypingException.cs
- Permission.cs
- MultiByteCodec.cs
- FixedSOMTableRow.cs