Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / CompMod / System / Runtime / InteropServices / StandardOleMarshalObject.cs / 1305376 / 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; } } } // 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
- KeyValueConfigurationElement.cs
- SQLDecimal.cs
- WindowInteractionStateTracker.cs
- ConfigurationLoader.cs
- LayoutInformation.cs
- Char.cs
- CodeArgumentReferenceExpression.cs
- ColumnReorderedEventArgs.cs
- ThumbButtonInfo.cs
- DeclarativeCatalogPart.cs
- TcpAppDomainProtocolHandler.cs
- DataTableReaderListener.cs
- Membership.cs
- DesignerLoader.cs
- _FixedSizeReader.cs
- SnapLine.cs
- TraceEventCache.cs
- AssemblyCollection.cs
- ZoneMembershipCondition.cs
- UnitySerializationHolder.cs
- TextServicesDisplayAttribute.cs
- SqlFormatter.cs
- DataGridViewLinkColumn.cs
- ObjectReaderCompiler.cs
- OleServicesContext.cs
- OutputCacheSettingsSection.cs
- securitycriticaldataformultiplegetandset.cs
- ComponentEditorPage.cs
- XmlDesigner.cs
- PerfCounters.cs
- Set.cs
- EventArgs.cs
- DetailsViewRow.cs
- base64Transforms.cs
- HandlerBase.cs
- XPathBinder.cs
- Currency.cs
- XmlSchemaNotation.cs
- XhtmlBasicCommandAdapter.cs
- DrawingContextDrawingContextWalker.cs
- BitmapEffectState.cs
- DocumentXmlWriter.cs
- DataGridColumn.cs
- IntersectQueryOperator.cs
- HGlobalSafeHandle.cs
- SecurityManager.cs
- ComplexObject.cs
- SQLMembershipProvider.cs
- DataGridLinkButton.cs
- TextRunCache.cs
- OleDbSchemaGuid.cs
- ReadWriteObjectLock.cs
- WizardSideBarListControlItemEventArgs.cs
- HostingEnvironmentException.cs
- HttpResponseWrapper.cs
- EncodingNLS.cs
- SqlBuilder.cs
- TraceSection.cs
- LineProperties.cs
- Point4DConverter.cs
- AutomationElementCollection.cs
- LinkedList.cs
- XmlSecureResolver.cs
- StateInitialization.cs
- WebServiceHandlerFactory.cs
- SerializationHelper.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- Logging.cs
- TreeNodeConverter.cs
- ScriptReferenceBase.cs
- TextElementCollectionHelper.cs
- AnnotationAuthorChangedEventArgs.cs
- ConfigurationValidatorBase.cs
- Psha1DerivedKeyGenerator.cs
- InfoCardSymmetricAlgorithm.cs
- _NestedMultipleAsyncResult.cs
- MenuRendererStandards.cs
- TraceSection.cs
- CommandSet.cs
- PropertyGridDesigner.cs
- TextStore.cs
- ObjectFullSpanRewriter.cs
- ThreadSafeList.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- Hash.cs
- DependencyPropertyKey.cs
- TextRunCacheImp.cs
- ViewBase.cs
- InkCanvasAutomationPeer.cs
- HwndAppCommandInputProvider.cs
- HitTestParameters3D.cs
- TriggerBase.cs
- ViewBase.cs
- Calendar.cs
- UDPClient.cs
- UshortList2.cs
- _HeaderInfo.cs
- ListenerElementsCollection.cs
- ListViewSortEventArgs.cs
- CompiledQueryCacheKey.cs