Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / CompMod / System / Runtime / InteropServices / StandardOleMarshalObject.cs / 1 / 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
- Button.cs
- MethodBody.cs
- Variable.cs
- DriveInfo.cs
- CodeSubDirectory.cs
- RenamedEventArgs.cs
- HwndSubclass.cs
- TrustLevel.cs
- ServiceDebugBehavior.cs
- ThicknessConverter.cs
- DataGridViewCellParsingEventArgs.cs
- DefaultValueConverter.cs
- WebServiceTypeData.cs
- InteropAutomationProvider.cs
- BinHexEncoding.cs
- DataServiceClientException.cs
- ClosableStream.cs
- FormViewUpdateEventArgs.cs
- CustomCredentialPolicy.cs
- ApplicationTrust.cs
- DbMetaDataCollectionNames.cs
- SafeLocalMemHandle.cs
- ImageAttributes.cs
- ReadContentAsBinaryHelper.cs
- TextProperties.cs
- TextEditorCharacters.cs
- Configuration.cs
- DataServiceSaveChangesEventArgs.cs
- CustomLineCap.cs
- MultiSelectRootGridEntry.cs
- StateWorkerRequest.cs
- OperandQuery.cs
- RSAPKCS1SignatureFormatter.cs
- DesignerAttribute.cs
- BooleanToSelectiveScrollingOrientationConverter.cs
- DataServiceQueryException.cs
- GraphicsPathIterator.cs
- SqlXml.cs
- DiscoveryDocument.cs
- ColumnHeader.cs
- RtfNavigator.cs
- FixUpCollection.cs
- SerializationUtilities.cs
- parserscommon.cs
- FindCriteria11.cs
- TextBoxBase.cs
- ResXDataNode.cs
- RemoteWebConfigurationHostServer.cs
- SHA256.cs
- AutomationIdentifier.cs
- TextOptionsInternal.cs
- DictionaryItemsCollection.cs
- EpmSyndicationContentDeSerializer.cs
- ToolStripGrip.cs
- ManagementNamedValueCollection.cs
- ImageMetadata.cs
- ValidationPropertyAttribute.cs
- DecoderFallbackWithFailureFlag.cs
- SocketPermission.cs
- DesignerVerb.cs
- AssemblyCache.cs
- ArgumentDesigner.xaml.cs
- CommentEmitter.cs
- OraclePermissionAttribute.cs
- VarRefManager.cs
- SoapFormatter.cs
- CrossAppDomainChannel.cs
- XmlSchemaAnnotated.cs
- WebPartCloseVerb.cs
- FileDialog_Vista.cs
- EdmEntityTypeAttribute.cs
- InputChannel.cs
- Column.cs
- SizeLimitedCache.cs
- CallSite.cs
- JavaScriptString.cs
- NonBatchDirectoryCompiler.cs
- TextBounds.cs
- _ScatterGatherBuffers.cs
- XmlMemberMapping.cs
- FilterElement.cs
- RightNameExpirationInfoPair.cs
- InvariantComparer.cs
- EventTask.cs
- WindowsGraphics.cs
- GlyphingCache.cs
- RecordConverter.cs
- TimersDescriptionAttribute.cs
- ObjectStorage.cs
- SqlInfoMessageEvent.cs
- AtomMaterializerLog.cs
- MetadataFile.cs
- DataGridHyperlinkColumn.cs
- FontDriver.cs
- HttpFileCollection.cs
- DataTemplateSelector.cs
- WebPartHeaderCloseVerb.cs
- NGCUIElementCollectionSerializerAsync.cs
- EntityContainerAssociationSet.cs
- PeerToPeerException.cs