GetSystemTimeAsFileTime函数

举报
Amrf 发表于 2020/03/13 10:35:18 2020/03/13
【摘要】 最近goland证书过期了,手动修改系统时间还可以使用(仅供学习研究,支持购买正版)然后就考虑可以使用getsystemtimeasfiletimemsdn介绍:https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsystemtimeasfiletimeFILETIME的使用https:...

最近goland证书过期了,手动修改系统时间还可以使用(仅供学习研究,支持购买正版)

然后就考虑可以使用getsystemtimeasfiletime

msdn介绍:

https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsystemtimeasfiletime

FILETIME的使用

https://blog.csdn.net/TracyZhongcf/article/details/3711684

https://stackoverflow.com/questions/11222709/assigning-data-and-time-to-filetime-structure-in-c

也可以用runasdate小工具,原理一样的,不过自己方便和放心点而已;

参考实现如下:

#define _AFXDLL
#include <windows.h>
#include <cstdio>
#include <QBuffer>
#include <QDebug>
#include <QString>
#include "detours.h"
#define  PER_SECOND    1*10*1000*1000     //1秒
void (__stdcall *oldGetSystemTimeAsFileTime)(
  LPFILETIME lpSystemTimeAsFileTime
) = GetSystemTimeAsFileTime;
void newGetSystemTimeAsFileTime(
  LPFILETIME lpSystemTimeAsFileTime
        )
{
    ULONGLONG ullSeconds = 0* PER_SECOND;
    FILETIME tTime;
    ULARGE_INTEGER temp;//1961==> 可以参考11222709写一个更近的时间
    temp.QuadPart = ullSeconds;
    lpSystemTimeAsFileTime->dwHighDateTime = temp.HighPart;
    lpSystemTimeAsFileTime->dwLowDateTime = temp.LowPart;
}
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
    LONG error;
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
    {
         DetourTransactionBegin();
         DetourUpdateThread(GetCurrentThread());
         DetourAttach(&(PVOID&)oldGetSystemTimeAsFileTime, newGetSystemTimeAsFileTime);
         error = DetourTransactionCommit();
         if (error == NO_ERROR) {
               printf("echofx" DETOURS_STRINGIFY(DETOURS_BITS) ".dll:"" Detoured Echo().\n");
         }else {
               printf("echofx" DETOURS_STRINGIFY(DETOURS_BITS) ".dll:"" Error detouring Echo(): %d\n", error);
         }
         printf("ul_reason_for_call=%d\n",ul_reason_for_call);
     }
        break;
	case DLL_THREAD_ATTACH:
    {
        printf("ul_reason_for_call=%d\n",ul_reason_for_call);
        break;
    }
	case DLL_THREAD_DETACH:
        printf("ul_reason_for_call=%d\n",ul_reason_for_call);
        break;
	case DLL_PROCESS_DETACH:
    {
        DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());
        DetourDetach(&(PVOID&)oldGetSystemTimeAsFileTime, newGetSystemTimeAsFileTime);
        error = DetourTransactionCommit();
        //printf("echofx" DETOURS_STRINGIFY(DETOURS_BITS) ".dll:" " Removed Echo() (result=%d)\n", error);
        //printf("ul_reason_for_call=%d\n",ul_reason_for_call);
	break;
    }
	}
	return TRUE;
}


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。