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
- EditorZoneBase.cs
- KeyToListMap.cs
- MD5.cs
- JournalEntryStack.cs
- DocumentSchemaValidator.cs
- ValueUnavailableException.cs
- NominalTypeEliminator.cs
- DispatcherFrame.cs
- _NetRes.cs
- ConstrainedDataObject.cs
- MemberMemberBinding.cs
- Number.cs
- MobileCategoryAttribute.cs
- GeneralTransformCollection.cs
- CaseInsensitiveOrdinalStringComparer.cs
- UnauthorizedWebPart.cs
- ScriptingJsonSerializationSection.cs
- AsyncPostBackErrorEventArgs.cs
- WsdlBuildProvider.cs
- WindowsRichEditRange.cs
- MobileControl.cs
- serverconfig.cs
- AnnotationComponentChooser.cs
- EventManager.cs
- FlowDocumentPageViewerAutomationPeer.cs
- BinaryObjectWriter.cs
- ExtensionFile.cs
- CheckoutException.cs
- MSAAWinEventWrap.cs
- DataSourceExpressionCollection.cs
- KeyedCollection.cs
- XmlSchemaImporter.cs
- WindowsAuthenticationEventArgs.cs
- BlockingCollection.cs
- DataColumnMapping.cs
- Attachment.cs
- ListItemCollection.cs
- PkcsMisc.cs
- WindowsEditBox.cs
- CleanUpVirtualizedItemEventArgs.cs
- WebPartMenu.cs
- HeaderedItemsControl.cs
- NativeMethods.cs
- ComponentConverter.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- ResetableIterator.cs
- Transform3DGroup.cs
- SecurityPermission.cs
- DbConnectionPoolGroupProviderInfo.cs
- TextTreeInsertUndoUnit.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- RelationshipEnd.cs
- TypeDependencyAttribute.cs
- IndependentlyAnimatedPropertyMetadata.cs
- ItemCheckEvent.cs
- ObjectManager.cs
- ToolStripStatusLabel.cs
- DbSourceCommand.cs
- SerialPinChanges.cs
- _FtpDataStream.cs
- DistributedTransactionPermission.cs
- KeyValuePairs.cs
- ContextMenuStripActionList.cs
- DataBoundLiteralControl.cs
- SqlConnectionString.cs
- DragDrop.cs
- QilPatternFactory.cs
- XmlSchemaExporter.cs
- HoistedLocals.cs
- PenLineJoinValidation.cs
- SamlDelegatingWriter.cs
- TdsParserStateObject.cs
- sqlstateclientmanager.cs
- WebPartEditorApplyVerb.cs
- EraserBehavior.cs
- MenuItemStyle.cs
- RuntimeEnvironment.cs
- QuaternionAnimationBase.cs
- PageParser.cs
- XamlDesignerSerializationManager.cs
- IntSecurity.cs
- Tuple.cs
- Serializer.cs
- XmlNodeComparer.cs
- ServiceModelSectionGroup.cs
- formatter.cs
- WebPartEventArgs.cs
- SettingsPropertyIsReadOnlyException.cs
- PropertyTabAttribute.cs
- ButtonFieldBase.cs
- ArgIterator.cs
- UnsafeNativeMethods.cs
- CodeCatchClause.cs
- Encoding.cs
- SectionVisual.cs
- RadialGradientBrush.cs
- CodeParameterDeclarationExpression.cs
- CrossAppDomainChannel.cs
- NumberSubstitution.cs
- Lasso.cs