Пожалуйста, обратите внимание, что пользователь заблокирован
Как я знаю что обычный слип аверы могут скипать как лучше сделать проверку или реализацию этого что если как то скипалось то программа крашила либо закрывала себя.
ULONGLONG uptimeBeforeSleep = GetTickCount64();
typedef NTSTATUS(WINAPI *PNtDelayExecution)(IN BOOLEAN, IN PLARGE_INTEGER);
PNtDelayExecution pNtDelayExecution = (PNtDelayExecution)GetProcAddress(GetModuleHandleW(L"ntdll.dll"), "NtDelayExecution");
LARGE_INTEGER delay;
delay.QuadPart = -10000 * 100000; // 100 seconds
pNtDelayExecution(FALSE, &delay);
ULONGLONG uptimeAfterSleep = GetTickCount64();
if ((uptimeAfterSleep - uptimeBeforeSleep) < 100000) return false;
#include <iostream>
#include "windows.h"
#define MS_PER_SECOND 10000000
unsigned long long __get_timestamp()
{
const size_t UNIX_TIME_START = 0x019DB1DED53E8000;
const size_t TICKS_PER_SECOND = 10000000;
LARGE_INTEGER time;
time.LowPart = *(DWORD*)(0x7FFE0000 + 0x14);
time.HighPart = *(long*)(0x7FFE0000 + 0x1c);
return (unsigned long long)((time.QuadPart - UNIX_TIME_START) / TICKS_PER_SECOND);
}
void __alt_sleep_seconds(size_t seconds)
{
volatile size_t x = rand();
const unsigned long long end = __get_timestamp() + seconds;
while (__get_timestamp() < end) { x += 1; }
if (__get_timestamp() - end > 2000) return;
}
int main()
{
const size_t SECONDS = 15;
std::cout << "__get_timestamp()\n";
std::cout << __get_timestamp() << "\n";
__alt_sleep_seconds(SECONDS);
std::cout << __get_timestamp() << "\n";
return 0;
}