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
- ObjectDesignerDataSourceView.cs
- ClientTarget.cs
- XmlSchemaIdentityConstraint.cs
- FixedDocument.cs
- Cursor.cs
- XmlTextReaderImpl.cs
- CompressionTransform.cs
- Rotation3DKeyFrameCollection.cs
- RepeatButton.cs
- XmlQueryContext.cs
- LinqDataSourceDeleteEventArgs.cs
- InternalSafeNativeMethods.cs
- SelectionItemProviderWrapper.cs
- OleDbTransaction.cs
- HttpCapabilitiesSectionHandler.cs
- Variable.cs
- Empty.cs
- TableColumnCollectionInternal.cs
- CodeSubDirectory.cs
- Speller.cs
- SHA384Managed.cs
- RuntimeConfig.cs
- XmlSchemaDatatype.cs
- EventMappingSettingsCollection.cs
- WeakEventManager.cs
- XPathDocumentBuilder.cs
- StreamWriter.cs
- Utils.cs
- Monitor.cs
- HotSpotCollection.cs
- UnsupportedPolicyOptionsException.cs
- InstanceDataCollection.cs
- CompoundFileStreamReference.cs
- CustomPopupPlacement.cs
- StreamReader.cs
- OneOf.cs
- BasicHttpMessageCredentialType.cs
- ContextStack.cs
- EntityDataSourceWrapperPropertyDescriptor.cs
- MaskedTextBoxTextEditorDropDown.cs
- GenericUriParser.cs
- TPLETWProvider.cs
- AxHost.cs
- ObjectDataSourceDisposingEventArgs.cs
- Switch.cs
- StreamAsIStream.cs
- BamlResourceSerializer.cs
- EntityContainerEmitter.cs
- Serializer.cs
- WindowsUpDown.cs
- PageBuildProvider.cs
- WsatServiceAddress.cs
- Range.cs
- KeyValuePair.cs
- CodeSubDirectory.cs
- TdsParserSessionPool.cs
- PersonalizableAttribute.cs
- CodeBlockBuilder.cs
- HelpEvent.cs
- lengthconverter.cs
- SignatureResourcePool.cs
- EdmComplexPropertyAttribute.cs
- ReadOnlyTernaryTree.cs
- Single.cs
- SchemaSetCompiler.cs
- BitmapMetadata.cs
- QueryStringConverter.cs
- SubqueryTrackingVisitor.cs
- AssemblyBuilder.cs
- ProfileGroupSettingsCollection.cs
- DataGridViewRowHeightInfoPushedEventArgs.cs
- XomlDesignerLoader.cs
- MessagePropertyVariants.cs
- QueryCoreOp.cs
- DBConnection.cs
- IISUnsafeMethods.cs
- InvalidOperationException.cs
- QilInvoke.cs
- ManifestResourceInfo.cs
- Int16Animation.cs
- PopupEventArgs.cs
- TextRangeBase.cs
- ClientSession.cs
- DataServiceKeyAttribute.cs
- TraceLog.cs
- SqlBulkCopyColumnMapping.cs
- LogLogRecord.cs
- EntityDataSourceDesigner.cs
- XsdDataContractImporter.cs
- UniformGrid.cs
- GeometryHitTestParameters.cs
- VisualProxy.cs
- XmlSchemaSimpleTypeUnion.cs
- DeleteBookmarkScope.cs
- PointUtil.cs
- MsmqTransportBindingElement.cs
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- AffineTransform3D.cs
- DataViewListener.cs
- SiteMembershipCondition.cs