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
- SelectionGlyphBase.cs
- HyperLinkDesigner.cs
- Point3DValueSerializer.cs
- KeyValuePair.cs
- DoubleUtil.cs
- Help.cs
- ProcessThread.cs
- FunctionQuery.cs
- Vector3D.cs
- EdmItemCollection.cs
- Size.cs
- AllMembershipCondition.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- NullableFloatAverageAggregationOperator.cs
- BackStopAuthenticationModule.cs
- ServiceNameCollection.cs
- StreamUpdate.cs
- TimeSpan.cs
- DiffuseMaterial.cs
- NameValuePermission.cs
- EncryptedReference.cs
- XmlSchemaProviderAttribute.cs
- EncoderParameter.cs
- SerializationInfoEnumerator.cs
- XmlSchemaInferenceException.cs
- PixelShader.cs
- TypeDescriptionProviderAttribute.cs
- GroupBoxAutomationPeer.cs
- xdrvalidator.cs
- ErrorRuntimeConfig.cs
- GeneralTransformGroup.cs
- SelectingProviderEventArgs.cs
- AutomationElementIdentifiers.cs
- AssemblyUtil.cs
- NotCondition.cs
- PerspectiveCamera.cs
- DependencyPropertyDescriptor.cs
- ToolStripSplitStackLayout.cs
- SupportsEventValidationAttribute.cs
- MailMessageEventArgs.cs
- PolygonHotSpot.cs
- ObjectDisposedException.cs
- HtmlTableRow.cs
- ClientRolePrincipal.cs
- GradientStop.cs
- TimeEnumHelper.cs
- WebPartZoneCollection.cs
- URLString.cs
- GeometryModel3D.cs
- __Error.cs
- AccessControlEntry.cs
- WebControlsSection.cs
- SqlProfileProvider.cs
- CacheMode.cs
- _ListenerAsyncResult.cs
- NamespaceDecl.cs
- CookieHandler.cs
- EntityViewGenerator.cs
- DataRow.cs
- QueryUtil.cs
- NullEntityWrapper.cs
- TCEAdapterGenerator.cs
- AsyncOperationContext.cs
- UnauthorizedAccessException.cs
- UnsafeNativeMethods.cs
- HybridWebProxyFinder.cs
- WpfWebRequestHelper.cs
- PerfCounterSection.cs
- DeriveBytes.cs
- Pen.cs
- TextMarkerSource.cs
- GeneratedCodeAttribute.cs
- TextDecorationCollectionConverter.cs
- ClipboardData.cs
- MetafileHeader.cs
- VariableQuery.cs
- TransformConverter.cs
- NonClientArea.cs
- PrincipalPermission.cs
- PropertyTabAttribute.cs
- NonVisualControlAttribute.cs
- JsonWriter.cs
- SqlMethodCallConverter.cs
- SelectionEditingBehavior.cs
- EncryptedReference.cs
- HttpCapabilitiesSectionHandler.cs
- EnumType.cs
- UrlAuthFailedErrorFormatter.cs
- StringValueConverter.cs
- _HeaderInfoTable.cs
- PipeStream.cs
- AppSettingsReader.cs
- TimelineClockCollection.cs
- ToolStripSplitButton.cs
- Substitution.cs
- EntityWrapper.cs
- StaticExtension.cs
- Scene3D.cs
- ExtensionDataReader.cs
- HandleCollector.cs