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
- Mouse.cs
- AspNetHostingPermission.cs
- PageTheme.cs
- XmlSchemaAttribute.cs
- GroupByExpressionRewriter.cs
- EdmRelationshipRoleAttribute.cs
- TypeTypeConverter.cs
- WebServiceEnumData.cs
- IsolatedStorageSecurityState.cs
- DocComment.cs
- BlockUIContainer.cs
- ISessionStateStore.cs
- ItemChangedEventArgs.cs
- AuthorizationRule.cs
- XPathNavigator.cs
- RtfControlWordInfo.cs
- DbDataRecord.cs
- MessageQueueCriteria.cs
- COM2ExtendedUITypeEditor.cs
- Formatter.cs
- CodeObjectCreateExpression.cs
- Utilities.cs
- SQLInt32.cs
- CollectionView.cs
- DocumentXmlWriter.cs
- NativeMethods.cs
- PeerEndPoint.cs
- ScriptManager.cs
- WindowsAuthenticationModule.cs
- VersionedStreamOwner.cs
- PeerNameRegistration.cs
- Receive.cs
- MouseGesture.cs
- filewebresponse.cs
- ObjectListCommand.cs
- AuthenticationService.cs
- TreeViewItem.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- DataGridViewButtonColumn.cs
- Exception.cs
- prefixendpointaddressmessagefiltertable.cs
- RelationshipEnd.cs
- TranslateTransform.cs
- UniqueEventHelper.cs
- Psha1DerivedKeyGenerator.cs
- SmiGettersStream.cs
- ObfuscationAttribute.cs
- PropertyTabChangedEvent.cs
- HttpSocketManager.cs
- XpsSerializerWriter.cs
- TripleDES.cs
- ConstraintStruct.cs
- StaticSiteMapProvider.cs
- RootAction.cs
- TypeDescriptionProvider.cs
- XmlDocument.cs
- TagPrefixCollection.cs
- WindowsGraphics2.cs
- CustomActivityDesigner.cs
- Column.cs
- HijriCalendar.cs
- ChildTable.cs
- __Filters.cs
- PropertyInformation.cs
- SoapIgnoreAttribute.cs
- OperationAbortedException.cs
- FormViewPagerRow.cs
- Preprocessor.cs
- ModelService.cs
- OleTxTransaction.cs
- TextFormatter.cs
- FactoryMaker.cs
- Pair.cs
- MembershipValidatePasswordEventArgs.cs
- WebPartMenuStyle.cs
- TextTreeUndo.cs
- BlockCollection.cs
- OpenFileDialog.cs
- TextElementAutomationPeer.cs
- FixUp.cs
- unsafenativemethodstextservices.cs
- HighContrastHelper.cs
- SwitchLevelAttribute.cs
- PropertyConverter.cs
- LexicalChunk.cs
- ClientSettingsProvider.cs
- Utils.cs
- FlowStep.cs
- FindResponse.cs
- ToggleButtonAutomationPeer.cs
- ObjectNavigationPropertyMapping.cs
- DesignerActionMethodItem.cs
- ListViewHitTestInfo.cs
- ColumnWidthChangingEvent.cs
- SizeAnimationClockResource.cs
- DurableMessageDispatchInspector.cs
- MessageDispatch.cs
- TypeReference.cs
- WebPartTransformer.cs
- AlternateViewCollection.cs