Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / CompMod / System / Runtime / InteropServices / StandardOleMarshalObject.cs / 1305376 / 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; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ActivatedMessageQueue.cs
- _HeaderInfoTable.cs
- X509Chain.cs
- TableLayoutSettings.cs
- Atom10FeedFormatter.cs
- MultiBindingExpression.cs
- X509UI.cs
- CompiledRegexRunnerFactory.cs
- DecoderNLS.cs
- TrackingStringDictionary.cs
- PtsContext.cs
- MultiPropertyDescriptorGridEntry.cs
- AutomationElement.cs
- TimersDescriptionAttribute.cs
- httpstaticobjectscollection.cs
- TextMarkerSource.cs
- SwitchAttribute.cs
- __TransparentProxy.cs
- SecureStringHasher.cs
- SqlBooleanMismatchVisitor.cs
- CompilerTypeWithParams.cs
- DataObjectPastingEventArgs.cs
- PrintDialog.cs
- FastEncoderWindow.cs
- ToolStripMenuItemDesigner.cs
- Schema.cs
- BuildDependencySet.cs
- DataBoundControl.cs
- BlurBitmapEffect.cs
- PermissionListSet.cs
- DATA_BLOB.cs
- AQNBuilder.cs
- ContentType.cs
- CodeAttributeArgument.cs
- PixelFormat.cs
- TypeBuilder.cs
- StringCollection.cs
- PasswordRecovery.cs
- StrongNameUtility.cs
- SqlCacheDependency.cs
- BasicHttpBindingCollectionElement.cs
- SqlColumnizer.cs
- BuildDependencySet.cs
- DocumentPageView.cs
- IdentityValidationException.cs
- DetailsViewCommandEventArgs.cs
- UIElementAutomationPeer.cs
- PropertyRecord.cs
- ExtensionMethods.cs
- ObjectDisposedException.cs
- ItemContainerGenerator.cs
- ByteRangeDownloader.cs
- FontClient.cs
- MdiWindowListStrip.cs
- DocumentGrid.cs
- Parameter.cs
- EpmSourceTree.cs
- TimeSpanValidatorAttribute.cs
- TargetException.cs
- DataGridViewRowPrePaintEventArgs.cs
- DataGridViewCellCollection.cs
- SqlDataSourceQueryEditorForm.cs
- Color.cs
- XmlExpressionDumper.cs
- DrawingImage.cs
- UTF32Encoding.cs
- ProcessThreadCollection.cs
- HelpProvider.cs
- IdnMapping.cs
- _ConnectStream.cs
- NGCUIElementCollectionSerializerAsync.cs
- BrowserDefinitionCollection.cs
- StringUtil.cs
- SoapTransportImporter.cs
- SqlBulkCopyColumnMappingCollection.cs
- securitymgrsite.cs
- UnmanagedHandle.cs
- ExecutionEngineException.cs
- NetworkAddressChange.cs
- EventLogPermissionEntry.cs
- ByteArrayHelperWithString.cs
- DataControlField.cs
- SoapObjectInfo.cs
- DateRangeEvent.cs
- SchemaHelper.cs
- GeometryCombineModeValidation.cs
- MemberDescriptor.cs
- BinaryReader.cs
- TypeDescriptor.cs
- DBCommand.cs
- TypedTableBase.cs
- VerificationException.cs
- MasterPageBuildProvider.cs
- AssemblyInfo.cs
- SetIterators.cs
- TableLayoutSettingsTypeConverter.cs
- UpdatePanel.cs
- QilNode.cs
- CfgParser.cs
- OperatingSystem.cs