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
- ScrollItemProviderWrapper.cs
- XmlAttributeCollection.cs
- HierarchicalDataBoundControl.cs
- SourceFileBuildProvider.cs
- MailWebEventProvider.cs
- Vars.cs
- DataGridViewTextBoxEditingControl.cs
- HotSpotCollection.cs
- OdbcConnection.cs
- PropertyValueChangedEvent.cs
- initElementDictionary.cs
- InvokeProviderWrapper.cs
- ConfigurationCollectionAttribute.cs
- DataRecord.cs
- OracleBinary.cs
- NavigationExpr.cs
- XmlSchemaException.cs
- ConnectionsZone.cs
- PenContext.cs
- SimpleWebHandlerParser.cs
- NameSpaceExtractor.cs
- SafeNativeMethodsCLR.cs
- GlobalProxySelection.cs
- UseLicense.cs
- TypefaceMetricsCache.cs
- RegexBoyerMoore.cs
- CollectionBuilder.cs
- MsmqIntegrationProcessProtocolHandler.cs
- LogSwitch.cs
- ListControlBoundActionList.cs
- COM2Properties.cs
- WindowsTab.cs
- TreeNodeBindingCollection.cs
- GridViewColumnHeaderAutomationPeer.cs
- SmtpClient.cs
- DefaultObjectMappingItemCollection.cs
- FocusWithinProperty.cs
- ElementHost.cs
- TypeBuilderInstantiation.cs
- RankException.cs
- ExecutionEngineException.cs
- SqlCharStream.cs
- IndexedEnumerable.cs
- Comparer.cs
- SystemBrushes.cs
- SingleObjectCollection.cs
- FileEnumerator.cs
- InstalledFontCollection.cs
- ViewKeyConstraint.cs
- DocumentOrderQuery.cs
- HtmlInputImage.cs
- Main.cs
- IPEndPoint.cs
- ConsumerConnectionPointCollection.cs
- ClientSideQueueItem.cs
- TemplateBuilder.cs
- ImageInfo.cs
- ApplicationInfo.cs
- TdsParserSessionPool.cs
- CqlParserHelpers.cs
- TreeNodeSelectionProcessor.cs
- ScriptRegistrationManager.cs
- DataServiceRequestException.cs
- Visual3D.cs
- DebugHandleTracker.cs
- ArglessEventHandlerProxy.cs
- AttributeUsageAttribute.cs
- ErasingStroke.cs
- RuntimeWrappedException.cs
- WindowsToolbarItemAsMenuItem.cs
- loginstatus.cs
- ContentPresenter.cs
- DataKeyPropertyAttribute.cs
- HtmlShimManager.cs
- InputScopeConverter.cs
- DashStyles.cs
- CharacterMetricsDictionary.cs
- SecurityTokenParameters.cs
- TreeNodeBindingCollection.cs
- BrowserCapabilitiesFactory.cs
- OlePropertyStructs.cs
- Condition.cs
- Scene3D.cs
- VirtualDirectoryMappingCollection.cs
- XmlCharCheckingWriter.cs
- GeneralTransform3D.cs
- RoleManagerModule.cs
- AddDataControlFieldDialog.cs
- SqlAggregateChecker.cs
- PropertyGrid.cs
- CustomAssemblyResolver.cs
- KeyGesture.cs
- TaiwanCalendar.cs
- CompilerInfo.cs
- ComponentChangedEvent.cs
- ProxyManager.cs
- DataGridTextBoxColumn.cs
- WebHttpSecurityModeHelper.cs
- ExceptionTrace.cs
- PropertyDescriptorCollection.cs