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
- WebPartConnectionsCloseVerb.cs
- BooleanFunctions.cs
- AssertSection.cs
- AsyncPostBackTrigger.cs
- MimeXmlImporter.cs
- RecordManager.cs
- DataSourceXmlSerializer.cs
- SafeMILHandle.cs
- RichTextBox.cs
- CompilerScope.Storage.cs
- XmlAnyElementAttribute.cs
- HandlerMappingMemo.cs
- XmlSchemaAnnotated.cs
- MeasurementDCInfo.cs
- EntityProviderFactory.cs
- SemanticAnalyzer.cs
- FormViewModeEventArgs.cs
- DataServiceContext.cs
- SeekableReadStream.cs
- ServiceThrottle.cs
- Matrix.cs
- StrongNameMembershipCondition.cs
- SmtpReplyReaderFactory.cs
- FrugalList.cs
- RegexFCD.cs
- StackOverflowException.cs
- basenumberconverter.cs
- RealProxy.cs
- PageCatalogPart.cs
- ArgumentValidation.cs
- Hashtable.cs
- SingleObjectCollection.cs
- ResXBuildProvider.cs
- Point3DValueSerializer.cs
- DocComment.cs
- XmlArrayAttribute.cs
- ExpandedWrapper.cs
- EdmItemError.cs
- WebPartDisplayModeEventArgs.cs
- SqlGatherConsumedAliases.cs
- PathStreamGeometryContext.cs
- WebPartDisplayModeCancelEventArgs.cs
- GradientStopCollection.cs
- ControlPager.cs
- DynamicDataResources.Designer.cs
- CustomSignedXml.cs
- XmlQueryCardinality.cs
- DescriptionAttribute.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- BuiltInExpr.cs
- MultiViewDesigner.cs
- OrderingInfo.cs
- WebSysDescriptionAttribute.cs
- BinaryKeyIdentifierClause.cs
- StrokeCollectionConverter.cs
- SoapEnumAttribute.cs
- TextParagraphCache.cs
- FileIOPermission.cs
- MessageProtectionOrder.cs
- ButtonBaseAdapter.cs
- RoamingStoreFileUtility.cs
- FlowchartStart.xaml.cs
- SqlGatherConsumedAliases.cs
- ErrorFormatter.cs
- AssemblyHash.cs
- FileCodeGroup.cs
- Helpers.cs
- HttpClientChannel.cs
- BindableTemplateBuilder.cs
- StandardBindingCollectionElement.cs
- DataPagerCommandEventArgs.cs
- SmtpTransport.cs
- RequestDescription.cs
- Guid.cs
- ObfuscationAttribute.cs
- SafeLibraryHandle.cs
- XPathNavigatorKeyComparer.cs
- XmlSchemaObjectCollection.cs
- SafeHandle.cs
- SamlNameIdentifierClaimResource.cs
- BitmapSourceSafeMILHandle.cs
- KeyManager.cs
- XsltException.cs
- MyContact.cs
- DocumentAutomationPeer.cs
- DCSafeHandle.cs
- ColorInterpolationModeValidation.cs
- QilTernary.cs
- DataGridHeadersVisibilityToVisibilityConverter.cs
- ListViewAutomationPeer.cs
- StreamResourceInfo.cs
- BlockUIContainer.cs
- ConnectionPointCookie.cs
- EntityProxyFactory.cs
- MappingMetadataHelper.cs
- LinkedResourceCollection.cs
- DBSqlParser.cs
- ReceiveActivityValidator.cs
- unitconverter.cs
- FrameworkElement.cs