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
- ConfigurationException.cs
- ServiceProviders.cs
- SchemaImporter.cs
- ColorConverter.cs
- SigningProgress.cs
- GeneralTransform2DTo3DTo2D.cs
- UnsignedPublishLicense.cs
- ViewKeyConstraint.cs
- PropertyGridDesigner.cs
- XmlSchemaGroupRef.cs
- WorkItem.cs
- WebPartVerb.cs
- TreeNodeEventArgs.cs
- Hash.cs
- ActiveXHelper.cs
- SqlProfileProvider.cs
- WinEventTracker.cs
- AdCreatedEventArgs.cs
- LogicalTreeHelper.cs
- TableItemPattern.cs
- WorkflowApplicationIdleEventArgs.cs
- SecurityContextSecurityToken.cs
- InkPresenterAutomationPeer.cs
- XmlMapping.cs
- CTreeGenerator.cs
- HelpOperationInvoker.cs
- SqlFunctionAttribute.cs
- Win32Interop.cs
- BoolExpression.cs
- DBCSCodePageEncoding.cs
- LostFocusEventManager.cs
- TextRunTypographyProperties.cs
- TakeOrSkipWhileQueryOperator.cs
- WorkBatch.cs
- Options.cs
- MenuItem.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- ACE.cs
- PolicyFactory.cs
- DocumentGridContextMenu.cs
- TreeNodeCollection.cs
- NTAccount.cs
- GCHandleCookieTable.cs
- StylusPoint.cs
- RecognizerStateChangedEventArgs.cs
- ContentValidator.cs
- StringBuilder.cs
- PackageFilter.cs
- SettingsContext.cs
- Variable.cs
- EdmScalarPropertyAttribute.cs
- CorruptStoreException.cs
- SymbolPair.cs
- ToolBarButton.cs
- ClassValidator.cs
- ConversionContext.cs
- SqlConnectionPoolGroupProviderInfo.cs
- PropertyTab.cs
- FloaterParaClient.cs
- SoapHeaderException.cs
- SignatureDescription.cs
- ContextMenu.cs
- ReferencedAssembly.cs
- LinkLabel.cs
- TrustManager.cs
- HotSpot.cs
- SetIndexBinder.cs
- SortableBindingList.cs
- WebPartConnectionsEventArgs.cs
- URI.cs
- InputMethodStateTypeInfo.cs
- StylusPointPropertyInfo.cs
- HttpConfigurationContext.cs
- ToolStripProgressBar.cs
- COAUTHINFO.cs
- LineSegment.cs
- Simplifier.cs
- TracingConnectionListener.cs
- StorageComplexTypeMapping.cs
- XamlStyleSerializer.cs
- HoistedLocals.cs
- DataContractSerializerSection.cs
- EdmToObjectNamespaceMap.cs
- ConnectionManagementSection.cs
- CheckedListBox.cs
- RangeBase.cs
- ParallelEnumerableWrapper.cs
- SectionInput.cs
- EasingKeyFrames.cs
- DBSchemaRow.cs
- SwitchExpression.cs
- XmlSchemaValidator.cs
- CqlWriter.cs
- SmiContextFactory.cs
- WebEventTraceProvider.cs
- RijndaelManaged.cs
- CompensationTokenData.cs
- ProbeDuplexAsyncResult.cs
- FactoryGenerator.cs
- FragmentNavigationEventArgs.cs