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
- EtwTrace.cs
- FrameSecurityDescriptor.cs
- NetworkInformationPermission.cs
- AutomationElementIdentifiers.cs
- ThicknessKeyFrameCollection.cs
- GenericsInstances.cs
- ProfileModule.cs
- WebEventCodes.cs
- AndCondition.cs
- ICspAsymmetricAlgorithm.cs
- ShaderEffect.cs
- TextSpanModifier.cs
- DataGridViewDataConnection.cs
- Stack.cs
- SystemColorTracker.cs
- WaitHandle.cs
- MouseActionConverter.cs
- Processor.cs
- OracleConnectionStringBuilder.cs
- GenericTypeParameterBuilder.cs
- IndicShape.cs
- CryptoApi.cs
- Dump.cs
- InputProviderSite.cs
- XPathMultyIterator.cs
- BezierSegment.cs
- CurrencyWrapper.cs
- securitycriticaldataformultiplegetandset.cs
- BinaryFormatter.cs
- DetailsViewPageEventArgs.cs
- SpoolingTask.cs
- FixedSOMElement.cs
- DirectoryNotFoundException.cs
- DesignerVerb.cs
- DateTime.cs
- ScaleTransform.cs
- EntityObject.cs
- UnaryExpression.cs
- NetMsmqSecurityMode.cs
- NativeRightsManagementAPIsStructures.cs
- ToolStripOverflowButton.cs
- DataBindingCollectionEditor.cs
- ValidationErrorCollection.cs
- HttpCookie.cs
- ResourceManager.cs
- SiteMapNode.cs
- DataListItemCollection.cs
- xdrvalidator.cs
- RegexStringValidatorAttribute.cs
- GlyphRunDrawing.cs
- MachinePropertyVariants.cs
- GetPageNumberCompletedEventArgs.cs
- BinaryWriter.cs
- XPathAncestorIterator.cs
- DbProviderFactories.cs
- ReaderWriterLockWrapper.cs
- UIElement3D.cs
- StringArrayEditor.cs
- RefreshPropertiesAttribute.cs
- ServiceOperationListItem.cs
- XmlParser.cs
- DebugInfoGenerator.cs
- RedBlackList.cs
- Mapping.cs
- PieceNameHelper.cs
- ReadWriteSpinLock.cs
- ComplexObject.cs
- CompositeActivityTypeDescriptorProvider.cs
- AuthenticateEventArgs.cs
- EntityClassGenerator.cs
- PageThemeBuildProvider.cs
- RuntimeTrackingProfile.cs
- DbConnectionHelper.cs
- Rijndael.cs
- StatusBar.cs
- WindowsSlider.cs
- Quaternion.cs
- PreviewPageInfo.cs
- EndPoint.cs
- CustomCredentialPolicy.cs
- Int32Animation.cs
- MethodCallExpression.cs
- Rfc2898DeriveBytes.cs
- WsdlParser.cs
- ButtonFlatAdapter.cs
- ExtensionQuery.cs
- StatusBarDrawItemEvent.cs
- ContainerFilterService.cs
- XsdBuilder.cs
- ResourceIDHelper.cs
- Unit.cs
- XmlToDatasetMap.cs
- ToolStripSplitButton.cs
- FormViewDeleteEventArgs.cs
- BinaryFormatterWriter.cs
- TextEffect.cs
- ComplexTypeEmitter.cs
- EarlyBoundInfo.cs
- MouseActionValueSerializer.cs
- _FtpControlStream.cs