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
- FamilyCollection.cs
- QilCloneVisitor.cs
- TextElementCollection.cs
- NavigationEventArgs.cs
- HelpProvider.cs
- DriveInfo.cs
- GiveFeedbackEventArgs.cs
- ThemeInfoAttribute.cs
- ParagraphResult.cs
- PtsContext.cs
- DragDrop.cs
- ISessionStateStore.cs
- SortExpressionBuilder.cs
- DocComment.cs
- sortedlist.cs
- DecoderBestFitFallback.cs
- ProfileSettingsCollection.cs
- NodeLabelEditEvent.cs
- GeometryHitTestResult.cs
- ConnectionStringsExpressionEditor.cs
- OuterGlowBitmapEffect.cs
- DataTableCollection.cs
- DefaultTraceListener.cs
- InvokeGenerator.cs
- Tuple.cs
- ProfessionalColors.cs
- WsdlBuildProvider.cs
- DataGridViewButtonCell.cs
- SqlRewriteScalarSubqueries.cs
- WindowsImpersonationContext.cs
- PositiveTimeSpanValidatorAttribute.cs
- BinaryParser.cs
- FileDetails.cs
- ExpressionBindings.cs
- DataGridRowEventArgs.cs
- LinkDesigner.cs
- MessageQueueTransaction.cs
- FirewallWrapper.cs
- PromptEventArgs.cs
- SpoolingTaskBase.cs
- PanelStyle.cs
- WindowsTreeView.cs
- Point3DAnimationUsingKeyFrames.cs
- XmlWrappingReader.cs
- BamlResourceSerializer.cs
- StrongNameMembershipCondition.cs
- HttpConfigurationSystem.cs
- Baml6Assembly.cs
- Deflater.cs
- SessionEndingEventArgs.cs
- TextTreeExtractElementUndoUnit.cs
- WindowsRegion.cs
- UnmanagedBitmapWrapper.cs
- Quaternion.cs
- WindowsPrincipal.cs
- BitmapEffectInputConnector.cs
- ColorConvertedBitmap.cs
- ToolStripSettings.cs
- Solver.cs
- ConnectionStringsExpressionBuilder.cs
- relpropertyhelper.cs
- CaseStatementProjectedSlot.cs
- ControlCodeDomSerializer.cs
- SelectionListDesigner.cs
- CellTreeNodeVisitors.cs
- SpanIndex.cs
- RemoteWebConfigurationHost.cs
- InvalidDataException.cs
- FormattedTextSymbols.cs
- OutKeywords.cs
- AccessControlEntry.cs
- DirectoryRedirect.cs
- ConfigurationSectionGroup.cs
- DecimalConverter.cs
- TextParagraphView.cs
- SR.cs
- HashStream.cs
- KeyMatchBuilder.cs
- HandleValueEditor.cs
- HealthMonitoringSectionHelper.cs
- brushes.cs
- ArrayList.cs
- SqlVersion.cs
- ZoneIdentityPermission.cs
- PlanCompiler.cs
- WmlMobileTextWriter.cs
- StreamHelper.cs
- XmlArrayAttribute.cs
- FutureFactory.cs
- CodeGeneratorOptions.cs
- IsolatedStorage.cs
- StreamWriter.cs
- BufferedGraphicsContext.cs
- ObjectQuery_EntitySqlExtensions.cs
- UrlMappingCollection.cs
- SplineQuaternionKeyFrame.cs
- CharUnicodeInfo.cs
- ButtonField.cs
- BamlLocalizabilityResolver.cs