private CcwHook(IDisposable comObject, IntPtr comInterface, IntPtr originalInterface, CcwWrappers wrappers) { this.comObject = comObject; this.originalInterface = originalInterface; this.wrappers = wrappers; queryInterfaceDetour = QueryInterfaceDetour; releaseDetour = ReleaseDetour; var vtable = Marshal.ReadIntPtr(comInterface); var originalQueryInterfacePointer = Marshal.ReadIntPtr(vtable, 0 * IntPtr.Size); var originalReleasePointer = Marshal.ReadIntPtr(vtable, 2 * IntPtr.Size); originalQueryInterface = Marshal.GetDelegateForFunctionPointer<QueryInterfaceDelegate>(originalQueryInterfacePointer); originalRelease = Marshal.GetDelegateForFunctionPointer<ReleaseDelegate>(originalReleasePointer); Marshal.WriteIntPtr(vtable, 0 * IntPtr.Size, Marshal.GetFunctionPointerForDelegate(queryInterfaceDetour)); Marshal.WriteIntPtr(vtable, 2 * IntPtr.Size, Marshal.GetFunctionPointerForDelegate(releaseDetour)); }
private CcwHook(IDisposable comObject, IntPtr comInterface, IntPtr originalInterface, CcwWrappers wrappers) { this.comObject = comObject; this.originalInterface = originalInterface; this.wrappers = wrappers; queryInterfaceDetour = QueryInterfaceDetour; releaseDetour = ReleaseDetour; var vtable = Marshal.ReadIntPtr(comInterface); var originalQueryInterfacePointer = Marshal.ReadIntPtr(vtable, 0 * IntPtr.Size); var originalReleasePointer = Marshal.ReadIntPtr(vtable, 2 * IntPtr.Size); originalQueryInterface = Marshal.GetDelegateForFunctionPointer <QueryInterfaceDelegate>(originalQueryInterfacePointer); originalRelease = Marshal.GetDelegateForFunctionPointer <ReleaseDelegate>(originalReleasePointer); Marshal.WriteIntPtr(vtable, 0 * IntPtr.Size, Marshal.GetFunctionPointerForDelegate(queryInterfaceDetour)); Marshal.WriteIntPtr(vtable, 2 * IntPtr.Size, Marshal.GetFunctionPointerForDelegate(releaseDetour)); }
public CcwHook(IDisposable comObject, IntPtr comInterface, CcwWrappers wrappers) : this(comObject, comInterface, comInterface, wrappers) { }
public CcwHook(IDisposable comObject, CcwWrapper wrapper, CcwWrappers wrappers) : this(comObject, wrapper.Wrapper, wrapper.Original, wrappers) { }
public CcwHook(IDisposable comObject, IntPtr comInterface, CcwWrappers wrappers) : this(comObject, comInterface, comInterface, wrappers) { }
public CcwHook(IDisposable comObject, CcwWrapper wrapper, CcwWrappers wrappers) : this(comObject, wrapper.Wrapper, wrapper.Original, wrappers) { }