Code:
/ 4.0 / 4.0 / 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.
//------------------------------------------------------------------------------
//
// 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
- PageThemeParser.cs
- CacheChildrenQuery.cs
- ExpressionEditorAttribute.cs
- OutputBuffer.cs
- DataGridItemCollection.cs
- TemplateEditingService.cs
- ClonableStack.cs
- TableProviderWrapper.cs
- DeviceContext2.cs
- BitVector32.cs
- SafeEventLogReadHandle.cs
- Console.cs
- TimeStampChecker.cs
- XmlSchemaAnyAttribute.cs
- TraceSection.cs
- OrthographicCamera.cs
- Semaphore.cs
- RedistVersionInfo.cs
- CryptoConfig.cs
- VariableQuery.cs
- DispatchWrapper.cs
- TreeNodeStyle.cs
- Rect.cs
- SqlStatistics.cs
- ParameterRetriever.cs
- ViewCellRelation.cs
- TaiwanCalendar.cs
- XsdBuilder.cs
- PackageRelationshipSelector.cs
- ADMembershipProvider.cs
- XmlSchemaComplexContentExtension.cs
- InternalBufferManager.cs
- SystemColors.cs
- OpCodes.cs
- ImmutableObjectAttribute.cs
- NullableDoubleAverageAggregationOperator.cs
- TableLayoutPanel.cs
- SecurityTokenTypes.cs
- ColumnHeader.cs
- SqlDataSourceEnumerator.cs
- ColorIndependentAnimationStorage.cs
- Icon.cs
- BindingContext.cs
- CollectionDataContractAttribute.cs
- RenamedEventArgs.cs
- Style.cs
- XmlObjectSerializerContext.cs
- SimpleWebHandlerParser.cs
- XmlSchemaSimpleTypeUnion.cs
- RadioButtonFlatAdapter.cs
- HtmlButton.cs
- BaseValidator.cs
- DesigntimeLicenseContextSerializer.cs
- QilGeneratorEnv.cs
- MulticastNotSupportedException.cs
- DataGridColumnCollection.cs
- WhitespaceSignificantCollectionAttribute.cs
- ErrorEventArgs.cs
- base64Transforms.cs
- ComponentResourceKeyConverter.cs
- KerberosSecurityTokenAuthenticator.cs
- RubberbandSelector.cs
- IdentityModelStringsVersion1.cs
- SelectionPattern.cs
- SevenBitStream.cs
- VectorCollection.cs
- XmlChoiceIdentifierAttribute.cs
- StringReader.cs
- Point4DConverter.cs
- DesignConnection.cs
- ServiceRoute.cs
- EventBookmark.cs
- MDIControlStrip.cs
- TreeNode.cs
- DesignerVerb.cs
- WebPartTracker.cs
- KerberosSecurityTokenParameters.cs
- Button.cs
- DataGridViewRowHeaderCell.cs
- HandledMouseEvent.cs
- BufferBuilder.cs
- Type.cs
- EdmComplexTypeAttribute.cs
- DependencyPropertyKey.cs
- PointAnimationBase.cs
- StaticFileHandler.cs
- OperatorExpressions.cs
- StringDictionary.cs
- AssociationType.cs
- ComponentCollection.cs
- DataSourceHelper.cs
- TemplateBaseAction.cs
- XmlNamespaceMappingCollection.cs
- DataComponentMethodGenerator.cs
- BuildManager.cs
- TextContainerChangedEventArgs.cs
- Single.cs
- VBIdentifierName.cs
- ProviderMetadataCachedInformation.cs
- SubclassTypeValidatorAttribute.cs