Files
MicrosoftIris/UIX/Microsoft/Iris/OS/CLR/StandardOleMarshalObject.cs
T
2022-03-03 08:14:05 -06:00

121 lines
4.2 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Microsoft.Iris.OS.CLR.StandardOleMarshalObject
// Assembly: UIX, Version=4.8.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
// MVID: A56C6C9D-B7F6-46A9-8BDE-B3D9B8D60B11
// Assembly location: C:\Program Files\Zune\UIX.dll
using System;
using System.Runtime.InteropServices;
using System.Security.Permissions;
namespace Microsoft.Iris.OS.CLR
{
[ComVisible(true)]
public class StandardOleMarshalObject : MarshalByRefObject, UnsafeNativeMethods.IMarshal
{
protected StandardOleMarshalObject()
{
}
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
private IntPtr GetStdMarshaller(ref Guid riid, int dwDestContext, int mshlflags)
{
IntPtr ppMarshal = IntPtr.Zero;
IntPtr iunknownForObject = Marshal.GetIUnknownForObject(this);
if (iunknownForObject != IntPtr.Zero)
{
try
{
if (UnsafeNativeMethods.CoGetStandardMarshal(ref riid, iunknownForObject, dwDestContext, IntPtr.Zero, mshlflags, out ppMarshal) == 0)
return ppMarshal;
}
finally
{
Marshal.Release(iunknownForObject);
}
}
throw new InvalidOperationException();
}
[SecurityPermission(SecurityAction.Demand, Flags = 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 0;
}
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
int UnsafeNativeMethods.IMarshal.GetMarshalSizeMax(
ref Guid riid,
IntPtr pv,
int dwDestContext,
IntPtr pvDestContext,
int mshlflags,
out int pSize)
{
Guid riid1 = riid;
IntPtr stdMarshaller = GetStdMarshaller(ref riid1, dwDestContext, mshlflags);
try
{
return UnsafeNativeMethods.CoGetMarshalSizeMax(out pSize, ref riid1, stdMarshaller, dwDestContext, pvDestContext, mshlflags);
}
finally
{
Marshal.Release(stdMarshaller);
}
}
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
int UnsafeNativeMethods.IMarshal.MarshalInterface(
object pStm,
ref Guid riid,
IntPtr pv,
int dwDestContext,
IntPtr pvDestContext,
int mshlflags)
{
Guid riid1 = riid;
IntPtr stdMarshaller = GetStdMarshaller(ref riid1, dwDestContext, mshlflags);
try
{
return UnsafeNativeMethods.CoMarshalInterface(pStm, ref riid1, stdMarshaller, dwDestContext, pvDestContext, mshlflags);
}
finally
{
Marshal.Release(stdMarshaller);
if (pStm != null)
Marshal.ReleaseComObject(pStm);
}
}
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
int UnsafeNativeMethods.IMarshal.UnmarshalInterface(
object pStm,
ref Guid riid,
out IntPtr ppv)
{
ppv = IntPtr.Zero;
if (pStm != null)
Marshal.ReleaseComObject(pStm);
return -2147467263;
}
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
int UnsafeNativeMethods.IMarshal.ReleaseMarshalData(object pStm)
{
if (pStm != null)
Marshal.ReleaseComObject(pStm);
return -2147467263;
}
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
int UnsafeNativeMethods.IMarshal.DisconnectObject(int dwReserved) => -2147467263;
}
}