是否可以更改从GetTickCount()返回的滴答计数值?

时间:2010-09-16 22:10:39

标签: c++ windows

我正在尝试进行一些测试,它需要Windows系统启动并运行15个实时分钟才能执行某个操作。但是,等待15个实时分钟是非常耗时的。

有没有办法更改GetTickCount()返回的值,以使系统看起来已经运行了15个实时分钟?

编辑:有一个应用程序做了一些接近我想要的东西,但它似乎不起作用,我必须处理十六进制值而不是直接十进制值:http://ysgyfarnog.co.uk/utilities/AdjustTickCount/

4 个答案:

答案 0 :(得分:4)

不直接。

为什么不直接模拟调用,或者用策略对象替换执行时间检查的代码块?

struct Waiter
{
    virtual void Wait() = 0;
    virtual ~Waiter() {};
};

struct 15MinWaiter : public Waiter
{
    virtual void Wait()
    {
        //Do something that waits for 15 mins
    }
};

struct NothingWaiter : public Waiter
{
    virtual void Wait()
    {
        //Nill
    } 
};

你可以做类似于模拟对GetTickCount的调用,但是在更高级别的抽象中执行此操作可能会更好。

答案 1 :(得分:2)

出于调试目的,您可以使用_GetTickCount()替换所有对GetTickCount()的调用,这可以实现以GetTickCount()或GetTickCount()+ 15min返回,具体取决于您是否正在调试。

为什么不做一分钟,确认它有效,然后再改回十五?

答案 2 :(得分:0)

你可以做一些非常丑陋的事情,比如#define GetTickCount()MyReallyEvilReplacement()。

答案 3 :(得分:0)

我需要调试相同的问题,虽然我记得Windows中有一个“兼容性”层可以伪造刻度线,但我再也找不到有关此信息。上面链接的应用程序无法正常工作,而且由于必须测试第三方应用程序,因此无法修改源代码。

我要做的是在休眠/混合关闭/睡眠中关闭Windows系统,然后启动到BIOS,然后将日期时间更改为我需要的日期,例如,如果要测试未签名的滴答计数,则增加30天

然后,当Windows重新启动时,它无法检测到自上次计算机真正启动以来的适当时间,并认为它已经运行了30天。

使用睡眠/休眠/混合关机(后者是Windows 8的默认设置)而不是关机非常重要,因为否则会重置正常运行时间。