Code:
/ DotNET / DotNET / 8.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
- HyperLinkColumn.cs
- TypeName.cs
- ActiveXContainer.cs
- OneWayChannelFactory.cs
- HttpModuleAction.cs
- ListViewUpdatedEventArgs.cs
- StringResourceManager.cs
- NetDispatcherFaultException.cs
- MouseEvent.cs
- SQLMoneyStorage.cs
- ManageRequest.cs
- COSERVERINFO.cs
- FlowLayoutPanel.cs
- DSASignatureDeformatter.cs
- WebBrowserEvent.cs
- Globals.cs
- MemberCollection.cs
- LocatorBase.cs
- XmlHierarchicalDataSourceView.cs
- XmlSchemaInclude.cs
- PackageProperties.cs
- WebPartConnectionCollection.cs
- safePerfProviderHandle.cs
- FontStyle.cs
- Int32EqualityComparer.cs
- ZipIOLocalFileDataDescriptor.cs
- PageThemeBuildProvider.cs
- HtmlImageAdapter.cs
- ToolboxItemSnapLineBehavior.cs
- Geometry.cs
- FontWeights.cs
- TimeSpanValidator.cs
- BooleanFunctions.cs
- AspNetPartialTrustHelpers.cs
- COM2PictureConverter.cs
- XmlAnyAttributeAttribute.cs
- NotifyCollectionChangedEventArgs.cs
- XamlSerializer.cs
- Stroke2.cs
- Parallel.cs
- Deserializer.cs
- TypeLoadException.cs
- DocumentAutomationPeer.cs
- __Filters.cs
- DataBindingsDialog.cs
- StrokeNodeOperations2.cs
- BitmapPalettes.cs
- SizeConverter.cs
- PointF.cs
- InputScopeManager.cs
- KeyValueConfigurationElement.cs
- DateTimeUtil.cs
- CompilationSection.cs
- ReferencedAssembly.cs
- recordstatefactory.cs
- ServiceHttpModule.cs
- DropTarget.cs
- LinqDataSourceValidationException.cs
- RayHitTestParameters.cs
- TextEditorContextMenu.cs
- RemotingConfiguration.cs
- WebControlsSection.cs
- Enum.cs
- FactoryId.cs
- GC.cs
- SoapUnknownHeader.cs
- AnnotationAuthorChangedEventArgs.cs
- TypeExtensionConverter.cs
- CellLabel.cs
- IconEditor.cs
- ItemsControl.cs
- SimpleFieldTemplateUserControl.cs
- TimelineClockCollection.cs
- ViewSimplifier.cs
- AttributeData.cs
- ToolStripItemCollection.cs
- XmlDataSourceView.cs
- SymbolMethod.cs
- _NestedMultipleAsyncResult.cs
- WorkflowDurableInstance.cs
- User.cs
- CachingHintValidation.cs
- XamlLoadErrorInfo.cs
- DateTimeValueSerializer.cs
- DataServiceExpressionVisitor.cs
- CursorConverter.cs
- OneOfConst.cs
- PopupRoot.cs
- IconHelper.cs
- TextEditorCharacters.cs
- CodeSubDirectoriesCollection.cs
- XPathSelectionIterator.cs
- SqlUDTStorage.cs
- XmlSchemaParticle.cs
- BigInt.cs
- TypeValidationEventArgs.cs
- BaseTemplateParser.cs
- SqlConnectionStringBuilder.cs
- SqlBooleanMismatchVisitor.cs
- _RequestLifetimeSetter.cs