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
- PageContentAsyncResult.cs
- QueryCacheManager.cs
- Config.cs
- MessagePropertyVariants.cs
- EntityContainerAssociationSet.cs
- SoapTypeAttribute.cs
- Clause.cs
- BamlStream.cs
- AudioFormatConverter.cs
- SingleAnimationBase.cs
- DataGridParentRows.cs
- ByteAnimationUsingKeyFrames.cs
- ScriptModule.cs
- DTCTransactionManager.cs
- KeyNotFoundException.cs
- Enum.cs
- Timeline.cs
- AspNetSynchronizationContext.cs
- ToolStripSeparatorRenderEventArgs.cs
- ProfileParameter.cs
- EdmPropertyAttribute.cs
- WebInvokeAttribute.cs
- TemplateBindingExpression.cs
- ServiceNameCollection.cs
- UpDownBaseDesigner.cs
- TableRowCollection.cs
- AttributedMetaModel.cs
- HandoffBehavior.cs
- HitTestParameters3D.cs
- NativeMethods.cs
- PersistenceTypeAttribute.cs
- TableItemStyle.cs
- UpdatePanel.cs
- ValidatorCollection.cs
- MaterialGroup.cs
- TextBoxAutomationPeer.cs
- ObjectParameterCollection.cs
- GridViewCellAutomationPeer.cs
- TraceListener.cs
- XmlElementList.cs
- NTAccount.cs
- DnsPermission.cs
- Base64Decoder.cs
- AncestorChangedEventArgs.cs
- SqlParameterizer.cs
- GPPOINT.cs
- DependencyObject.cs
- InternalResources.cs
- WindowsClaimSet.cs
- ConditionBrowserDialog.cs
- IIS7UserPrincipal.cs
- CatalogZoneBase.cs
- CodeDefaultValueExpression.cs
- UriTemplateClientFormatter.cs
- WebPartPersonalization.cs
- WmlLinkAdapter.cs
- DelegatingTypeDescriptionProvider.cs
- ConditionalBranch.cs
- ReflectionPermission.cs
- CLSCompliantAttribute.cs
- ServiceModelStringsVersion1.cs
- PageSetupDialog.cs
- StringFreezingAttribute.cs
- PropertyInfoSet.cs
- ModelVisual3D.cs
- InternalPermissions.cs
- ChannelSinkStacks.cs
- SynchronizationContext.cs
- ArrayWithOffset.cs
- SystemIcons.cs
- DispatcherEventArgs.cs
- CompareInfo.cs
- Bitmap.cs
- AutomationIdentifierGuids.cs
- ResolveCriteriaCD1.cs
- ScrollBar.cs
- NotifyParentPropertyAttribute.cs
- RemoteWebConfigurationHost.cs
- ProviderCollection.cs
- RawStylusInputReport.cs
- TranslateTransform.cs
- XmlSchemaProviderAttribute.cs
- StylusPointPropertyId.cs
- TableRow.cs
- Int64AnimationUsingKeyFrames.cs
- CodeAccessPermission.cs
- DataGridCellsPresenter.cs
- PageClientProxyGenerator.cs
- BaseValidator.cs
- NotifyParentPropertyAttribute.cs
- DataGridViewBindingCompleteEventArgs.cs
- ActivitySurrogate.cs
- QuotedPrintableStream.cs
- MetadataImporterQuotas.cs
- CodeMemberField.cs
- DeleteHelper.cs
- ServiceElementCollection.cs
- ApplicationInfo.cs
- PersonalizationState.cs
- OciLobLocator.cs