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
- ScrollItemPatternIdentifiers.cs
- ExceptionUtil.cs
- Matrix3D.cs
- SqlHelper.cs
- Int32Collection.cs
- RectangleConverter.cs
- SelfIssuedTokenFactoryCredential.cs
- PropertyEmitterBase.cs
- TripleDESCryptoServiceProvider.cs
- TreeViewEvent.cs
- DataTableClearEvent.cs
- HttpApplicationStateWrapper.cs
- XmlSubtreeReader.cs
- CatalogPart.cs
- FormViewPagerRow.cs
- SettingsProperty.cs
- XmlEncodedRawTextWriter.cs
- ManipulationLogic.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- CatalogPartChrome.cs
- WebControl.cs
- QueryPageSettingsEventArgs.cs
- FolderLevelBuildProviderCollection.cs
- AudioLevelUpdatedEventArgs.cs
- BamlTreeMap.cs
- DesignerAutoFormat.cs
- ProcessHost.cs
- ControlPropertyNameConverter.cs
- CompressedStack.cs
- ColumnWidthChangingEvent.cs
- ReadOnlyTernaryTree.cs
- TemplateComponentConnector.cs
- ByteConverter.cs
- VirtualDirectoryMappingCollection.cs
- BaseTemplateParser.cs
- SafeArchiveContext.cs
- CodeTypeConstructor.cs
- DBCSCodePageEncoding.cs
- XPathAncestorQuery.cs
- CompilationSection.cs
- SequenceFullException.cs
- SQLMoneyStorage.cs
- DrawingState.cs
- XmlSchemaProviderAttribute.cs
- ListViewDeleteEventArgs.cs
- DiffuseMaterial.cs
- UrlMappingsModule.cs
- Rect3D.cs
- _LocalDataStoreMgr.cs
- EndpointFilterProvider.cs
- DataPagerFieldCollection.cs
- DefaultValueTypeConverter.cs
- FamilyTypefaceCollection.cs
- ZipFileInfo.cs
- SmiSettersStream.cs
- HostingEnvironmentException.cs
- JournalEntry.cs
- NameTable.cs
- ItemDragEvent.cs
- ComponentEditorForm.cs
- PartitionerQueryOperator.cs
- ComPlusTypeLoader.cs
- ObjectKeyFrameCollection.cs
- TrackingRecord.cs
- WebPartConnection.cs
- OraclePermissionAttribute.cs
- SemanticBasicElement.cs
- HtmlInputReset.cs
- SpellerHighlightLayer.cs
- LowerCaseStringConverter.cs
- PrivacyNoticeElement.cs
- DateTimeOffset.cs
- DataGridrowEditEndingEventArgs.cs
- UriExt.cs
- hebrewshape.cs
- ColumnCollection.cs
- JournalEntryStack.cs
- RtfControlWordInfo.cs
- IteratorDescriptor.cs
- DeploymentExceptionMapper.cs
- TreeNodeStyleCollection.cs
- XmlIncludeAttribute.cs
- ProcessThread.cs
- RangeBase.cs
- ToolboxService.cs
- ScriptMethodAttribute.cs
- NullableBoolConverter.cs
- XPathBuilder.cs
- DataTableReaderListener.cs
- _IPv6Address.cs
- EntityCommandCompilationException.cs
- ControlPaint.cs
- InputLanguage.cs
- SoapIgnoreAttribute.cs
- DetailsViewDeleteEventArgs.cs
- OrElse.cs
- SystemNetworkInterface.cs
- BitmapEffectGeneralTransform.cs
- EnumerableWrapperWeakToStrong.cs
- XmlNamedNodeMap.cs