使用C#调用EasyHook来Hook系统API实现游戏加速,宿主进程会卡死是什么原因?如何排查?

问题描述

部分代码如下:publicstaticdoubleSpeedUp=1.0;publicstaticintStoredRealTime=0;publicstaticintStoredFakeTime=0;publicLocalHookQueryPerformanceCounterHook=null;privateboolSetSpeedUp(doubleNewSpeedUp){SpeedUp=NewSpeedUp;if(QueryPerformanceCounterHook==null){QueryPerformanceCounterHook=LocalHook.Create(LocalHook.GetProcAddress("kernel32.dll","QueryPerformanceCounter"),newQueryPerformanceCounterDelegate(QueryPerformanceCounterEx),this);QueryPerformanceCounterHook.ThreadACL.SetExclusiveACL(newInt32[0]);}}staticboolQueryPerformanceCounterEx(outlongFakeTime){boolresult;longRealTime=0;intTickCount=timeGetTime();result=QueryPerformanceCounter(outRealTime);if(StoredRealTime==0)//Initialize{StoredRealTime=RealTime;StoredFakeTime=TickCount;}FakeTime=StoredFakeTime+(long)((RealTime-StoredRealTime)*SpeedUp);StoredRealTime=RealTime;StoredFakeTime=FakeTime;returnresult;}[DllImport("Winmm.dll")]staticexterninttimeGetTime();[UnmanagedFunctionPointer(CallingConvention.StdCall,CharSet=CharSet.Auto,SetLastError=true)]delegateboolQueryPerformanceCounterDelegate(outlonglpPerformanceCount);[DllImport("kernel32.dll")]staticexternboolQueryPerformanceCounter(outlonglpPerformanceCount);

解决方案

本帖最后由 Kasimodo2009 于 2015-02-16 11:41:00 编辑
解决方案二:
没人知道吗?第一次来CSDN发帖,不会让我失望吧……
解决方案三:
问题已解决,我自己说说吧!问题出在timeGetTime和QueryPerformanceCounter两个API函数有冲突,具体为什么我也不太清楚,但是注释掉第20行代码,初始化的StoredFakeTime用RealTime赋值就好了,希望有高手给出具体原因!
解决方案四:
分给我把

时间: 2024-09-20 08:05:18

使用C#调用EasyHook来Hook系统API实现游戏加速,宿主进程会卡死是什么原因?如何排查?的相关文章

winform-在C# Winform项目 利用WIN32 API 无法再次调用第三方的应用系统

问题描述 在C# Winform项目 利用WIN32 API 无法再次调用第三方的应用系统 在C# Winform项目,from窗体中有一个Panel控件和一个Button控件. 目前已经能够利用WIN32 API 找到"监控系统"窗口的句柄,并将那个获取到的窗口"附加"到了Panel控件上. 并能够正常在Panel控件中显示"监控系统". 请问下,怎么样实现form窗体关闭后,再次再点击Button控件能够再次获取到"监控系统&quo

网页api调用。-如何防止非法调用充值系统api

问题描述 如何防止非法调用充值系统api 本人最近在做一个充值系统,调用第三方充值api,其中有个加密签名调用api,比如 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@page?import="com.yanek.util.MD5"%> <% String uid=request.getParame

iOS5系统API和5个开源库的JSON解析速度测试

   iOS5系统API和5个开源库的JSON解析速度测试 iOS5新增了JSON解析的API,我们将其和其他五个开源的JSON解析库进行了解析速度的测试,下面是测试的结果和工程代码附件.   我们选择的测试对象包含下面的这几个框架,其中NSJSONSerialization是iOS5系统新增的JSON解析的API,需要iOS5的环境,如果您在更低的版本进行测试,应该屏蔽相应的代码调用.   - [SBJSON (json-framework)](http://code.google.com/p

js调用两个网站的api出现了一些

问题描述 js调用两个网站的api出现了一些 其中一部分的内容只用到一个api(fun(),标记1中的内容)可以单独运行,但是前面加了一些内容(嵌到另一个网站的api中,前一部分可以,到了标记2就不能再运行了) 一直不知为什么,求问(代码比较乱,见谅) <html> <head> <meta charset="UTF-8"> <title>街景地图</title> <script type="text/java

在WebSphere Cast Iron中使用JSON(二) 调用基于JSON的REST API

简介 WebSphere Cast Iron(以下简称 Cast Iron)被广泛用于整个内部和外部应用程序的集成和迁移.过去,大多数基于 SaaS 的应用程序都公开了 REST API,这些 API 用于处理 JSON 数据.然而,Cast Iron 主要处理 XML 和 XML 模式.为了支持有效的 REST API 调用,Cast Iron 引入了两个新活动来处理 JSON 数据. 您可以在调用 REST API (大部分是 SaaS 供应商公开的)的过程中使用 Read JSON 和 W

windows-怎样通过调用修改注册表的API来实现以下内容

问题描述 怎样通过调用修改注册表的API来实现以下内容 怎样通过调用修改注册表的API来实现一个程序启动时启动另一个程序且执行完后执行另一个程序? 没涉及过这个方面,求教,谢谢了~ 解决方案 这个只通过注册表是实现不了,可以利用注册表来实现,在某个程序启动时,读到指定的注册表,然后另一个程序,判断这个程序是否运行完,如果运行完成,再执行另一个程序 判断某个程序是否执行完成 ,可以用这个 if (System.Diagnostics.Process.GetProcessesByName("要获取的

.net 调用百度统计接口 Data API

问题描述 .net 调用百度统计接口 Data API 网上只有php的示例,我在第一步调用登录时,返回的是0f 接口说明里面 也没有说明 这代表的是什么. 无从下手了.. 解决方案 你是指这个? http://tongji.baidu.com/open/api/ 这不是有API文档么 解决方案二: 发送httprequest,然后对应读取结果 解决方案三: 楼主问题解决了吗?请问是怎么解决的,我现在也是返回0f

php调用新浪短链接API的方法_php技巧

本文实例讲述了php调用新浪短链接API的方法.分享给大家供大家参考.具体方法如下: 复制代码 代码如下: <?php //Sina App_Key define('SINA_APPKEY', '31641035'); function curlQuery($url) {  //设置附加HTTP头  $addHead = array(  "Content-type: application/json"  );  //初始化curl,当然,你也可以用fsockopen代替  $cu

使用Python调用容器服务应用的API

在使用容器服务的过程中,总避免不了和应用打交道.当然,最简单的方式就是通过容器服务的控制台进行图形化的操作.那么另外一种方式就是通过调用应用API的方式了.今天这篇文章,主要介绍如何使用Python语言来调用应用的API 调用方式 应用管理REST API需要指向集群的接入点地址,并通过自签名证书的HTTPS请求和集群进行交互. 获取集群接入点和证书 在调用应用API之前,最重要的一点是获取所在集群的接入点地址以及对应集群的数字证书.目前获取接入点和证书有两种方式. 控制台方式 在集群列表页面选