Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / CompMod / System / Runtime / InteropServices / StandardOleMarshalObject.cs / 2 / StandardOleMarshalObject.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Runtime.InteropServices { using System.Diagnostics; using System; using Microsoft.Win32; using System.Security; using System.Security.Permissions; ////// /// /// Replaces the standard CLR free-threaded marshaler with the standard OLE STA one. This prevents the calls made into /// our hosting object by OLE from coming in on threads other than the UI thread. /// /// [ComVisible(true)] [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Interoperability", "CA1403:AutoLayoutTypesShouldNotBeComVisible")] public class StandardOleMarshalObject : MarshalByRefObject, UnsafeNativeMethods.IMarshal { protected StandardOleMarshalObject() { } [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand, Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)] private IntPtr GetStdMarshaller(ref Guid riid, int dwDestContext, int mshlflags) { IntPtr pStdMarshal = IntPtr.Zero; IntPtr pUnk = Marshal.GetIUnknownForObject(this); if (pUnk != IntPtr.Zero) { try { if (NativeMethods.S_OK == UnsafeNativeMethods.CoGetStandardMarshal(ref riid, pUnk, dwDestContext, IntPtr.Zero, mshlflags, out pStdMarshal)) { Debug.Assert(pStdMarshal != null, "Failed to get marshaller for interface '" + riid.ToString() + "', CoGetStandardMarshal returned S_OK"); return pStdMarshal; } } finally { Marshal.Release(pUnk); } } throw new InvalidOperationException(SR.GetString(SR.StandardOleMarshalObjectGetMarshalerFailed, riid.ToString())); } ////// [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand, Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)] int UnsafeNativeMethods.IMarshal.GetUnmarshalClass(ref Guid riid, IntPtr pv, int dwDestContext, IntPtr pvDestContext, int mshlflags, out Guid pCid){ pCid = typeof(UnsafeNativeMethods.IStdMarshal).GUID; return NativeMethods.S_OK; } /// /// [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand, Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)] int UnsafeNativeMethods.IMarshal.GetMarshalSizeMax(ref Guid riid, IntPtr pv, int dwDestContext, IntPtr pvDestContext, int mshlflags, out int pSize) { // 98830 - GUID marshaling in StandardOleMarshalObject AVs on 64-bit Guid riid_copy = riid; IntPtr pStandardMarshal = GetStdMarshaller(ref riid_copy, dwDestContext, mshlflags); try { return UnsafeNativeMethods.CoGetMarshalSizeMax(out pSize, ref riid_copy, pStandardMarshal, dwDestContext, pvDestContext, mshlflags); } finally { Marshal.Release(pStandardMarshal); } } /// /// [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand, Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)] int UnsafeNativeMethods.IMarshal.MarshalInterface(object pStm, ref Guid riid, IntPtr pv, int dwDestContext, IntPtr pvDestContext, int mshlflags) { IntPtr pStandardMarshal = GetStdMarshaller(ref riid, dwDestContext, mshlflags); try { return UnsafeNativeMethods.CoMarshalInterface(pStm, ref riid, pStandardMarshal, dwDestContext, pvDestContext, mshlflags); } finally { Marshal.Release(pStandardMarshal); if (pStm != null) { Marshal.ReleaseComObject(pStm); } } } /// /// [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand, Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)] int UnsafeNativeMethods.IMarshal.UnmarshalInterface(object pStm, ref Guid riid, out IntPtr ppv) { // this should never be called on this interface, but on the standard one handed back by the previous calls. Debug.Fail("IMarshal::UnmarshalInterface should not be called."); ppv = IntPtr.Zero; if (pStm != null) { Marshal.ReleaseComObject(pStm); } return NativeMethods.E_NOTIMPL; } /// /// [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand, Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)] int UnsafeNativeMethods.IMarshal.ReleaseMarshalData(object pStm) { // this should never be called on this interface, but on the standard one handed back by the previous calls. Debug.Fail("IMarshal::ReleaseMarshalData should not be called."); if (pStm != null) { Marshal.ReleaseComObject(pStm); } return NativeMethods.E_NOTIMPL; } /// /// [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand, Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)] int UnsafeNativeMethods.IMarshal.DisconnectObject(int dwReserved) { // this should never be called on this interface, but on the standard one handed back by the previous calls. Debug.Fail("IMarshal::DisconnectObject should not be called."); return NativeMethods.E_NOTIMPL; } } }
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- UnsupportedPolicyOptionsException.cs
- DataGridViewUtilities.cs
- HttpProcessUtility.cs
- LayoutTable.cs
- PrePrepareMethodAttribute.cs
- PolyQuadraticBezierSegment.cs
- Dump.cs
- BitmapEffectGeneralTransform.cs
- RedirectionProxy.cs
- SqlProviderServices.cs
- OverlappedAsyncResult.cs
- CustomAttributeBuilder.cs
- System.Data.OracleClient_BID.cs
- Identity.cs
- TriggerAction.cs
- SQLResource.cs
- RoutedEventConverter.cs
- TextTreeText.cs
- ConsoleKeyInfo.cs
- ControlIdConverter.cs
- XmlAttributeProperties.cs
- PerformanceCountersElement.cs
- OutputCacheSection.cs
- ChainedAsyncResult.cs
- LineServicesCallbacks.cs
- BamlVersionHeader.cs
- CheckedPointers.cs
- PageWrapper.cs
- FixedPageAutomationPeer.cs
- ToolStripItemCollection.cs
- altserialization.cs
- KnownBoxes.cs
- Polyline.cs
- DataGridState.cs
- GenericTransactionFlowAttribute.cs
- ResourceExpressionBuilder.cs
- TextShapeableCharacters.cs
- PointKeyFrameCollection.cs
- ReflectionHelper.cs
- BindingManagerDataErrorEventArgs.cs
- RuntimeConfigurationRecord.cs
- XmlNamespaceMapping.cs
- PropertyPushdownHelper.cs
- ObjectPersistData.cs
- LogicalExpr.cs
- ScriptServiceAttribute.cs
- DynamicControl.cs
- SessionEndingEventArgs.cs
- IsolatedStorageFilePermission.cs
- TypeConverterAttribute.cs
- SHA512Cng.cs
- GradientStop.cs
- SystemEvents.cs
- EntityAdapter.cs
- XmlComment.cs
- MSAAEventDispatcher.cs
- ResourceCategoryAttribute.cs
- recordstatescratchpad.cs
- SafeArrayTypeMismatchException.cs
- IOThreadScheduler.cs
- MultiByteCodec.cs
- WebReference.cs
- VectorAnimationBase.cs
- StringHelper.cs
- Timer.cs
- ApplicationException.cs
- TextSelection.cs
- ExpressionBinding.cs
- IssuanceTokenProviderBase.cs
- AppDomainAttributes.cs
- CodeConditionStatement.cs
- StringBlob.cs
- AnnotationElement.cs
- AddInControllerImpl.cs
- NavigateEvent.cs
- ImageInfo.cs
- BitmapEffectGroup.cs
- SetterBase.cs
- CommandEventArgs.cs
- EntityDataSourceQueryBuilder.cs
- RotateTransform3D.cs
- SchemaType.cs
- ApplicationActivator.cs
- TrackingStringDictionary.cs
- AppLevelCompilationSectionCache.cs
- DebugView.cs
- EventData.cs
- DiagnosticsConfiguration.cs
- DoubleKeyFrameCollection.cs
- ProjectedWrapper.cs
- WindowsUserNameSecurityTokenAuthenticator.cs
- WinFormsUtils.cs
- WorkBatch.cs
- CollectionBuilder.cs
- ThreadStateException.cs
- DNS.cs
- EmptyImpersonationContext.cs
- Guid.cs
- Camera.cs
- TransactionChannelListener.cs