Пример #1
0
        static unsafe partial void SetNativeHooks()
        {
            InitRectangleHooks();
            InitGPTHooks();

            Hook.Create <ThisCall0>(AddressOfFunction(FunctionNames.BWLD_Render), ctx =>
            {
                return((ecx) =>
                {
                    var bwld = NativeObject.FromPointer <BWLD>(ecx);
                    ctx.CallOriginal(o => o(ecx));
                    bwld.RenderOne();
                    return new IntPtr(1);
                });
            }).Initialize();

            Hook.Create <StdCall1>(AddressOfFunction(FunctionNames.Malloc), ctx =>
            {
                return((size) =>
                {
                    return NativeHandle.Alloc((int)size).Address;
                });
            }).Initialize();

            Hook.Create <StdCall1>(AddressOfFunction(FunctionNames.Free), ctx =>
            {
                return((address) =>
                {
                    NativeHandle.Free(address);
                    return new IntPtr(1);
                });
            }).Initialize();

            Hook.Create <StdCall0>(AddressOfFunction(FunctionNames.__WinMainCRTStartup), ctx =>
            {
                return(() =>
                {
                    GameTimer = new GameTimer();
                    var envStrings = PInvoke.Call(LibraryNames.KERNEL32, "GetEnvironmentStrings");
                    Marshal.WriteIntPtr((IntPtr)0x004EA1A4, envStrings);
                    UnmanagedFunctionCall.StdCall(AddressOfFunction(FunctionNames.__cinit));
                    UnmanagedFunctionCall.StdCall(AddressOfFunction(FunctionNames.WinMain), ModuleHandle, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
                    return IntPtr.Zero;
                });
            }).Initialize();
        }
Пример #2
0
 public T QueryInterface <T>() where T : NativeObject
 {
     try
     {
         if (managedObject is null)
         {
             if (NativeObject.TryGetClassID(this, out var classID))
             {
                 managedObject = NativeObjectFactory.Create(classID);
                 managedObject.SetHandle(this);
             }
         }
         return((T)managedObject);
     }
     catch
     {
         return(null);
     }
 }
Пример #3
0
 private bool IsClassTest()
 {
     return(NativeObject.TryGetClassID(this, out _));
 }