Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- XmlDataLoader.cs
- MetafileEditor.cs
- OleDbStruct.cs
- XmlNamespaceMappingCollection.cs
- StringInfo.cs
- URLMembershipCondition.cs
- GACIdentityPermission.cs
- RuntimeArgumentHandle.cs
- base64Transforms.cs
- MemberDomainMap.cs
- FacetValues.cs
- DataControlImageButton.cs
- CodeTypeParameter.cs
- WebPartUtil.cs
- ErrorEventArgs.cs
- RealizationContext.cs
- CodePageUtils.cs
- PerformanceCountersElement.cs
- SqlConnectionHelper.cs
- FileAuthorizationModule.cs
- ContainerControl.cs
- FileDialog.cs
- TextContainerChangeEventArgs.cs
- SizeAnimationUsingKeyFrames.cs
- ListItemCollection.cs
- TypedElement.cs
- FilterableAttribute.cs
- Random.cs
- SqlUtils.cs
- ConfigXmlComment.cs
- Clipboard.cs
- LogLogRecordEnumerator.cs
- XPathBinder.cs
- AttributeTableBuilder.cs
- ObjectAnimationBase.cs
- WebPartChrome.cs
- SevenBitStream.cs
- CultureInfoConverter.cs
- Figure.cs
- HorizontalAlignConverter.cs
- SizeConverter.cs
- SqlDataSourceView.cs
- ReadWriteSpinLock.cs
- ModelMemberCollection.cs
- GB18030Encoding.cs
- SiteMapHierarchicalDataSourceView.cs
- WmlControlAdapter.cs
- Matrix.cs
- AnnotationComponentManager.cs
- dataobject.cs
- NativeActivityFaultContext.cs
- AttributeEmitter.cs
- MaterialGroup.cs
- MultipartContentParser.cs
- XmlSchemaSimpleContent.cs
- RegionIterator.cs
- EntityDataSourceEntitySetNameItem.cs
- filewebrequest.cs
- UInt32.cs
- CodeTypeDeclarationCollection.cs
- RequestCacheValidator.cs
- PropertyGeneratedEventArgs.cs
- ImmutableObjectAttribute.cs
- StrongNameUtility.cs
- NullableLongMinMaxAggregationOperator.cs
- EntityDataSourceWizardForm.cs
- CodeMethodReturnStatement.cs
- DynamicPropertyReader.cs
- TimeoutHelper.cs
- OdbcConnectionHandle.cs
- CodeConstructor.cs
- ReachSerializableProperties.cs
- DataGridColumnReorderingEventArgs.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- ListBoxItemWrapperAutomationPeer.cs
- Trigger.cs
- Serializer.cs
- Translator.cs
- FtpWebRequest.cs
- WebPartUserCapability.cs
- AnnotationResource.cs
- StdValidatorsAndConverters.cs
- BuildManagerHost.cs
- BuildDependencySet.cs
- ReachDocumentReferenceCollectionSerializerAsync.cs
- UITypeEditor.cs
- WinEventTracker.cs
- SqlAggregateChecker.cs
- IFormattable.cs
- BaseResourcesBuildProvider.cs
- DivideByZeroException.cs
- SizeChangedInfo.cs
- BulletDecorator.cs
- CodeGroup.cs
- safemediahandle.cs
- FrameSecurityDescriptor.cs
- TypeContext.cs
- XPathPatternParser.cs
- WhiteSpaceTrimStringConverter.cs
- Ray3DHitTestResult.cs